菜鳥的Hadoop快速入門

一、相關概念

1大數據

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

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

2Hadoop

Hadoop是一個開源的大數據框架,是一個分佈式計算的解決方案。

Hadoop的兩個核心解決了數據存儲問題(HDFS分佈式文件系統)和分佈式計算問題(MapReduce)。

舉例1:用戶想要獲取某個路徑的數據,數據存放在很多的機器上,作為用戶不用考慮在哪臺機器上,HDFS自動搞定。

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

二、Hadoop特點

1優點

1、支持超大文件。HDFS存儲的文件可以支持TB和PB級別的數據。

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

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

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

2缺點

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

2、不適合大量的小文件存儲。

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

三、HDFS介紹1HDFS框架分析

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

菜鳥的Hadoop快速入門

NameNode

管理HDFS的名稱空間和數據塊映射信存儲元數據與文件到數據塊映射的地方。

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

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

Secondary NameNode

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

DataNode

Slave節點,實際存儲數據、執行數據塊的讀寫並彙報存儲信息給NameNode。

2HDFS文件讀寫

文件按照數據塊的方式進行存儲在DataNode上,數據塊是抽象塊,作為存儲和傳輸單元,而並非整個文件。

菜鳥的Hadoop快速入門

文件為什麼要按照塊來存儲呢?

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

數據塊大小設置如何考慮?

答:文件數據塊大小如果太小,一般的文件也就會被分成多個數據塊,那麼在訪問的時候也就要訪問多個數據塊地址,這樣效率不高,同時也會對NameNode的內存消耗比較嚴重;數據塊設置得太大的話,對並行的支持就不太好了,同時系統如果重啟需要加載數據,數據塊越大,系統恢復就會越長。

3.2.1HDFS文件讀流程

菜鳥的Hadoop快速入門

1.向NameNode通信查詢元數據(block所在的DataNode節點),找到文件塊所在的DataNode服務器。

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

3.DataNode開始發送數據(從磁盤裡面讀取數據放入流,以packet為單位來做校驗)。

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

3.2.2HDFS文件寫流程

菜鳥的Hadoop快速入門

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的輸出彙總到一起並輸出。

菜鳥的Hadoop快速入門

3運行MapReduce示例

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

菜鳥的Hadoop快速入門

查看MapReduce運行結束後的輸出文件目錄及結果內容。

菜鳥的Hadoop快速入門

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

菜鳥的Hadoop快速入門

五、Hadoop安裝

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

1Hadoop部署模式

本地模式

偽分佈式模式

完全分佈式模式

以上部署模式區分的依據是NameNode、DataNode、ResourceManager、NodeManager等模塊運行在幾個JVM進程、幾個機器上。

菜鳥的Hadoop快速入門

2安裝步驟(以偽分佈示模式為例)

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

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

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

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$PATH

菜鳥的Hadoop快速入門

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

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

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

菜鳥的Hadoop快速入門

5.2.3配置Hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME參數

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

菜鳥的Hadoop快速入門

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

菜鳥的Hadoop快速入門

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

菜鳥的Hadoop快速入門

5.2.6格式化HDFS,啟動NameNode、DataNode、SecondaryNameNode,查看進程

菜鳥的Hadoop快速入門

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

六、Hadoop更多

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


分享到:


相關文章: