1.1 Hadoop
概念:hadoop是一個由Apache基金會所開發的分布式系統基礎架構。是根據google發表的GFS(Google File System)論文產生過來的。
優點:
1. 它是一個能夠對大量數據進行分布式處理的軟件框架。以一種可靠、高效、可伸縮的方式進行數據處理。
2. 高可靠性,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分布處理。
3. 高效性,因為它以並行的方式工作,通過並行處理加快處理速度。
4. 可伸縮的,能夠處理 PB 級數據。此外,Hadoop 依賴於社區服務,因此它的成本比較低,任何人都可以使用。
Hadoop是一個能夠讓用戶輕松架構和使用的分布式計算平台。用戶可以輕松地在Hadoop上開發和運行處理海量數據的應用程序。它主要有以下幾個優點:
1.高可靠性。Hadoop按位存儲和處理數據的能力值得人們信賴。
2.高擴展性。Hadoop是在可用的計算機集簇間分配數據並完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。
3.高效性。Hadoop能夠在節點之間動態地移動數據,並保證各個節點的動態平衡,因此處理速度非常快。
4.高容錯性。Hadoop能夠自動保存數據的多個副本,並且能夠自動將失敗的任務重新分配。
5.低成本。與一體機、商用數據倉庫以及QlikView、Yonghong Z-Suite等數據集市相比,hadoop是開源的,項目的軟件成本因此會大大降低。
Hadoop組成:主要由兩部分組成,一個是HDFS,一個是MapReduce。
1) 什么是HDFS(分布式文件系統)?
HDFS 即 Hadoop Distributed File System。首先他是一個開源系統,同時他是一個能夠面向大規模數據使用的,可進行擴展的文件存儲與傳遞系統。是一種允許文件通過網絡在多台主機上分享的文件系統,可讓多機器上的多用戶分享文件和存儲空間。讓實際上是通過網絡來訪問文件的動作,由程序與用戶看來,就像是訪問本地的磁盤一般。即使系統中有某些節點脫機,整體來說系統仍然可以持續運作而不會有數據損失。
它分為兩個部分:Name Node和Date Node,Name Node相當於一個領導,它管理集群內的Data Node,當客戶發送請求過來后,Name Node會根據情況指定存儲到哪些 Data Node上,而其本身自己並不存儲真實的數據。那Name Node怎么知道集群內Data Node的信息呢?Data Node發送心跳信息給Name Node。(一會詳見原理圖)
2) HDFS 設計基礎與目標
HDFS是基於流數據模式訪問和處理超大文件的需求而開發的,可以運行與廉價的商業服務器上。
特點:
1. 通過流式數據訪問;
2. 程序采用“數據就近”原則分配節點執行;
3. 對文件采用一次性寫多次讀的邏輯設計--文件一經寫入、關閉,就再也不能修改;
4. 數據以快形式分布式存儲在集群中不同的物理機中。
1.2 HDFS體系結構
1) 存儲塊
塊(Block):操作系統中的文件塊。文件是以塊的形式存儲在磁盤中,塊的大小代表系統讀、寫可操作的最小文件大小。也就是說,文件系統每次只能操作磁盤塊大小的整數倍數據。通常來說,一個文件系統塊大小為幾千字節,而磁盤塊大小為512 字節。
HDFS中的塊是一個抽象的概念,比操作系統中的塊要大得多。在配置hadoop系統時會看到,它的默認大小是128MB。HDFS使用抽象的塊的好處:可以存儲任意大的文件而又不會受到網絡中任一單個節點磁盤大小的限制;
使用抽象塊作為操作的單元可以簡化存儲子系統。
2) 模塊任務
1. Name node功能:
1) 承擔master 管理集群中的執行調度;
2) 管理文件系統的命名空間,維護整個文件系統目錄樹以及這些文件的索引目錄;
3) 不永久保存文件快信息,在系統啟動時重加塊信息;
4) 命名空間鏡像(namespace)和編輯日志(Edit log)
2. Data node 功能:承擔worker具體任務的執行節點

