首先我們先了解一下Hadoop的起源。然后介紹一些關(guān)于Hadoop生態(tài)系統(tǒng)中的具體工具的使用方法。如:HDFS、MapReduce、Yarn、Zookeeper、Hive、HBase、Oozie、Mahout、Pig、Flume、Sqoop。
Doug Cutting是Hadoop之父 ,起初他開創(chuàng)了一個(gè)開源軟件Lucene(用Java語言編寫,提供了全文檢索引擎的架構(gòu),與Google類似),Lucene后來面臨與Google同樣的錯(cuò)誤。于是,Doug Cutting學(xué)習(xí)并模仿Google解決這些問題的辦法,產(chǎn)生了一個(gè)Lucene的微縮版Nutch。
后來,Doug Cutting等人根據(jù)2003-2004年Google公開的部分GFS和Mapreduce思想的細(xì)節(jié),利用業(yè)余時(shí)間實(shí)現(xiàn)了GFS和Mapreduce的機(jī)制,從而提高了Nutch的性能。由此Hadoop產(chǎn)生了。
Hadoop于2005年秋天作為Lucene的子項(xiàng)目Nutch的一部分正式引入Apache基金會(huì)。2006年3月份,Map-Reduce和Nutch Distributed File System(NDFS)分別被納入Hadoop的項(xiàng)目中。?
關(guān)于Hadoop名字的來源,是Doug Cutting兒子的玩具大象。
Hadoop是一個(gè)開源框架,可編寫和運(yùn)行分布式應(yīng)用處理大規(guī)模數(shù)據(jù)。 Hadoop框架的核心是HDFS和MapReduce。其中 HDFS 是分布式文件系統(tǒng),MapReduce 是分布式數(shù)據(jù)處理模型和執(zhí)行環(huán)境。
在一個(gè)寬泛而不斷變化的分布式計(jì)算領(lǐng)域,Hadoop憑借什么優(yōu)勢能脫穎而出呢??
1. 運(yùn)行方便:Hadoop是運(yùn)行在由一般商用機(jī)器構(gòu)成的大型集群上。Hadoop在云計(jì)算服務(wù)層次中屬于PaaS(Platform-as-a- Service):平臺(tái)即服務(wù)。?
2. 健壯性:Hadoop致力于在一般的商用硬件上運(yùn)行,能夠從容的處理類似硬件失效這類的故障。?
3. 可擴(kuò)展性:Hadoop通過增加集群節(jié)點(diǎn),可以線性地?cái)U(kuò)展以處理更大的數(shù)據(jù)集。?
4. 簡單:Hadoop允許用戶快速編寫高效的并行代碼。
2) Nutch,互聯(lián)網(wǎng)數(shù)據(jù)及Nutch搜索引擎應(yīng)用
3) HDFS,Hadoop的分布式文件系統(tǒng)
5) MapReduce,分布式計(jì)算框架
6) Flume、Scribe,Chukwa數(shù)據(jù)收集,收集非結(jié)構(gòu)化數(shù)據(jù)的工具。
7) Hiho、Sqoop,講關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入HDFS的工具
8) Hive數(shù)據(jù)倉庫,pig分析數(shù)據(jù)的工具
10)Oozie作業(yè)流調(diào)度引擎
11)Hue,Hadoop自己的監(jiān)控管理工具
12)Avro 數(shù)據(jù)序列化工具
13)mahout數(shù)據(jù)挖掘工具
14)Hbase分布式的面向列的開源數(shù)據(jù)庫
Hadoop生態(tài)系統(tǒng)的特點(diǎn)
源代碼開源
社區(qū)活躍、參與者眾多
涉及分布式存儲(chǔ)和計(jì)算的方方面面
已得到企業(yè)界驗(yàn)證
上面的圖可能有些亂,下面我們用一個(gè)簡易的Hadoop生態(tài)系統(tǒng)圖譜來描述Hadoop生態(tài)系統(tǒng)中出現(xiàn)的各種數(shù)據(jù)工具。
Hadoop1.0時(shí)代的生態(tài)系統(tǒng)如下:
Hadoop2.0時(shí)代的生態(tài)系統(tǒng)如下:
由上圖可以看出Hadoop1.0與Hadoop2.0的區(qū)別。Hadoop1.0的核心由HDFS(Hadoop Distributed File System)和MapReduce(分布式計(jì)算框架)構(gòu)成。而在Hadoop2.0中增加了Yarn(Yet Another Resource Negotiator),來負(fù)責(zé)集群資源的統(tǒng)一管理和調(diào)度。
HDFS源自于Google發(fā)表于2003年10月的GFS論文,也即是說HDFS是GFS的克隆版。
此處只是HDFS的概述,如果想了解HDFS詳情,請查看HDFS詳解這篇文章。
HDFS具有如下特點(diǎn):
良好的擴(kuò)展性
高容錯(cuò)性
適合PB級(jí)以上海量數(shù)據(jù)的存儲(chǔ)
HDFS的基本原理
將文件切分成等大的數(shù)據(jù)塊,存儲(chǔ)到多臺(tái)機(jī)器上
將數(shù)據(jù)切分、容錯(cuò)、負(fù)載均衡等功能透明化
可將HDFS看成容量巨大、具有高容錯(cuò)性的磁盤
HDFS的應(yīng)用場景ive
海量數(shù)據(jù)的可靠性存儲(chǔ)
數(shù)據(jù)歸檔
Yarn是Hadoop2.0新增的系統(tǒng),負(fù)責(zé)集群的資源管理和調(diào)度,使得多種計(jì)算框架可以運(yùn)行在一個(gè)集群中。
此處只是Yarn的概述,如果想了解Yarn詳情,請查看Yarn詳解這篇文章。
Yarn具有如下特點(diǎn):
良好的擴(kuò)展性、高可用性
對多種數(shù)據(jù)類型的應(yīng)用程序進(jìn)行統(tǒng)一管理和資源調(diào)度
自帶了多種用戶調(diào)度器,適合共享集群環(huán)境
MapReduce源自于Google發(fā)表于2004年12月的MapReduce論文,也就是說,Hadoop MapReduce是Google MapReduce的克隆版。
此處只是MapReduce的概述,如果想了解MapReduce詳情,請查看MapReduce詳解這篇文章。
MapReduce具有如下特點(diǎn):
良好的擴(kuò)展性
高容錯(cuò)性
適合PB級(jí)以上海量數(shù)據(jù)的離線處理
Hive由facebook開源,最初用于解決海量結(jié)構(gòu)化的日志數(shù)據(jù)統(tǒng)計(jì)問題;是一種ETL(Extraction-Transformation-Loading)工具。它也是構(gòu)建在Hadoop之上的數(shù)據(jù)倉庫;數(shù)據(jù)計(jì)算使用MR,數(shù)據(jù)存儲(chǔ)使用HDFS。
Hive定義了一種類似SQL查詢語言的HiveQL查詢語言,除了不支持更新、索引和實(shí)物,幾乎SQL的其他特征都能支持。它通常用于離線數(shù)據(jù)處理(采用MapReduce);我們可以認(rèn)為Hive的HiveQL語言是MapReduce語言的翻譯器,把MapReduce程序簡化為HiveQL語言。但有些復(fù)雜的MapReduce程序是無法用HiveQL來描述的。
Hive提供shell、JDBC/ODBC、Thrift、Web等接口。
此處只是Hive的概述,如果想了解Hive詳情,請查看Hive詳解這篇文章。
日志分析:統(tǒng)計(jì)一個(gè)網(wǎng)站一個(gè)時(shí)間段內(nèi)的pv、uv ;比如百度。淘寶等互聯(lián)網(wǎng)公司使用hive進(jìn)行日志分析
多維度數(shù)據(jù)分析
海量結(jié)構(gòu)化數(shù)據(jù)離線分析
低成本進(jìn)行數(shù)據(jù)分析(不直接編寫MR)
Pig由yahoo!開源,設(shè)計(jì)動(dòng)機(jī)是提供一種基于MapReduce的ad-hoc數(shù)據(jù)分析工具。它通常用于進(jìn)行離線分析。
Pig是構(gòu)建在Hadoop之上的數(shù)據(jù)倉庫,定義了一種類似于SQL的數(shù)據(jù)流語言–Pig Latin,Pig Latin可以完成排序、過濾、求和、關(guān)聯(lián)等操作,可以支持自定義函數(shù)。Pig自動(dòng)把Pig Latin映射為MapReduce作業(yè),上傳到集群運(yùn)行,減少用戶編寫Java程序的苦惱。
Pig有三種運(yùn)行方式:Grunt shell、腳本方式、嵌入式。
此處只是Pig的概述,如果想了解Pig詳情,請查看Pig詳解這篇文章。
Mahout是基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的分布式計(jì)算框架。它實(shí)現(xiàn)了三大算法:推薦、聚類、分類。
HBase源自Google發(fā)表于2006年11月的Bigtable論文。也就是說,HBase是Google Bigtable的克隆版。
HBase可以使用shell、web、api等多種方式訪問。它是NoSQL的典型代表產(chǎn)品。
此處只是HBase的概述,如果想了解HBase詳情,請查看HBase詳解這篇文章。
高可靠性
高性能
面向列
良好的擴(kuò)展性
下面簡要介紹一下:
Table(表):類似于傳統(tǒng)數(shù)據(jù)庫中的表
Column Family(列簇):Table在水平方向有一個(gè)或者多個(gè)Column Family組成;一個(gè)Column Family 中可以由任意多個(gè)Column組成。
Row Key(行健):Table的主鍵;Table中的記錄按照Row Key排序。
Timestamp(時(shí)間戳):每一行數(shù)據(jù)均對應(yīng)一個(gè)時(shí)間戳;也可以當(dāng)做版本號(hào)。
Zookeeper源自Google發(fā)表于2006年11月的Chubby論文,也就是說Zookeeper是Chubby的克隆版。
Zookeeper解決分布式環(huán)境下數(shù)據(jù)管理問題:
統(tǒng)一命名
狀態(tài)同步
集群管理
配置同步
HDFS
Yarn
Storm
HBase
Flume
Dubbo
Metaq
Sqoop是連接Hadoop與傳統(tǒng)數(shù)據(jù)庫之間的橋梁,它支持多種數(shù)據(jù)庫,包括MySQL、DB2等;插拔式,用戶可以根據(jù)需要支持新的數(shù)據(jù)庫。
Sqoop實(shí)質(zhì)上是一個(gè)MapReduce程序,充分利用MR并行的特點(diǎn),充分利用MR的容錯(cuò)性。
此處只是Sqoop的概述,如果想了解Sqoop詳情,請查看Sqoop詳解這篇文章。
Flume是Cloudera開源的日志收集系統(tǒng)。
分布式
高可靠性
高容錯(cuò)性
易于定制與擴(kuò)展
Flume OG:Flume original generation 即Flume 0.9.x版本,它由agent、collector、master等組件構(gòu)成。
Flume NG:Flume next generation ,即Flume 1.x版本,它由Agent、Client等組件構(gòu)成。一個(gè)Agent包含Source、Channel、Sink和其他組件。
Oozie(作業(yè)流調(diào)度系統(tǒng))
目前計(jì)算框架和作業(yè)類型種類繁多:如MapReduce、Stream、HQL、Pig等。這些作業(yè)之間存在依賴關(guān)系,周期性作業(yè),定時(shí)執(zhí)行的作業(yè),作業(yè)執(zhí)行狀態(tài)監(jiān)控與報(bào)警等。如何對這些框架和作業(yè)進(jìn)行統(tǒng)一管理和調(diào)度?
解決方案有多種:
Linux Crontab
自己設(shè)計(jì)調(diào)度系統(tǒng)(淘寶等公司)
直接使用開源系統(tǒng)(Oozie)
Apache Hadoop
推薦使用2.x.x版本
下載地址:http://hadoop.apache.org/releases.html
CDH(Cloudera Distributed Hadoop)
推薦使用CDH5版本
下載地址:http://archive.cloudera.com/cdh5/cdh/5/
詳細(xì)安裝步驟查看文章:搭建5個(gè)節(jié)點(diǎn)的hadoop集群環(huán)境(CDH5)
HDP(HortonWorks Data Platform)
推薦使用HDP2.x版本
下載地址:http://zh.hortonworks.com/downloads/#data-platform
最后建議:關(guān)于不同發(fā)行版在架構(gòu)、部署和使用方法一致,不同之處僅在于內(nèi)部實(shí)現(xiàn)。建議選擇公司發(fā)行版,比如CDH或者HDP,因?yàn)樗鼈兘?jīng)過集成測試,不會(huì)面臨版本兼容性問題。