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