'零基礎Hadoop學習之路你必須要知道的一些知識點'

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

零基礎Hadoop學習之路你必須要知道的一些知識點

4.3 Hadoop資源管理–YARN

當 MapReduce 發展到 2.x 時就不使用 JobTracker 來作為自己的資源管理框架,而選擇使用 YARN。這裡需要說明的是,如果使用 JobTracker 來作為 Hadoop 集群的資源管理框架的話,那麼除了 MapReduce 任務以外,不能夠運行其他任務。也就是說,如果我們集群的 MapReduce 任務並沒有那麼飽滿的話,集群資源等於是白白浪費的。所以提出了另外的一個資源管理架構 YARN(Yet Another Resource Manager)。這裡需要注意,YARN 不是 JobTracker 的簡單升級,而是“大換血”。同時 Hadoop 2.X 也包含了此架構。Apache Hadoop 2.X 項目包含以下模塊。

Hadoop Common:為 Hadoop 其他模塊提供支持的基礎模塊。

HDFS:Hadoop:分佈式文件系統。

YARN:任務分配和集群資源管理框架。

MapReduce:並行和可擴展的用於處理大數據的模式。

YARN 資源管理框架包括 ResourceManager(資源管理器)、ApplicationMaster、NodeManager(節點管理器)。各個組件描述如下。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

零基礎Hadoop學習之路你必須要知道的一些知識點

4.3 Hadoop資源管理–YARN

當 MapReduce 發展到 2.x 時就不使用 JobTracker 來作為自己的資源管理框架,而選擇使用 YARN。這裡需要說明的是,如果使用 JobTracker 來作為 Hadoop 集群的資源管理框架的話,那麼除了 MapReduce 任務以外,不能夠運行其他任務。也就是說,如果我們集群的 MapReduce 任務並沒有那麼飽滿的話,集群資源等於是白白浪費的。所以提出了另外的一個資源管理架構 YARN(Yet Another Resource Manager)。這裡需要注意,YARN 不是 JobTracker 的簡單升級,而是“大換血”。同時 Hadoop 2.X 也包含了此架構。Apache Hadoop 2.X 項目包含以下模塊。

Hadoop Common:為 Hadoop 其他模塊提供支持的基礎模塊。

HDFS:Hadoop:分佈式文件系統。

YARN:任務分配和集群資源管理框架。

MapReduce:並行和可擴展的用於處理大數據的模式。

YARN 資源管理框架包括 ResourceManager(資源管理器)、ApplicationMaster、NodeManager(節點管理器)。各個組件描述如下。

零基礎Hadoop學習之路你必須要知道的一些知識點

ResourceManager 是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationManager,AM)。

Scheduler 負責分配最少但滿足 Application 運行所需的資源量給 Application。Scheduler 只是基於資源的使用情況進行調度,並不負責監視/跟蹤 Application 的狀態,當然也不會處理失敗的 Task。

ApplicationManager 負責處理客戶端提交的 Job 以及協商第一個 Container 以供 ApplicationMaster 運行,並且在 ApplicationMaster 失敗的時候會重新啟動 ApplicationMaster(YARN 中使用 Resource Container 概念來管理集群的資源,Resource Container 是資源的抽象,每個 Container 包括一定的內存、IO、網絡等資源)。

ApplicatonMaster 是一個框架特殊的庫,每個 Application 有一個 ApplicationMaster,主要管理和監控部署在 YARN 集群上的各種應用。

NodeManager主要負責啟動 ResourceManager 分配給 ApplicationMaster 的 Container,並且會監視 Container 的運行情況。在啟動 Container 的時候,NodeManager 會設置一些必要的環境變量以及相關文件;當所有準備工作做好後,才會啟動該 Container。啟動後,NodeManager 會週期性地監視該 Container 運行佔用的資源情況,若是超過了該 Container 所聲明的資源量,則會 kill 掉該 Container 所代表的進程。

