何為Hadoop
Hadoop起源:hadoop的創(chuàng)始者是Doug Cutting,起源于Nutch項(xiàng)目,該項(xiàng)目是作者嘗試構(gòu)建的一個開源的Web搜索引擎。起初該項(xiàng)目遇到了阻礙,因?yàn)槭冀K無法將計算分配給多臺計算機(jī)。谷歌發(fā)表的關(guān)于GFS和MapReduce相關(guān)的論文給了作者啟發(fā),最終讓Nutch可以在多臺計算機(jī)上穩(wěn)定的運(yùn)行;后來雅虎對這項(xiàng)技術(shù)產(chǎn)生了很大的興趣,并組建了團(tuán)隊(duì)開發(fā),從Nutch中剝離出分布式計算模塊命名為“Hadoop”。最終Hadoop在雅虎的幫助下能夠真正的處理海量的Web數(shù)據(jù)。
Hadoop集群是一種分布式的計算平臺,用來處理海量數(shù)據(jù),它的兩大核心組件分別是HDSF文件系統(tǒng)和分布式計算處理框架mapreduce。HDFS是分布式存儲系統(tǒng),其下的兩個子項(xiàng)目分別是namenode和datanode;namenode管理著文件系統(tǒng)的命名空間包括元數(shù)據(jù)和datanode上數(shù)據(jù)塊的位置,datanode在本地保存著真實(shí)的數(shù)據(jù)。它們都分別運(yùn)行在獨(dú)立的節(jié)點(diǎn)上。Mapreduce的兩大子項(xiàng)目分別是jobtracker和tasktracker,jobtracker負(fù)責(zé)管理資源和分配任務(wù),tasktracker負(fù)責(zé)執(zhí)行來自jobtracker的任務(wù)。
Hadoop1升級成hadoop2后,為解決原來HDFS的namenode的單點(diǎn)故障問題,于是有了HA集群的出現(xiàn);為解決原來mapreduce的jobtracker的單點(diǎn)故障以及負(fù)擔(dān)過重的問題,于是有了mapreduce2也就是YARN的出現(xiàn)。
HA集群我們采取了QJM的方式進(jìn)行;每個節(jié)點(diǎn)上安裝hadoop,java JDK,子節(jié)點(diǎn)(datanode)安裝zookeeper搭建journalnode集群(該集群數(shù)量必須是單數(shù));HA結(jié)構(gòu)具有高可用性, ACtive namenode和standby namenode之間元數(shù)據(jù)是同步的;ACtive namenode 每次完成操作后,生成edits log,會將edits log通過ZKFC發(fā)送給journalnode集群的多數(shù)派(當(dāng)journalnode集群的大多數(shù)節(jié)點(diǎn)拿到edits log即視為成功),datanode拿到數(shù)據(jù)會將數(shù)據(jù)發(fā)送給standby namenode,同時datanode還會將自己的數(shù)據(jù)塊的位置信息報告給standby namenode。client向active namenode發(fā)出請求,當(dāng)active namenode無回應(yīng)時,active會直接向standby namenode發(fā)出請求,此時standby namenode會轉(zhuǎn)變?yōu)閍ctive namenode。
YARN是hadoop2里mapreduce的別稱;它將一版本里的jobtracker的工作分為了兩部分:ResourceManager 和AppMaster 分別管理mapreduce的資源和工作周期。除此之外,yarn同樣解決了jobtracker的單點(diǎn)故障問題。
Hadoop作為一個分布式處理大數(shù)據(jù)的平臺。它的內(nèi)部機(jī)制挺復(fù)雜的,但是如果是僅僅作為使用者,我們只需要弄清楚它的工作機(jī)制,它的功能以及如何使用就行。Hadoop與其他的Hadoop項(xiàng)目比如說:Ambari,Hive,Hbase,Pig,Spark,zookeeper......一起組成hadoop生態(tài)圈,共同完成對大數(shù)據(jù)的處理和分析。Hadoop和其他一些大數(shù)據(jù)平臺一起被稱為大數(shù)據(jù)技術(shù)。
Hadoop 的核心子項(xiàng)目是 HDFS 和 Mapreduce,hadoop2.0 還包括 YARN資源管理器。圖1.1為 hadoop 的生態(tài)系統(tǒng)。
(1)HDFS:
是Hadoop體系中數(shù)據(jù)存儲管理的基礎(chǔ)。它是一個高度容錯的系統(tǒng),能檢測和應(yīng)對硬件故障,用于在低成本的通用硬件上運(yùn)行。HDFS 簡化了文件的一致性模型,通過流式數(shù)據(jù)訪問,提供高吞吐量應(yīng)用程序數(shù)據(jù)訪問功能,適合帶有大型數(shù)據(jù)集的應(yīng)用程序
(2)MapReduce
是一種計算模型,用以進(jìn)行大數(shù)據(jù)量的計算。其中 Map 對數(shù)據(jù)集上的獨(dú)立元素進(jìn)行指定的操作,生成鍵-值對形式中間結(jié)果。Reduce 則對中間結(jié)果中相同“鍵”的所有“值”進(jìn)行規(guī)約,以得到最終結(jié)果。MapReduce 這樣的功能劃分,非常適合在大量計算機(jī)組成的分布式并行環(huán)境里進(jìn)行數(shù)據(jù)處理。
(3)Hive:
數(shù)據(jù)倉庫基礎(chǔ)設(shè)施,提供數(shù)據(jù)匯總和特定查詢。這個系統(tǒng)支持用戶進(jìn)行有效的查詢,并實(shí)時得到返回結(jié)果,定義了一種類似 SQL 的查詢語言(HQL),將 SQL 轉(zhuǎn)化為 MapReduce 任務(wù)在 Hadoop 上執(zhí)行。通常用于離線分析。
(4)Spark
Spark 是提供大數(shù)據(jù)集上快速進(jìn)行數(shù)據(jù)分析的計算引擎。它建立在HDFS 之上,卻繞過了 MapReduce 使用自己的數(shù)據(jù)處理框架。Spark 常用于實(shí)時查詢、流處理、迭代算法、復(fù)雜操作運(yùn)算和機(jī)器學(xué)習(xí)。
(5)Ambari:
Ambari 用來協(xié)助管理 Hadoop。它提供對 Hadoop 生態(tài)系統(tǒng)中許多工具的支持,包括 Hive、HBase、Pig、 Spooq 和 ZooKeeper。這個工具提供集群管理儀表盤,可以跟蹤集群運(yùn)行狀態(tài),幫助診斷性能問題。
(4)Pig:
Pig 是一個集成高級查詢語言的平臺,可以用來處理大數(shù)據(jù)集。
(5)HBase:
HBase 是一個非關(guān)系型數(shù)據(jù)庫管理系統(tǒng),以zookeeper做協(xié)同服務(wù),運(yùn)行在 HDFS 之上。它用來處理大數(shù)據(jù)工程中稀疏數(shù)據(jù)集。是一個針對結(jié)構(gòu)化數(shù)據(jù)的可伸縮、高可靠、高性能、分布式和面向列的動態(tài)模式數(shù)據(jù)庫。和傳統(tǒng)關(guān)系數(shù)據(jù)庫不同,HBase 采用了 BigTable 的數(shù)據(jù)模型:增強(qiáng)的稀疏排序映射表(Key/Value),其中,鍵由行關(guān)鍵字、列關(guān)鍵字和時間戳構(gòu)成。HBase 提供了對大規(guī)模數(shù)據(jù)的隨機(jī)、實(shí)時讀寫訪問,同時,HBase 中保存的數(shù)據(jù)可以使用 MapReduce 來處理,它將數(shù)據(jù)存儲和并行計算完美地結(jié)合在一起。數(shù)據(jù)模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value。
(6)Zookeeper
解決分布式環(huán)境下的數(shù)據(jù)管理問題:統(tǒng)一命名,狀態(tài)同步,集群管理,配置同步等。
(7)Sqoop(數(shù)據(jù)同步工具)
Sqoop 是 SQL-to-Hadoop 的縮寫,主要用于傳統(tǒng)數(shù)據(jù)庫和 Hadoop 之前傳輸數(shù)據(jù)。數(shù)據(jù)的導(dǎo)入和導(dǎo)出本質(zhì)上是 Mapreduce 程序,充分利用了 MR 的并行化和容錯性。
(8)Pig:
基于 Hadoop 的數(shù)據(jù)流系統(tǒng)設(shè)計動機(jī)是提供一種基于 MapReduce 的 ad-hoc(計算在 query 時發(fā)生)數(shù)據(jù)分析工具定義了一種數(shù)據(jù)流語言—Pig Latin,將腳本轉(zhuǎn)換為 MapReduce 任務(wù)在 Hadoop 上執(zhí)行。通常用于進(jìn)行離線分析。
(9)Mahout (數(shù)據(jù)挖掘算法庫)
Mahout 起源于 2008 年,最初是 Apache Lucent 的子項(xiàng)目,它在極短的時間內(nèi)取得了長足的發(fā)展,現(xiàn)在是 Apache 的頂級項(xiàng)目。Mahout 的主要目標(biāo)是創(chuàng)建一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout 現(xiàn)在已經(jīng)包含了聚類、分類、推薦引擎(協(xié)同過濾)和頻繁集挖掘等廣泛使用的數(shù)據(jù)挖掘方法。除了算法,Mahout 還包含數(shù)據(jù)的輸入/輸出工具、與其他存儲系統(tǒng)(如數(shù)據(jù)庫、MongoDB 或 Cassandra)集成等數(shù)據(jù)挖掘支持架構(gòu)。
(10)Flume(日志收集工具)
Cloudera 開源的日志收集系統(tǒng),具有分布式、高可靠、高容錯、易于定制和擴(kuò)展的特點(diǎn)。它將數(shù)據(jù)從產(chǎn)生、傳輸、處理并最終寫入目標(biāo)的路徑的過程抽象為數(shù)據(jù)流,在具體的數(shù)據(jù)流中,數(shù)據(jù)源支持在 Flume中定制數(shù)據(jù)發(fā)送方,從而支持收集各種不同協(xié)議數(shù)據(jù)。同時, Flume數(shù)據(jù)流提供對日志數(shù)據(jù)進(jìn)行簡單處理的能力,如過濾、格式轉(zhuǎn)換等。此外,F(xiàn)lume 還具有能夠?qū)⑷罩緦懲鞣N數(shù)據(jù)目標(biāo)(可定制)的能力??偟膩碚f,F(xiàn)lume 是一個可擴(kuò)展、適合復(fù)雜環(huán)境的海量日志收集系統(tǒng)。
(11)資源管理器的簡單介紹(YARN)
隨著互聯(lián)網(wǎng)的高速發(fā)展,基于數(shù)據(jù)密集型應(yīng)用的計算框架不斷出現(xiàn),從支持離線處理的
MapReduce,到支持在線處理的 Storm,從迭代式計算框架 Spark 到流式處理框架 S4,…,各種框架誕生于不同的公司或者實(shí)驗(yàn)室,它們各有所長,各自解決了某一類應(yīng)用問題。而在大部分互聯(lián)網(wǎng)公司中,這幾種框架可能都會采用,比如對于搜索引擎公司,可能的技術(shù)方案如下:網(wǎng)頁建索引采用 MapReduce 框架,自然語言處理/數(shù)據(jù)挖掘采用 Spark(網(wǎng)頁 PageRank計算,聚類分類算法等),對性能要求很高的數(shù)據(jù)挖掘算法用 MPI 等??紤]到資源利用率,運(yùn)維成本,數(shù)據(jù)共享等因素,公司一般希望將所有這些框架部署到一個公共的集群中,讓它們共享集群的資源,并對資源進(jìn)行統(tǒng)一使用,這樣,便誕生了資源統(tǒng)一管理與調(diào)度平臺,典型代表是YARN。
hadoop其他的一些開源組件:
1) cloudera impala:
impala 是由 Cloudera 開發(fā),一個開源的 Massively Parallel Processing(MPP)查詢引
擎 。與 Hive 相同的元數(shù)據(jù)、SQL 語法、ODBC 驅(qū)動程序和用戶接口(Hue Beeswax),可以直接在 HDFS 或 HBase 上提供快速、交互式 SQL 查詢。Impala 是在 Dremel 的啟發(fā)下開發(fā)的,第一個版本發(fā)布于 2012 年末。Impala 不再使用緩慢的 Hive+MapReduce 批處理,而是通過與商用并行關(guān)系數(shù)據(jù)庫中類似的分布式查詢引擎(由 Query Planner、Query Coordinator 和 Query Exec Engine 三部分組成),可以直接從 HDFS 或者 HBase 中用 SELECT、JOIN 和統(tǒng)計函數(shù)查詢數(shù)據(jù),從而大大降低了延遲。
2)spark:
Spark 是個開源的數(shù)據(jù)分析集群計算框架,最初由加州大學(xué)伯克利分校 AMPLab 開發(fā),建立于 HDFS 之上。Spark 與 Hadoop 一樣,用于構(gòu)建大規(guī)模、低延時的數(shù)據(jù)分析應(yīng)用。Spark 采用 Scala 語言實(shí)現(xiàn),使用 Scala 作為應(yīng)用框架。Spark 采用基于內(nèi)存的分布式數(shù)據(jù)集,優(yōu)化了迭代式的工作負(fù)載以及交互式查詢。與Hadoop不同的是,Spark和Scala緊密集成,Scala 像管理本地collective對象那樣管理分布式數(shù)據(jù)集。Spark 支持分布式數(shù)據(jù)集上的迭代式任務(wù),實(shí)際上可以在Hadoop 文件系統(tǒng)上與Hadoop一起運(yùn)行(通過 YARN、Mesos 等實(shí)現(xiàn))。
3) storm
Storm 是一個分布式的、容錯的實(shí)時計算系統(tǒng),由BackType開發(fā),后被Twitter捕獲。Storm 屬于流處理平臺,多用于實(shí)時計算并更新數(shù)據(jù)庫。Storm 也可被用于“連續(xù)計算”(continuous computation),對數(shù)據(jù)流做連續(xù)查詢,在計算時就將結(jié)果以流的形式輸出給用戶。它還可被用于“分布式 RPC”,以并行的方式運(yùn)行昂貴的運(yùn)算。存儲和并行計算完美地結(jié)合在一起。