3) 集群管理
HDFS采用Master/Slave架構對文件系統進行管理。一個HDFS集群是由一個Name Node和一定數目的Data Node組成的。Name Node是一個中心服務器,負責管理文件系統的命名空間(Namespace)以及客戶端對文件的訪問。集群的Date Node一般是由一個節點運行一個Data Node進程,負責管理它所在節點上的存儲。
從內部看,一個文件其實被分成了一個或多個數據塊,這些塊存儲在一組Data Node上。Name Node執行文件系統的名字空間操作,比如打開,關閉,重命名文件或目錄。它負責確定數據塊到具體Data Node節點的映射。Data Node 負責處理文件系統客戶端的讀/寫請求。在Name Node的統一調度下進行數據塊的創建,刪除和復制。
4) 讀取策略
1)副本存放和讀取策略
副本的存放是HDFS可靠性和性能的關鍵,優化的副本存放策略也正是HDFS區分於其他大部分分布式文件系統的重要特征。HDFS采用一種稱為機架感知(rack-aware)的策略來改進數據的可靠性,可用性和網絡帶寬的利用率上。在讀取數據時,為了減少整體帶寬消耗和降低整體的帶寬延時,HDFS會盡量讓讀取程序讀取離客戶端最近的副本。
2)安全模式
Name Node啟動后會進入一個稱為安全模式的狀態。處於安全模式的Name Node不會進行數據塊的復制。Name Node從所有的Data Node接收心跳信號和塊狀態報告。
3)文件安全
Hadoop采用了兩種方法來確保文件安全。第一種方法:將Name Node中的元數據轉儲到遠程的NFS文件系統上;第二種方法:系統中同步運行一個Secondary Name Node。
這個節點的主要作用是周期性的合並日志中的命名空間鏡像,以避免編輯日志過大。
HDFS安全模式有三種:
1. hdfs dfsadmin -safemode enter--進入安全模式
2. hdfs dfsadmin -safemode leave --離開安全模式
3. start-balancer.sh--負載均衡模式
注意:hdfs版本不同,命名有區別
5) 基礎架構

6) 工作原理

7) 實例架構

8) HDFS讀操作

1. 客戶端(client)用File System的open()函數打開文件。
2. Distributed File System(DFS)用RPC調用元數據節點,得到文件的數據塊信息。對於每一個數據塊,元數據節點返回保存數據塊的數據節點的地址。
3. Distributed File System返回DFS Data Input Stream給客戶端,用來讀取數據。
4. 客戶端調用stream的read()函數開始讀取數據。DFS Input Stream連接保存此文件第一個數據塊的最近的數據節點。
5. Data從數據節點讀到客戶端(client)。當此數據塊讀取完畢時,DFS Input Stream關閉和此數據節點的連接,然后連接此文件下一個數據塊的最近的數據節點。
6. 當客戶端讀取完畢數據的時候,調用FS Data Input Stream的 close函數。在讀取數據的過程中,如果客戶端在與數據節點通信出現錯誤,則嘗試連接包含此數據塊的下一個數據節點。失敗的數據節點將被記錄,以后不再連接。
1) HDFS寫操作