如圖 1-11 所示,該集群上有兩個任務(對應 Node2、Node6 上面的 AM),並且 Node2 上面的任務運行有 4 個 Container 來執行任務;而 Node6 上面的任務則有 2 個 Container 來執行任務。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

零基礎Hadoop學習之路你必須要知道的一些知識點

4.3 Hadoop資源管理–YARN

當 MapReduce 發展到 2.x 時就不使用 JobTracker 來作為自己的資源管理框架,而選擇使用 YARN。這裡需要說明的是,如果使用 JobTracker 來作為 Hadoop 集群的資源管理框架的話,那麼除了 MapReduce 任務以外,不能夠運行其他任務。也就是說,如果我們集群的 MapReduce 任務並沒有那麼飽滿的話,集群資源等於是白白浪費的。所以提出了另外的一個資源管理架構 YARN(Yet Another Resource Manager)。這裡需要注意,YARN 不是 JobTracker 的簡單升級,而是“大換血”。同時 Hadoop 2.X 也包含了此架構。Apache Hadoop 2.X 項目包含以下模塊。

Hadoop Common:為 Hadoop 其他模塊提供支持的基礎模塊。

HDFS:Hadoop:分佈式文件系統。

YARN:任務分配和集群資源管理框架。

MapReduce:並行和可擴展的用於處理大數據的模式。

YARN 資源管理框架包括 ResourceManager(資源管理器)、ApplicationMaster、NodeManager(節點管理器)。各個組件描述如下。

零基礎Hadoop學習之路你必須要知道的一些知識點

ResourceManager 是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationManager,AM)。

Scheduler 負責分配最少但滿足 Application 運行所需的資源量給 Application。Scheduler 只是基於資源的使用情況進行調度,並不負責監視/跟蹤 Application 的狀態,當然也不會處理失敗的 Task。

ApplicationManager 負責處理客戶端提交的 Job 以及協商第一個 Container 以供 ApplicationMaster 運行,並且在 ApplicationMaster 失敗的時候會重新啟動 ApplicationMaster(YARN 中使用 Resource Container 概念來管理集群的資源,Resource Container 是資源的抽象,每個 Container 包括一定的內存、IO、網絡等資源)。

ApplicatonMaster 是一個框架特殊的庫,每個 Application 有一個 ApplicationMaster,主要管理和監控部署在 YARN 集群上的各種應用。

NodeManager主要負責啟動 ResourceManager 分配給 ApplicationMaster 的 Container,並且會監視 Container 的運行情況。在啟動 Container 的時候,NodeManager 會設置一些必要的環境變量以及相關文件;當所有準備工作做好後,才會啟動該 Container。啟動後,NodeManager 會週期性地監視該 Container 運行佔用的資源情況,若是超過了該 Container 所聲明的資源量,則會 kill 掉該 Container 所代表的進程。

如圖 1-11 所示,該集群上有兩個任務(對應 Node2、Node6 上面的 AM),並且 Node2 上面的任務運行有 4 個 Container 來執行任務;而 Node6 上面的任務則有 2 個 Container 來執行任務。

零基礎Hadoop學習之路你必須要知道的一些知識點

5.Hadoop生態

Hadoop 的生態圈其實就是一群動物在狂歡。我們來看看一些主要的框架。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

零基礎Hadoop學習之路你必須要知道的一些知識點

4.3 Hadoop資源管理–YARN

當 MapReduce 發展到 2.x 時就不使用 JobTracker 來作為自己的資源管理框架,而選擇使用 YARN。這裡需要說明的是,如果使用 JobTracker 來作為 Hadoop 集群的資源管理框架的話,那麼除了 MapReduce 任務以外,不能夠運行其他任務。也就是說,如果我們集群的 MapReduce 任務並沒有那麼飽滿的話,集群資源等於是白白浪費的。所以提出了另外的一個資源管理架構 YARN(Yet Another Resource Manager)。這裡需要注意,YARN 不是 JobTracker 的簡單升級,而是“大換血”。同時 Hadoop 2.X 也包含了此架構。Apache Hadoop 2.X 項目包含以下模塊。

