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