###### tags: `Hadoop` # Hadoop 概述 ### Hadoop到底是什麼鬼玩意? 依據[維基百科](https://zh.wikipedia.org/wiki/Apache_Hadoop)說明:Apache Hadoop是一款支援數據密集型分布式應用程式並以Apache 2.0許可協定發布的開源軟體框架,結論就是有聽沒有懂。。。 :male-student: 其實Hadoop最單純來說明就是兩種功能:第一個可以儲存**大量**數據的檔案系統(稱做**HDFS**,Hadoop Distributed File System)、第二個為可以實現**大量**數據的計算框架(MRV2,又稱**YARN**,Yet Another Resource Negotiator),另外Hadoop本身為一套於安裝及設定沒有UI的軟體,並沒有像微軟Office等好用商用軟體按下一步就能安裝好的唷~~~ :warning:*提到大量是指一般電腦無法負荷的單位為大量,一般電腦就能:負荷的了就不要鬧了。。。* :information_source: 所以就有一個Hadoop頂級專家(Cloudera 公司)創立了CDH,方便使用者快速部屬及設定大量Hadoop叢集,[相關安裝方式請參閱CDH 部署步驟](https://hackmd.io/@JeffWen/CDH)。 <big>***代表Hadoop方式: 當一匹馬拉不動一台馬車時,應該設法多找幾匹馬兒一塊拉,而不是瘋狂的訓練那一匹馬讓它變的無比強壯。。。***</big> ### HDFS起源: 1. HDFS(Hadoop Distributed File System)當初受於:information_source: [Google檔案系統(GFS)論文](https://static.googleusercontent.com/media/research.google.com/zh-TW//archive/gfs-sosp2003.pdf)啟發 ,實做出來的檔案系統,垂直擴展硬體等級會出現瓶頸,相對成本付出較高,故此HDFS檔案系統採用水平擴充方使,以數台較低成本電腦模擬一台超級電腦。 * 垂直擴展,價格不會與資源呈現同比例成長(如下圖所示) ![](https://i.imgur.com/OsjDR0v.png =300x300) * 水平擴充,多個同樣低成本機器打造(如下圖所示) ![](https://i.imgur.com/wqsQTR5.png =500x200) 2. HDFS是模擬檔案系統儲存數據,數據皆是儲存在硬碟上,故需要原生OS作業系統,另不建議硬碟使用容錯式磁碟陣列(RAID,Redundant Array of Independent Disks),HDFS預設複製3個副本數據儲存在不同機器。 ![](https://i.imgur.com/NNsfubX.png =400x200) 3. HDFS為主-從式架構,由單個NameNode、Secondary NameNode及數個DataNode組合而成 ![](https://i.imgur.com/VzuWfze.png) * 那NameNode是啥鬼?又來一個Secondary是幹啥的???詳細HDFS原理及功能介紹請參閱 ### YARN起源: 1. YARN(Yet Another Resource Negotiator)當初受於:information_source: [Google MapReduce論文](https://static.googleusercontent.com/media/research.google.com/zh-TW//archive/mapreduce-osdi04.pdf)啟發,實做出來的分散式運算框架,將大量運算需求,同時分布餘數台機器上一起運算。 2. YARN是個運算資源配置系統,類似建議於Linux Cgroup資源控制,可以動態調節配置好資源的給運算之應用程式,並且可以結合Spark、Kafka、Hive、Oozie、Sqoop、Flume、Impala等資源管理;另目前Impala與Yarn整合尚有些Bug,故建議由Cgroup 先配置給Impala自行管理限定資源。 3. YARN框架同為主-從式架構,由單個ResourceManager、JobHistory Server、數個NodeManager組成 ![](https://i.imgur.com/pl23FwM.png) * 詳細YARN原理及功能介紹請參閱 ### 整體Hadoop大致架構 :information_source: 一個方框代表一部機器 ![](https://i.imgur.com/dBPb76w.png) * 此方式配置確保每一次運算數據前從HDFS讀取到的數據都是從本地機器上面的,可以減少網路傳輸交換的所耗的時間。 ### Hadoop 部屬方式 * Hadoop三種模式: 1. 單機模式(Standalone Mode): - 這種模式下不會於啟動任何背景Java程式,此模式適合開發測試及除錯。 2. 偽分佈式模式(Pseudo-Distributed Mode) - Hadoop中的背景Java程式均運行於本機節點,可以模擬小規模的叢集,[Apache Hadoop偽分佈式模式架設步驟請參閱](https://hackmd.io/@JeffWen/bdsevm)。 3. 完全分佈式模式(Fully-Distributed Mode) - Hadoop中的背景Java程式運行數個主機上,[Apache Hadoop完全分佈式模式架設步驟請參閱](https://hackmd.io/@JeffWen/hadoop)。 * 屬性差異比較 |屬性| 本機模式 | 偽分佈式模式 | 完全分佈式模式 | |:---:|:--------:|:--------:|:--------:| |fs.defaultFS| file:/// | hdfs:/// | hdfs:/// | |dfs.replication|N/A|1|3| |mapreduce .framework.name|N/A|yarn|yarn| |yarn.resourcemanager.hostname|N/A|localhost|resourcemanager| |yarn.nodemanager.auxervices|N/A|mapreduce_shuffle|mapreduce_shuffle| ### Hadoop 生態系概述 ![](https://i.imgur.com/RQiNxKa.png) :information_source: 圖參考於[Vimal Jain部落格](https://blogs.sap.com/2017/07/19/bridging-two-worlds-integration-of-sap-and-hadoop-ecosystems/) * 通常談到Hadoop,不光只是說到Hadoop,是包含整個強大的生態系統: 1. 儲存數據相關:Hadoop、Hbase、Kudu、Cassandra 2. SQL查詢引擎:Hive、Impala、Presto、SparkSQL 3. 資源管理:Yarn、Tez、Mesos 5. 分布式程序處理:Mapreduce、Spark 6. 數據流: Kafka、Sqoop、Flume 7. 數據串流引擎:Flink、Spark Streaming、Storm 8. 儲存格式:Parquet、Avro、ORC 9. 排程工具: Oozie、AirFlow 10. 圖形化操作工具: Hue、Zeppelin 11. 圖形化管理工具: CDH、Ambari --- ### 附錄一 :information_desk_person: 速度:CPU >RAM >SSD >SATA >一般網路,除非採用超高速網路之外 相關速率請參閱 Latency Comparison Numbers (~2012) ---------------------------------- L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns 14x L1 cache Mutex lock/unlock 25 ns Main memory reference 100 ns 20x L2 cache, 200x L1 cache Compress 1K bytes with Zippy 3,000 ns 3 us Send 1K bytes over 1 Gbps network 10,000 ns 10 us Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD Read 1 MB sequentially from memory 250,000 ns 250 us Round trip within same datacenter 500,000 ns 500 us Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory Disk seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip Read 1 MB sequentially from disk 20,000,000 ns 20,000 us 20 ms 80x memory, 20X SSD Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms Notes ----- 1 ns = 10^-9 seconds 1 us = 10^-6 seconds = 1,000 ns 1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns Credit ------ By Jeff Dean: http://research.google.com/people/jeff/ Originally by Peter Norvig: http://norvig.com/21-days.html#answers