Hadoop Common:為 Hadoop 其他模塊提供支持的基礎模塊。

HDFS:Hadoop:分佈式文件系統。

YARN:任務分配和集群資源管理框架。

MapReduce:並行和可擴展的用於處理大數據的模式。

YARN 資源管理框架包括 ResourceManager(資源管理器)、ApplicationMaster、NodeManager(節點管理器)。各個組件描述如下。

零基礎Hadoop學習之路你必須要知道的一些知識點

ResourceManager 是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationManager,AM)。

Scheduler 負責分配最少但滿足 Application 運行所需的資源量給 Application。Scheduler 只是基於資源的使用情況進行調度,並不負責監視/跟蹤 Application 的狀態,當然也不會處理失敗的 Task。

ApplicationManager 負責處理客戶端提交的 Job 以及協商第一個 Container 以供 ApplicationMaster 運行,並且在 ApplicationMaster 失敗的時候會重新啟動 ApplicationMaster(YARN 中使用 Resource Container 概念來管理集群的資源,Resource Container 是資源的抽象,每個 Container 包括一定的內存、IO、網絡等資源)。

ApplicatonMaster 是一個框架特殊的庫,每個 Application 有一個 ApplicationMaster,主要管理和監控部署在 YARN 集群上的各種應用。

NodeManager主要負責啟動 ResourceManager 分配給 ApplicationMaster 的 Container,並且會監視 Container 的運行情況。在啟動 Container 的時候,NodeManager 會設置一些必要的環境變量以及相關文件;當所有準備工作做好後,才會啟動該 Container。啟動後,NodeManager 會週期性地監視該 Container 運行佔用的資源情況,若是超過了該 Container 所聲明的資源量,則會 kill 掉該 Container 所代表的進程。

如圖 1-11 所示,該集群上有兩個任務(對應 Node2、Node6 上面的 AM),並且 Node2 上面的任務運行有 4 個 Container 來執行任務;而 Node6 上面的任務則有 2 個 Container 來執行任務。

零基礎Hadoop學習之路你必須要知道的一些知識點

5.Hadoop生態

Hadoop 的生態圈其實就是一群動物在狂歡。我們來看看一些主要的框架。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hbase

HBase(Hadoop Database)是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用 HBase 技術可在廉價 PC Server 上搭建起大規模結構化存儲集群。

Hive

Hive 是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。

Pig

Pig 是一個基於 Hadoop 的大規模數據分析平臺,它提供的 SQL-LIKE 語言叫作 Pig Latin。該語言的編譯器會把類 SQL 的數據分析請求轉換為一系列經過優化處理的 Map-Reduce 運算。

Sqoop

Sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫(MySQL、post-gresql等)間進行數據的傳遞,可以將一個關係型數據庫中的數據導入 Hadoop 的 HDFS 中,也可以將 HDFS 的數據導入關係型數據庫中,如下圖所示。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

零基礎Hadoop學習之路你必須要知道的一些知識點

4.3 Hadoop資源管理–YARN

當 MapReduce 發展到 2.x 時就不使用 JobTracker 來作為自己的資源管理框架,而選擇使用 YARN。這裡需要說明的是,如果使用 JobTracker 來作為 Hadoop 集群的資源管理框架的話,那麼除了 MapReduce 任務以外,不能夠運行其他任務。也就是說,如果我們集群的 MapReduce 任務並沒有那麼飽滿的話,集群資源等於是白白浪費的。所以提出了另外的一個資源管理架構 YARN(Yet Another Resource Manager)。這裡需要注意,YARN 不是 JobTracker 的簡單升級,而是“大換血”。同時 Hadoop 2.X 也包含了此架構。Apache Hadoop 2.X 項目包含以下模塊。

Hadoop Common:為 Hadoop 其他模塊提供支持的基礎模塊。

HDFS:Hadoop:分佈式文件系統。

