###### 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檔案系統採用水平擴充方使,以數台較低成本電腦模擬一台超級電腦。
* 垂直擴展,價格不會與資源呈現同比例成長(如下圖所示)

* 水平擴充,多個同樣低成本機器打造(如下圖所示)

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論文](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組成

* 詳細YARN原理及功能介紹請參閱
### 整體Hadoop大致架構
:information_source: 一個方框代表一部機器

* 此方式配置確保每一次運算數據前從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 生態系概述

: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