tags: Hadoop

Hadoop 概述

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 部署步驟

代表Hadoop方式: 當一匹馬拉不動一台馬車時,應該設法多找幾匹馬兒一塊拉,而不是瘋狂的訓練那一匹馬讓它變的無比強壯。。。

HDFS起源:

  1. HDFS(Hadoop Distributed File System)當初受於:information_source: Google檔案系統(GFS)論文啟發 ,實做出來的檔案系統,垂直擴展硬體等級會出現瓶頸,相對成本付出較高,故此HDFS檔案系統採用水平擴充方使,以數台較低成本電腦模擬一台超級電腦。

    • 垂直擴展,價格不會與資源呈現同比例成長(如下圖所示)
    • 水平擴充,多個同樣低成本機器打造(如下圖所示)
  2. HDFS是模擬檔案系統儲存數據,數據皆是儲存在硬碟上,故需要原生OS作業系統,另不建議硬碟使用容錯式磁碟陣列(RAID,Redundant Array of Independent Disks),HDFS預設複製3個副本數據儲存在不同機器。

  3. HDFS為主-從式架構,由單個NameNode、Secondary NameNode及數個DataNode組合而成

  • 那NameNode是啥鬼?又來一個Secondary是幹啥的???詳細HDFS原理及功能介紹請參閱

YARN起源:

  1. YARN(Yet Another Resource Negotiator)當初受於:information_source: Google MapReduce論文啟發,實做出來的分散式運算框架,將大量運算需求,同時分布餘數台機器上一起運算。

  2. YARN是個運算資源配置系統,類似建議於Linux Cgroup資源控制,可以動態調節配置好資源的給運算之應用程式,並且可以結合Spark、Kafka、Hive、Oozie、Sqoop、Flume、Impala等資源管理;另目前Impala與Yarn整合尚有些Bug,故建議由Cgroup 先配置給Impala自行管理限定資源。

  3. YARN框架同為主-從式架構,由單個ResourceManager、JobHistory Server、數個NodeManager組成

  • 詳細YARN原理及功能介紹請參閱

整體Hadoop大致架構

:information_source: 一個方框代表一部機器

  • 此方式配置確保每一次運算數據前從HDFS讀取到的數據都是從本地機器上面的,可以減少網路傳輸交換的所耗的時間。

Hadoop 部屬方式

  • Hadoop三種模式:
  1. 單機模式(Standalone Mode):
    • 這種模式下不會於啟動任何背景Java程式,此模式適合開發測試及除錯。
  2. 偽分佈式模式(Pseudo-Distributed Mode)
  3. 完全分佈式模式(Fully-Distributed Mode)
  • 屬性差異比較
屬性 本機模式 偽分佈式模式 完全分佈式模式
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 生態系概述


:information_source: 圖參考於Vimal Jain部落格

  • 通常談到Hadoop,不光只是說到Hadoop,是包含整個強大的生態系統:
    1. 儲存數據相關:Hadoop、Hbase、Kudu、Cassandra
    2. SQL查詢引擎:Hive、Impala、Presto、SparkSQL
    3. 資源管理:Yarn、Tez、Mesos
    4. 分布式程序處理:Mapreduce、Spark
    5. 數據流: Kafka、Sqoop、Flume
    6. 數據串流引擎:Flink、Spark Streaming、Storm
    7. 儲存格式:Parquet、Avro、ORC
    8. 排程工具: Oozie、AirFlow
    9. 圖形化操作工具: Hue、Zeppelin
    10. 圖形化管理工具: 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