YARN:任務分配和集群資源管理框架。

MapReduce:並行和可擴展的用於處理大數據的模式。

YARN 資源管理框架包括 ResourceManager(資源管理器)、ApplicationMaster、NodeManager(節點管理器)。各個組件描述如下。

零基礎Hadoop學習之路你必須要知道的一些知識點

ResourceManager 是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationManager,AM)。

Scheduler 負責分配最少但滿足 Application 運行所需的資源量給 Application。Scheduler 只是基於資源的使用情況進行調度,並不負責監視/跟蹤 Application 的狀態,當然也不會處理失敗的 Task。

ApplicationManager 負責處理客戶端提交的 Job 以及協商第一個 Container 以供 ApplicationMaster 運行,並且在 ApplicationMaster 失敗的時候會重新啟動 ApplicationMaster(YARN 中使用 Resource Container 概念來管理集群的資源,Resource Container 是資源的抽象,每個 Container 包括一定的內存、IO、網絡等資源)。

ApplicatonMaster 是一個框架特殊的庫,每個 Application 有一個 ApplicationMaster,主要管理和監控部署在 YARN 集群上的各種應用。

NodeManager主要負責啟動 ResourceManager 分配給 ApplicationMaster 的 Container,並且會監視 Container 的運行情況。在啟動 Container 的時候,NodeManager 會設置一些必要的環境變量以及相關文件;當所有準備工作做好後,才會啟動該 Container。啟動後,NodeManager 會週期性地監視該 Container 運行佔用的資源情況,若是超過了該 Container 所聲明的資源量,則會 kill 掉該 Container 所代表的進程。

如圖 1-11 所示,該集群上有兩個任務(對應 Node2、Node6 上面的 AM),並且 Node2 上面的任務運行有 4 個 Container 來執行任務;而 Node6 上面的任務則有 2 個 Container 來執行任務。

零基礎Hadoop學習之路你必須要知道的一些知識點

5.Hadoop生態

Hadoop 的生態圈其實就是一群動物在狂歡。我們來看看一些主要的框架。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hbase

HBase(Hadoop Database)是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用 HBase 技術可在廉價 PC Server 上搭建起大規模結構化存儲集群。

Hive

Hive 是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。

Pig

Pig 是一個基於 Hadoop 的大規模數據分析平臺,它提供的 SQL-LIKE 語言叫作 Pig Latin。該語言的編譯器會把類 SQL 的數據分析請求轉換為一系列經過優化處理的 Map-Reduce 運算。

Sqoop

Sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫(MySQL、post-gresql等)間進行數據的傳遞,可以將一個關係型數據庫中的數據導入 Hadoop 的 HDFS 中,也可以將 HDFS 的數據導入關係型數據庫中,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

Flume

Flume 是 Cloudera 提供的一個高可用、高可靠、分佈式的海量日誌採集、聚合和傳輸的系統,Flume 支持在日誌系統中定製各類數據發送方,用於收集數據。同時,Flume 提供對數據進行簡單處理並寫到各種數據接受方(可定製)的能力,如下圖。

"

零基礎學Hadoop你必須要知道的一些知識點,在學習編程的路上,都沒有那麼容易的事情,畢竟成為一個優秀的程序員沒有數年之功,是很難成功的。

零基礎Hadoop學習之路你必須要知道的一些知識點

章目錄:

一、理論知識

1.Hadoop的整體印象

2.Hadoop的優勢

3.Hadoop可以做什麼

4.Hadoop結構

4.1 Hadoop存儲--HDFS

4.2 Hadoop計算--MapReduce

4.3 Hadoop資源管理--YARN

5.Hadoop生態

二、Hadoop實際操作

本文內容諸多借鑑,在借鑑處會表示出處,可在出處查看詳情。

一、理論知識

參考Hadoop是什麼,能幹什麼,怎麼使用

1.Hadoop的整體印象

一句話概括:Hadoop就是存儲海量數據和分析海量數據的工具。

