Hadoop是什么
Hadoop是一個(gè)用于海量數(shù)據(jù)存儲(chǔ)和分析計(jì)算的分布式基礎(chǔ)框架。不過(guò)從廣義上來(lái)講,Hadoop不單指某個(gè)具體的框架,而是指一個(gè)生態(tài)圈。

- Sqoop是一款數(shù)據(jù)傳輸工具,它即可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)入到Hadoop的HDFS中,又可以將HDFS中的數(shù)據(jù)導(dǎo)入到關(guān)系型數(shù)據(jù)庫(kù)中。
- Flume是Cloudera提供的一個(gè)高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸?shù)南到y(tǒng),F(xiàn)lume支持在日志系統(tǒng)中定制各類數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫到各種數(shù)據(jù)接受方(可定制)的能力。
- Kafka是一個(gè)消息中間件。
- Storm用于“連續(xù)計(jì)算”,對(duì)數(shù)據(jù)流做連續(xù)查詢,在計(jì)算時(shí)就將結(jié)果以流的形式輸出給用戶。不過(guò)在實(shí)時(shí)計(jì)算領(lǐng)域其逐漸被Spark所替代。
- Spark是當(dāng)前最流行的開源大數(shù)據(jù)內(nèi)存計(jì)算框架??梢曰贖adoop上存儲(chǔ)的大數(shù)據(jù)進(jìn)行計(jì)算。
- Oozie是一個(gè)管理Hdoop作業(yè)(job)的工作流程調(diào)度管理系統(tǒng)。
- Hbase是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫(kù),它適用于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)。
- Hive:Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射成一張數(shù)據(jù)庫(kù)表,并提供簡(jiǎn)單的SQL查詢功能,可以將SQL語(yǔ)句轉(zhuǎn)化成MapReduce任務(wù)運(yùn)行。其優(yōu)點(diǎn)是可以通過(guò)類SQL語(yǔ)句塊速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),而不必開發(fā)專門的MapReduce應(yīng)用。
- R語(yǔ)言是一個(gè)用于統(tǒng)計(jì)計(jì)算和統(tǒng)計(jì)制圖的優(yōu)秀工具。
- Mahout是個(gè)可擴(kuò)展的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘庫(kù)。
- Zookeeper是一個(gè)分布式配置中心。
Hadoop官方網(wǎng)站:http://hadoop.apache.org/
Hadoop發(fā)行版本
目前而言,不收費(fèi)的Hadoop發(fā)行版本主要有三個(gè),分別是:
- Apache Hadoop,最原始的版本,其他發(fā)行版本均基于此版本改進(jìn);
- Cloudera Hadoop,簡(jiǎn)稱為CDH,比Apache Hadoop在兼容性,安全性,穩(wěn)定性上有所增強(qiáng)。由Hadoop的創(chuàng)始人加盟Cloudera公司所創(chuàng)立。
- Hortonworks Hadoop,由之前在雅虎研究Hadoop的多名工程師,成立Hortonworks公司并發(fā)布。
一般來(lái)說(shuō),Apache發(fā)行的版本多用于學(xué)習(xí),而公司用得較多的是Cloudera Hadoop。
Apache Hadoop版本的官網(wǎng):http://hadoop.apache.org/releases.html
Cloudera Hadoop版本的官網(wǎng):https://www.cloudera.com/downloads/cdh/5-10-0.html
Hortonworks Hadoop版本的官網(wǎng):https://hortonworks.com/products/data-center/hdp/
Hadoop的組件
Hadoop1.x和2.x所包含的組件基本一樣,除了2.x新增的資源調(diào)度Yarn。不同版本之間具體所包含的組件如下圖所示

下面看看組件各自的細(xì)節(jié)
HDFS概述
HDFS(Hadoop Distributed File System)是分布式文件存儲(chǔ),主要為海量數(shù)據(jù)提供高效的存儲(chǔ)方案。同時(shí)HDFS是Hadoop項(xiàng)目的核心子項(xiàng)目。

我們可以看到在HDFS中有3種類型的組件,它們各自的作用如下:
- NameNode:存儲(chǔ)文件的元數(shù)據(jù),如:文件名,文件目錄結(jié)構(gòu),文件屬性(生成時(shí)間、副本數(shù)、文件權(quán)限),以及每個(gè)文件的塊列表和塊所在的DateNode等;其處理客戶端的讀寫請(qǐng)求。
- DataNode:存儲(chǔ)實(shí)際的數(shù)據(jù)塊,執(zhí)行數(shù)據(jù)塊的讀/寫操作。
- Secondary NameNode:用來(lái)監(jiān)控HDFS狀態(tài)的輔助后臺(tái)程序,每隔一段時(shí)間獲取HDFS元數(shù)據(jù)的快照,
Secondary NameNode并不是NameNode的熱備。
YARN
YARN是資源管理和調(diào)度系統(tǒng),它在Hadoop 2.x引入。YARN架構(gòu)圖如下所示:

從上面的圖中可以看到,YARN架構(gòu)中有4種組件:Resource Manager、Node Manager、App Mastr、Container,它們的主要功能如下
- ResourceManager
1). 資源的分配與調(diào)度;
2). 處理客戶端請(qǐng)求;
3). 監(jiān)控NodeManager;
4). 啟動(dòng)或監(jiān)控ApplicationMaster。 - NodeManager
1). 管理單個(gè)節(jié)點(diǎn)上的資源;
2). 處理來(lái)自ResourceManager或ApplicationMaster的命令。 - ApplicationMaster
1). 負(fù)責(zé)數(shù)據(jù)的切分;
2). 任務(wù)的監(jiān)控與容錯(cuò);
3). 為應(yīng)用程序申請(qǐng)資源并分配給內(nèi)部的任務(wù)。 - Container
Container是YARN中的資源抽象,它封裝了某個(gè)節(jié)點(diǎn)上的多維資源,如內(nèi)存、CPU、硬盤、網(wǎng)絡(luò)等。
MapReduce
MapReduce為開發(fā)者提供編程接口,是一個(gè)分布式計(jì)算框架。
MapReduce程序的工作分兩個(gè)階段進(jìn)行:
- Map階段:并行處理輸入數(shù)據(jù);
- Reduce 階段:對(duì)Map結(jié)果進(jìn)行匯總。
Hadoop Common
提供一些輔助的工具
參考(more reding)
- 尚硅谷大數(shù)據(jù)技術(shù)之Hadoop(入門)