1. 程式人生 > 實用技巧 >菜鳥的Hadoop快速入門

菜鳥的Hadoop快速入門

一、相關概念

1、大資料

大資料是一門概念,也是一門技術,是以Hadoop為代表的大資料平臺框架上進行各種資料分析的技術。

大資料包括了以Hadoop和Spark為代表的基礎大資料框架,還包括實時資料處理,離線資料處理,資料分析,資料探勘和用機器演算法進行預測分析等技術。

2、Hadoop

Hadoop是一個開源的大資料框架,是一個分散式計算的解決方案。

Hadoop的兩個核心解決了資料儲存問題(HDFS分散式檔案系統)和分散式計算問題(MapRe-duce)。

舉例1:使用者想要獲取某個路徑的資料,資料存放在很多的機器上,作為使用者不用考慮在哪臺機器上,HD-FS自動搞定。

舉例2:如果一個100p的檔案,希望過濾出含有Hadoop字串的行。這種場景下,HDFS分散式儲存,突破了伺服器硬碟大小的限制,解決了單臺機器無法儲存大檔案的問題,同時MapReduce分散式計算可以將大資料量的作業先分片計算,最後彙總輸出。

二、Hadoop特點

優點

1、支援超大檔案。HDFS儲存的檔案可以支援TB和PB級別的資料。

2、檢測和快速應對硬體故障。資料備份機制,NameNode通過心跳機制來檢測DataNode是否還存在。

3、高擴充套件性。可建構在廉價機上,實現線性(橫向)擴充套件,當叢集增加新節點之後,NameNode也可以感知,將資料分發和備份到相應的節點上。

4、成熟的生態圈。藉助開源的力量,圍繞Hadoop衍生的一些小工具。

缺點

1、不能做到低延遲。高資料吞吐量做了優化,犧牲了獲取資料的延遲。

2、不適合大量的小檔案儲存。

3、檔案修改效率低。HDFS適合一次寫入,多次讀取的場景。

三、HDFS介紹

1、HDFS框架分析

HDFS是Master和Slave的主從結構。主要由Name-Node、Secondary NameNode、DataNode構成。

NameNode

管理HDFS的名稱空間和資料塊對映信儲存元資料與檔案到資料塊對映的地方。

如果NameNode掛掉了,檔案就會無法重組,怎麼辦?有哪些容錯機制?

Hadoop可以配置成HA即高可用叢集,叢集中有兩個NameNode節點,一臺active主節點,另一臺stan-dby備用節點,兩者資料時刻保持一致。當主節點不可用時,備用節點馬上自動切換,使用者感知不到,避免了NameNode的單點問題。

Secondary NameNode

輔助NameNode,分擔NameNode工作,緊急情況下可輔助恢復NameNode。

DataNode

Slave節點,實際儲存資料、執行資料塊的讀寫並彙報儲存資訊給NameNode。

2、HDFS檔案讀寫

檔案按照資料塊的方式進行儲存在DataNode上,資料塊是抽象塊,作為儲存和傳輸單元,而並非整個檔案。

檔案為什麼要按照塊來儲存呢?

首先遮蔽了檔案的概念,簡化儲存系統的設計,比如100T的檔案大於磁碟的儲存,需要把檔案分成多個數據塊進而儲存到多個磁碟;為了保證資料的安全,需要備份的,而資料塊非常適用於資料的備份,進而提升資料的容錯能力和可用性。

資料塊大小設定如何考慮?

檔案資料塊大小如果太小,一般的檔案也就會被分成多個數據塊,那麼在訪問的時候也就要訪問多個數據塊地址,這樣效率不高,同時也會對NameNode的記憶體消耗比較嚴重;資料塊設定得太大的話,對並行的支援就不太好了,同時系統如果重啟需要載入資料,資料塊越大,系統恢復就會越長。

3.2.1 HDFS檔案讀流程

1、向NameNode通訊查詢元資料(block所在的DataNode節點),找到檔案塊所在的DataNode伺服器。

2、挑選一臺DataNode(就近原則,然後隨機)伺服器,請求建立socket流。

3、DataNode開始傳送資料(從磁盤裡面讀取資料放入流,以packet為單位來做校驗)。

4、客戶端已packet為單位接收,現在本地快取,然後寫入目標檔案,後面的block塊就相當於是append到前面的block塊最後合成最終需要的檔案。