Hadoop是由java語言編寫的,在分佈式服務器集群上存儲海量數據並運行分佈式分析應用的開源框架,其核心部件是HDFS與MapReduce。

HDFS是一個分佈式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分佈式儲存和讀取。

MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器裡執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分佈式計算。

2.Hadoop的優勢

高可靠性 : Hadoop 按位存儲和處理數據的能力值得人們信賴。

高擴展性 : Hadoop 是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以幹計的節點中。

高效性 : Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。

高容錯性 : Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分。

低成本 : 與一體機、商用數據倉庫以及 QlikView、 Yonghong Z- Suites 等數據集市相比,Hadoop 是開源的,項目的軟件成本因此會大大降低。Hadoop 帶有用 Java 語言編寫的框架,因此運行在 linux 生產平臺上是非常理想的, Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

3.Hadoop可以做什麼

可以大數據存儲:分佈式存儲

日誌處理:擅長日誌分析

ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫

機器學習: 比如Apache Mahout項目

搜索引擎:Hadoop + lucene實現

數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦

Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。

實際應用:

Flume+Logstash+Kafka+Spark Streaming進行實時日誌處理分析

零基礎Hadoop學習之路你必須要知道的一些知識點

酷狗音樂的大數據平臺

零基礎Hadoop學習之路你必須要知道的一些知識點

4.Hadoop結構

參考Hadoop 系列(一)基本概念

4.1 Hadoop存儲–HDFS

Hadoop 的存儲系統是 HDFS(Hadoop Distributed File System)分佈式文件系統,對外部客戶端而言,HDFS 就像一個傳統的分級文件系統,可以進行創建、刪除、移動或重命名文件或文件夾等操作,與 Linux 文件系統類似。

Hadoop HDFS 的架構是基於一組特定的節點構建的(見圖s),這些節名稱節點(NameNode,僅一個),它在 HDFS 內部提供元數據服務;第二名稱節點(Secondary NameNode),名稱節點的幫助節點,主要是為了整合元數據操作(注意不是名稱節點的備份);數據節點(DataNode),它為 HDFS 提供存儲塊。由於僅有一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗,在 Hadoop2.x 後有較大改善)。存儲在 HDFS 中的文件被分成塊,然後這些塊被複制到多個數據節點中(DataNode),這與傳統的 RAID 架構大不相同。塊的大小(通常為 128M)和複製的塊數量在創建文件時由客戶機決定。名稱節點可以控制所有文件操作。HDFS 內部的所有通信都基於標準的 TCP/IP 協議。

(1)名稱節點(NameNode)

它是一個通常在HDFS架構中單獨機器上運行的組件,負責管理文件系統名稱空間和控制外部客戶機的訪問。NameNode決定是否將文件映射到DataNode上的複製塊上。對於最常見的3個複製塊,第一個複製塊存儲在同一機架的不同節點上,最後一個複製塊存儲在不同機架的某個節點上。

(2)數據節點(DataNode)

數據節點也是一個通常在HDFS架構中的單獨機器上運行的組件。Hadoop集群包含一個NameNode和大量DataNode。數據節點通常以機架的形式組織,機架通過一個交換機將所有系統連接起來。

數據節點響應來自HDFS客戶機的讀寫請求。它們還響應來自NameNode的創建、刪除和複製塊的命令。名稱節點依賴來自每個數據節點的定期心跳(heartbeat)消息。每條消息都包含一個塊報告,名稱節點可以根據這個報告驗證塊映射和其他文件系統元數據。如果數據節點不能發送心跳消息,名稱節點將採取修復措施,重新複製在該節點上丟失的塊。

(3)第二名稱節點(Secondary NameNode)

第二名稱節點的作用在於為HDFS中的名稱節點提供一個Checkpoint,它只是名稱節點的一個助手節點,這也是它在社區內被認為是Checkpoint Node的原因。

如下圖所示,fsimage 是 NameNode 啟動時對整個文件系統的快照;edits 是在 NameNode 啟動後對文件系統的改動序列。