1. 客戶端調用create()來創建文件。
2. Distributed File System用RPC調用元數據節點,在文件系統的命名空間中創建一個新的文件。元數據節點首先確定文件原來不存在,並且客戶端有創建文件的權限,然后創建新文件。
3. Distributed File System返回DFS Output Stream,客戶端用於寫數據。
4. 客戶端開始寫入數據,DFS Output Stream將數據分成塊,寫入data queue。
Data queue由Data Streamer讀取,並通知元數據節點分配數據節點,用來存儲數據塊(每塊默認復制3塊)。分配的數據節點放在一個pipeline里。Data Streamer將數據塊寫入pipeline中的第一個數據節點。第一個數據節點將據塊發送給第二個數據節點。第二個數據節點將數據發送給第三個數據節點。
5. DFS Output Stream為發出去的數據塊保存了ack queue,等待pipeline中的數據節點告知數據已經寫入成功。
十、 HDFS SHELL命令
http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoopcommon/FileSystemShell.html
http://hadoop.apache.org/docs/r2.6.2/hadoop-project-dist/hadoopcommon/FileSystemShell.html
1.1.1 Map Reduce(分布式計算模型)
1) 什么事MapReduce?
Map Reduce理解為,把一堆雜亂無章的數據按照某種特征歸納起來,然后處理並得到最后的結果。Map面對的是雜亂無章的互不相關的數據,它解析每個數據,從中提取出key和value,也就是提取了數據的特征。經過Map Reduce的Shuffle階段之后,在Reduce階段看到的都是已經歸納好的數據了,在此基礎上我們可以做進一步的處理以便得到結果
MAP(映射)-->Reduce(簡化)
代碼分區:mapper區、Reduce區、Driver區
2) MapReduce特點
1) 為海量數據提供計算;
2) 屏蔽了分布式計算框架細節,抽象成map和reduce;
3) map-對數據集上的獨立元素進行制定操作,生成鍵值對應形式的中間結果;
4) reduce-對中間結果中的相同“鍵”的所有“值”進行規約,以得到最終結果.
3) MapReduce主要功數據
MapReduce主要功數據划分和計算任務調度:
系統自動將一個作業(Job)待處理的大數據划分為很多個數據塊,每個數據塊對應於一個計算任務(Task),並自動調度計算節點來處理相應的數據塊。作業和任務調度功能主要負責分配和調度計算節點(Map節點或Reduce節點),同時負責監控這些節點的執行狀態,並負責Map節點執行的同步控制。
數據/代碼互定位:
為了減少數據通信,一個基本原則是本地化數據處理,即一個計算節點盡可能處理其本地磁盤上所分布存儲的數據--實現了代碼向數據的遷移;當無法進行這種本地化數據處理時,再尋找其他可用節點並將數據從網絡上傳送給該節點--(數據向代碼遷移),但將盡可能從數據所在的本地機架上尋找可用節點以減少通信延遲。
系統優化:
為了減少數據通信開銷,中間結果數據進入Reduce節點前會進行一定的合並處理;一個Reduce節點所處理的數據可能會來自多個 Map節點,為了避免Reduce計算階段發生數據相關性,Map節點輸出的中間結果需使用一定的策略進行適當的划分處理,保證相關性數據發送到同一個 Reduce節點;此外,系統還進行一些計算性能優化處理,如對最慢的計算任務采用多備份執行、選最快完成者作為結果。
出錯檢測和恢復:
以低端商用服務器構成的大規模Map Reduce計算集群中,節點硬件(主機、磁盤、內存等)出錯和軟件出錯是常態,因此 Map Reduce需要能檢測並隔離出錯節點,並調度分配新的節點接管出錯節點的計算任務。同時,系統還將維護數據存儲的可靠性,用多備份冗余存儲機制提 高數據存儲的可靠性,並能及時檢測和恢復出錯的數據。
4) 數據執行流



任務執行過程

5) hadoop-HA
Hadoop集群分為:hadoop偽分布式集群和hadoop分布式集群。


1) 常用命令
單進程啟動
sbin/start-dfs.sh
sbin/start-yarn.sh
格式化集群: hadoop namenode –formate --初次啟動集群使用
hdfs常見命令:
hadoop fs -ls / 以全路徑的方式展示當前目錄下及當前目錄下所有子目錄的全部文件,與linux系統下tree命令類似
hadoop fs -lsr / 顯示目錄下所有子目錄或文件占用空間(邏輯空間)
hadoop fs -du / 顯示該目錄所占用的實際空間
hadoop fs -count -q /
hadoop fs -mv
hadoop fs -cp
hadoop fs -rm
hadoop fs -rm -skipTrash 不進入回收站直接刪除
hadoop fs -rmr / 遞歸刪除文件夾所有文件
hadoop fs -expunge 清空回收站
hadoop fs -put 被上傳文件 /上傳文件