3.2.2 HDFS檔案寫流程

1、向NameNode通訊請求上傳檔案,NameNode檢查目標檔案是否已存在,父目錄是否存在。

2、NameNode返回確認可以上傳。

3、client會先對檔案進行切分,比如一個block塊128m,檔案有300m就會被切分成3個塊,一個128m、一個128m、一個44m。請求第一個block該傳輸到哪些DataNode伺服器上。

4、NameNode返回DataNode的伺服器。

5、client請求一臺DataNode上傳資料,第一個DataNode收到請求會繼續呼叫第二個DataNode,然後第二個呼叫第三個DataNode,將整個通道建立完成,逐級返回客戶端。

6、client開始往A上傳第一個block,當然在寫入的時候DataNode會進行資料校驗,第一臺DataNode收到後就會傳給第二臺,第二臺傳給第三臺。

7、當一個block傳輸完成之後,client再次請求NameNode上傳第二個block的伺服器。

四、MapReduce介紹

1、概念

MapReduce是一種程式設計模型,是一種程式設計方法,是抽象的理論,採用了分而治之的思想。MapReduce框架的核心步驟主要分兩部分,分別是Map和Reduce。每個檔案分片由單獨的機器去處理,這就是Map的方法,將各個機器計算的結果彙總並得到最終的結果,這就是Reduce的方法。

2、工作流程

向MapReduce框架提交一個計算作業時,它會首先把計算作業拆分成若干個Map任務,然後分配到不同的節點上去執行,每一個Map任務處理輸入資料中的一部分,當Map任務完成後,它會生成一些中間檔案,這些中間檔案將會作為Reduce任務的輸入資料。Reduce任務的主要目標就是把前面若干個Map的輸出彙總到一起並輸出。

3、執行MapReduce示例

執行Hadoop自帶的MapReduce經典示例Word-count,統計文字中出現的單詞及其次數。首先將任務提交到Hadoop框架上。

檢視MapReduce執行結束後的輸出檔案目錄及結果內容。

可以看到統計單詞出現的次數結果

五、Hadoop安裝

牆裂推薦:史上最詳細的Hadoop環境搭建(blog.csdn.net/hliq5399/ar…)

1、Hadoop部署模式

本地模式

偽分散式模式

完全分散式模式

以上部署模式區分的依據是NameNode、Data-Node、ResourceManager、NodeManager等模組執行在幾個JVM程序、幾個機器上。

2、安裝步驟(以偽分散式模式為例)

學習Hadoop一般是在偽分散式模式下進行。這種模式是在一臺機器上各個程序上執行Hadoop的各個模組,偽分散式的意思是雖然各個模組是在各個程序上分開執行的,但是隻是執行在一個作業系統上的,並不是真正的分散式。

5.2.1 JDK包下載、解壓安裝及JAVA環境變數配置

exportJAVA_HOME=/home/admin/apps/jdk1.8.0_151

exportCLASSPATH=.:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

exportPATH=JAVA_HOME/bin:PATH

5.2.2 Hadoop包下載、解壓安裝及Hadoop環境變數配置

exportHADOOP_HOME="/zmq/modules/hadoop/hadoop-3.1.0"

exportPATH=HADOOP_HOME/bin:HADOOP_HOME/sbin:$PATH

5.2.3 配置Hadoop-env.sh、mapred-env.sh、yarn-env.sh檔案的JAVA_HOME引數

exportJAVA_HOME="/home/admin/apps/jdk1.8.0_151"

5.2.4 配置core-site.xml,配置的是HDFS的地址和Hadoop臨時目錄

5.2.5 配置hdfs-site.xml,設定HDFS儲存時的備份數量,這裡是偽分散式部署,就填寫1

5.2.6 格式化HDFS,啟動NameNode、Data-Node、SecondaryNameNode,檢視程序

5.2.7 搭建完成,操作HDFS(常用的新建目錄、上傳下載檔案等),以及執行MapReduceJob

六、Hadoop更多

以上介紹的僅是對Hadoop的初步學習和使用,Ha-doop的HA完全分散式部署、Hadoop的資源排程YARN、Hadoop的高可用和容錯機制、Hadoop生態圈的其他元件等等還沒有去研究,感嘆Hadoop水很深,哈哈。

作者簡介:夢琴,兩年+測試經驗,當前主要負責內部平臺產品的測試及部分外部交付專案測試。