只有在NameNode重啟時,edits才會合併到fsimage文件中,從而得到一個文件系統的最新快照。但是在生產環境集群中的NameNode是很少重啟的,這意味著當NameNode運行很長時間後,edits文件會變得很大。而當NameNode宕機時,edits就會丟失很多改動。

零基礎Hadoop學習之路你必須要知道的一些知識點

如圖 1-4 所示,Secondary NameNode 會定時到 NameNode 去獲取名稱節點的 edits,並及時更新到自己 fsimage 上。這樣,如果 NameNode 宕機,我們也可以使用 Secondary-NameNode 的信息來恢復 NameNode。並且,如果 Secondary NameNode 新的 fsimage 文件達到一定閾值,它就會將其拷貝回名稱節點上,這樣 NameNode 在下次重啟時會使用這個新的 fsimage 文件,從而減少重啟的時間。

零基礎Hadoop學習之路你必須要知道的一些知識點

舉個數據上傳的例子來深入理解下HDFS內部是怎麼做的。

零基礎Hadoop學習之路你必須要知道的一些知識點

文件在客戶端時會被分塊,這裡可以看到文件被分為 5 個塊,分別是:A、B、C、D、E。同時為了負載均衡,所以每個節點有 3 個塊。下面來看看具體步驟:

客戶端將要上傳的文件按 128M 的大小分塊。

客戶端向名稱節點發送寫數據請求。

名稱節點記錄各個 DataNode 信息,並返回可用的 DataNode 列表。

客戶端直接向 DataNode 發送分割後的文件塊,發送過程以流式寫入。

寫入完成後,DataNode 向 NameNode 發送消息,更新元數據。

這裡需要注意:

寫 1T 文件,需要 3T 的存儲,3T 的網絡流量。

在執行讀或寫的過程中,NameNode 和 DataNode 通過 HeartBeat 進行保存通信,確定 DataNode 活著。如果發現 DataNode 死掉了,就將死掉的 DataNode 上的數據,放到其他節點去,讀取時,讀其他節點。

宕掉一個節點沒關係,還有其他節點可以備份;甚至,宕掉某一個機架也沒關係;其他機架上也有備份。

4.2 Hadoop計算–MapReduce

MapReduce用於大規模數據集(大於1TB)的並行運算。概念**“Map(映射)”和“Reduce(歸納)”**以及它們的主要思想,都是從函數式編程語言借來的,還有從矢量編程語言借來的特性。

當前的軟件實現是指定一個 Map(映射)函數:用來把一組鍵值對映射成一組新的鍵值對。指定併發的 Reduce(歸納)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

下面將以 Hadoop 的“Hello World”例程—單詞計數來分析MapReduce的邏輯,如下圖 所示。一般的 MapReduce 程序會經過以下幾個過程:輸入(Input)、輸入分片(Splitting)、Map階段、Shuffle階段、Reduce階段、輸出(Final result)。

零基礎Hadoop學習之路你必須要知道的一些知識點

1.輸入就不用說了,數據一般放在 HDFS 上面就可以了,而且文件是被分塊的。關於文件塊和文件分片的關係,在輸入分片中說明。

2.輸入分片:在進行 Map 階段之前,MapReduce 框架會根據輸入文件計算輸入分片(split),每個輸入分片會對應一個 Map 任務,輸入分片往往和 HDFS 的塊關係很密切。例如,HDFS 的塊的大小是 128M,如果我們輸入兩個文件,大小分別是 27M、129M,那麼 27M 的文件會作為一個輸入分片(不足 128M 會被當作一個分片),而 129MB 則是兩個輸入分片(129-128=1,不足 128M,所以 1M 也會被當作一個輸入分片),所以,一般來說,一個文件塊會對應一個分片。如圖 1-7 所示,Splitting 對應下面的三個數據應該理解為三個分片。

3.Map 階段:這個階段的處理邏輯就是編寫好的 Map 函數,因為一個分片對應一個 Map 任務,並且是對應一個文件塊,所以這裡其實是數據本地化的操作,也就是所謂的移動計算而不是移動數據。如圖 1-7 所示,這裡的操作其實就是把每句話進行分割,然後得到每個單詞,再對每個單詞進行映射,得到單詞和1的鍵值對。

4.Shuffle 階段:這是“奇蹟”發生的地方,MapReduce 的核心其實就是 Shuffle。那麼 Shuffle 的原理呢?Shuffle 就是將 Map 的輸出進行整合,然後作為 Reduce 的輸入發送給 Reduce。簡單理解就是把所有 Map 的輸出按照鍵進行排序,並且把相對鍵的鍵值對整合到同一個組中。如上圖所示,Bear、Car、Deer、River 是排序的,並且 Bear 這個鍵有兩個鍵值對。

5.Reduce 階段:與 Map 類似,這裡也是用戶編寫程序的地方,可以針對分組後的鍵值對進行處理。如上圖所示,針對同一個鍵 Bear 的所有值進行了一個加法操作,得到 這樣的鍵值對。

6.輸出:Reduce 的輸出直接寫入 HDFS 上,同樣這個輸出文件也是分塊的。

用一張圖表示上述的運行流程:MapReduce 的本質就是把一組鍵值對 經過 Map 階段映射成新的鍵值對 ;接著經過 Shuffle/Sort 階段進行排序和“洗牌”,把鍵值對排序,同時把相同的鍵的值整合;最後經過 Reduce 階段,把整合後的鍵值對組進行邏輯處理,輸出到新的鍵值對 。這樣的一個過程,其實就是 MapReduce 的本質。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hadoop MapReduce 可以根據其使用的資源管理框架不同,而分為 MR v1 和 YARN/MR v2 版本。

在 MR v1 版本中,資源管理主要是 Jobtracker 和 TaskTracker。Jobtracker 主要負責:作業控制(作業分解和狀態監控),主要是 MR 任務以及資源管理;而 TaskTracker 主要是調度 Job 的每一個子任務 task;並且接收 JobTracker 的命令。

在 YARN/MR v2 版本中,YARN 把 JobTracker 的工作分為兩個部分:

ResourceManager 資源管理器全局管理所有應用程序計算資源的分配。

ApplicationMaster 負責相應的調度和協調。

NodeManager 是每一臺機器框架的代理,是執行應用程序的容器,監控應用程序的資源(CPU、內存、硬盤、網絡)使用情況,並且向調度器彙報。

零基礎Hadoop學習之路你必須要知道的一些知識點

4.3 Hadoop資源管理–YARN

當 MapReduce 發展到 2.x 時就不使用 JobTracker 來作為自己的資源管理框架,而選擇使用 YARN。這裡需要說明的是,如果使用 JobTracker 來作為 Hadoop 集群的資源管理框架的話,那麼除了 MapReduce 任務以外,不能夠運行其他任務。也就是說,如果我們集群的 MapReduce 任務並沒有那麼飽滿的話,集群資源等於是白白浪費的。所以提出了另外的一個資源管理架構 YARN(Yet Another Resource Manager)。這裡需要注意,YARN 不是 JobTracker 的簡單升級,而是“大換血”。同時 Hadoop 2.X 也包含了此架構。Apache Hadoop 2.X 項目包含以下模塊。

Hadoop Common:為 Hadoop 其他模塊提供支持的基礎模塊。

HDFS:Hadoop:分佈式文件系統。

YARN:任務分配和集群資源管理框架。

MapReduce:並行和可擴展的用於處理大數據的模式。

YARN 資源管理框架包括 ResourceManager(資源管理器)、ApplicationMaster、NodeManager(節點管理器)。各個組件描述如下。

零基礎Hadoop學習之路你必須要知道的一些知識點

ResourceManager 是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(ApplicationManager,AM)。

Scheduler 負責分配最少但滿足 Application 運行所需的資源量給 Application。Scheduler 只是基於資源的使用情況進行調度,並不負責監視/跟蹤 Application 的狀態,當然也不會處理失敗的 Task。

ApplicationManager 負責處理客戶端提交的 Job 以及協商第一個 Container 以供 ApplicationMaster 運行,並且在 ApplicationMaster 失敗的時候會重新啟動 ApplicationMaster(YARN 中使用 Resource Container 概念來管理集群的資源,Resource Container 是資源的抽象,每個 Container 包括一定的內存、IO、網絡等資源)。

ApplicatonMaster 是一個框架特殊的庫,每個 Application 有一個 ApplicationMaster,主要管理和監控部署在 YARN 集群上的各種應用。

NodeManager主要負責啟動 ResourceManager 分配給 ApplicationMaster 的 Container,並且會監視 Container 的運行情況。在啟動 Container 的時候,NodeManager 會設置一些必要的環境變量以及相關文件;當所有準備工作做好後,才會啟動該 Container。啟動後,NodeManager 會週期性地監視該 Container 運行佔用的資源情況,若是超過了該 Container 所聲明的資源量,則會 kill 掉該 Container 所代表的進程。

如圖 1-11 所示,該集群上有兩個任務(對應 Node2、Node6 上面的 AM),並且 Node2 上面的任務運行有 4 個 Container 來執行任務;而 Node6 上面的任務則有 2 個 Container 來執行任務。

零基礎Hadoop學習之路你必須要知道的一些知識點

5.Hadoop生態

Hadoop 的生態圈其實就是一群動物在狂歡。我們來看看一些主要的框架。

零基礎Hadoop學習之路你必須要知道的一些知識點

Hbase

HBase(Hadoop Database)是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用 HBase 技術可在廉價 PC Server 上搭建起大規模結構化存儲集群。

Hive

Hive 是建立在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。

Pig

Pig 是一個基於 Hadoop 的大規模數據分析平臺,它提供的 SQL-LIKE 語言叫作 Pig Latin。該語言的編譯器會把類 SQL 的數據分析請求轉換為一系列經過優化處理的 Map-Reduce 運算。

Sqoop

Sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫(MySQL、post-gresql等)間進行數據的傳遞,可以將一個關係型數據庫中的數據導入 Hadoop 的 HDFS 中,也可以將 HDFS 的數據導入關係型數據庫中,如下圖所示。

零基礎Hadoop學習之路你必須要知道的一些知識點

Flume

Flume 是 Cloudera 提供的一個高可用、高可靠、分佈式的海量日誌採集、聚合和傳輸的系統,Flume 支持在日誌系統中定製各類數據發送方,用於收集數據。同時,Flume 提供對數據進行簡單處理並寫到各種數據接受方(可定製)的能力,如下圖。

零基礎Hadoop學習之路你必須要知道的一些知識點

Oozie

Oozie 是基於 Hadoop 的調度器,以 XML 的形式寫調度流程,可以調度 Mr、Pig、Hive、shell、jar 任務等。

主要的功能如下。

Workflow:順序執行流程節點,支持 fork(分支多個節點)、join(將多個節點合併為一個)。

Coordinator:定時觸發 Workflow。

Bundle Job:綁定多個 Coordinator。

Chukwa

Chukwa 是一個開源的、用於監控大型分佈式系統的數據收集系統。它構建在 Hadoop 的 HDFS 和 MapReduce 框架上,繼承了 Hadoop 的可伸縮性和魯棒性。Chukwa 還包含了一個強大和靈活的工具集,可用於展示、監控和分析已收集的數據。

ZooKeeper

ZooKeeper 是一個開放源碼的分佈式應用程序協調服務,是 Google 的 Chubby 一個開源的實現,是 Hadoop 和 Hbase 的重要組件,如圖 1-15 所示。它是一個為分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。

關注“華北IT培訓網”心想事項走薪路

"

相關推薦

推薦中...