hadoop簡介和歷史html
Hadoop架構體系node
Master和Slave節點程序員
數據分析面臨的問題和Hadoop思想算法
因爲工做緣由,必須學習和深刻一下Hadoop,特此記錄筆記。數據庫
什麼是hadoop?apache
Apache Hadoop是一款支持 數據密集型分佈式應用 並以Apache 2.0許可協議發佈的開源軟件框架 。它支持在商品硬件構建的大型集羣上運行的應用程序。 Hadoop是根據Google公司發表的MapReduce和Google檔案系統的論文自行實做而成。編程
Hadoop框架透明地爲應用提供可靠性和數據移動。它實現了名爲 MapReduce的編程範式:應用程序被分割成許多小部分,而每一個部分都能在集羣中的任意節點上執行或從新執行。 此外,Hadoop還提供了分佈式文件系統,用以存儲全部計算節點的數據,這爲整個集羣帶來了很是高的帶寬。MapReduce和分佈式文件系統的設計,使得整個框架可以自動處理節點故障。它使應用程序與成千上萬的獨立計算的電腦和PB級的數據。瀏覽器
hadoop歷史服務器
Hadoop由 Apache Software Foundation 於 2005 年秋天做爲Lucene的子項目Nutch的一部分正式引入。它受到最早由 Google Lab 開發的 Map/Reduce 和 Google File System(GFS) 的啓發。架構
2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分別被歸入稱爲 Hadoop 的項目中。Hadoop 是最受歡迎的在 Internet 上對搜索關鍵字進行內容分類的工具,但它也能夠解決許多要求極大伸縮性的問題。例如,若是您要 grep 一個 10TB 的巨型文件,會出現什麼狀況?在傳統的系統上,這將須要很長的時間。可是 Hadoop 在設計時就考慮到這些問題,採用並行執行機制,所以能大大提升效率。
Hadoop Common:在0.20及之前的版本中,包含HDFS、MapReduce和其餘項目公共內容,從0.21開始HDFS和MapReduce被分離爲獨立的子項目,其他內容爲Hadoop Common
HDFS:Hadoop分佈式文件系統(Distributed File System)-HDFS(Hadoop Distributed File System)
MapReduce:並行計算框架,0.20前使用org.apache.hadoop.mapred舊接口,0.20版本開始引入org.apache.hadoop.mapreduce的新API
Apache HBase:分佈式NoSQL列數據庫,相似谷歌公司BigTable。
Apache Hive:構建於hadoop之上的數據倉庫,經過一種類SQL語言HiveQL爲用戶提供數據的概括、查詢和分析等功能。Hive最初由Facebook貢獻。
Apache Mahout:機器學習算法軟件包。
Apache Sqoop:結構化數據(如關係數據庫)與Apache Hadoop之間的數據轉換工具。
Apache ZooKeeper:分佈式鎖設施,提供相似Google Chubby的功能,由Facebook貢獻。
Apache Avro:新的數據序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制。
hadoop平臺子項目
如今廣泛認爲整個Apache Hadoop「平臺」包括Hadoop內核、MapReduce、Hadoop分佈式文件系統(HDFS)以及一些相關項目,有Apache Hive和Apache HBase等等。Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS爲海量的數據提供了存儲,則MapReduce爲海量的數據提供了計算。
如圖,最下面一層就是hadoop的核心代碼,核心代碼之上實現了兩個最核心的功能:MapReduce和HDFS,這是hadoop的兩大支柱!由於hadoop是Java寫的,爲了方便其餘對Java語言不熟悉的程序員,在這之上又有Pig,這是一個輕量級的語言,用戶可使用Pig用於數據分析和處理,系統會自動把它轉化爲MapReduce程序。
還有一個Hive,很重要!這是一個傳統的SQL到MapReduce的映射器,面向傳統的數據庫工程師。可是不支持所有SQL。還有一個子項目叫HBase,一個非關係數據庫,NoSQL數據庫,數據是列存儲的,提升響應速度,減小IO量,能夠作成分佈式集羣。
ZooKeeper負責服務器節點和進程間的通訊,是一個協調工具,由於Hadoop的幾乎每一個子項目都是用動物作logo,故這個協調軟件叫動物園管理員。
Hadoop架構
如圖,兩個服務器機櫃,每一個圓柱表明一個物理機,各個物理節點經過網線鏈接,鏈接到交換機,而後客戶端經過互聯網來訪問。其中各個物理機上都運行着Hadoop的一些後臺進程。
Namenode
也叫名稱節點,是HDFS的守護程序(一個核心程序),對整個分佈式文件系統進行總控制,會紀錄全部的元數據分佈存儲的狀態信息,好比文件是如何分割成數據塊的,以及這些數據塊被存儲到哪些節點上,還有對內存和I/O進行集中管理,用戶首先會訪問Namenode,經過該總控節點獲取文件分佈的狀態信息,找到文件分佈到了哪些數據節點,而後在和這些節點打交道,把文件拿到。故這是一個核心節點。
不過這是個單點,發生故障將使集羣崩潰。
Secondary Namenode
在Hadoop中,有一些命名很差的模塊,Secondary NameNode是其中之一。從它的名字上看,它給人的感受就像是NameNode的備份,好比有人叫它第二名稱節點,彷彿給人感受還有後續……但它實際上卻不徹底是。
最好翻譯爲 輔助名稱節點,或者檢查點節點 ,它是 監控HDFS狀態的輔助後臺程序,能夠保存名稱節點的副本,故每一個集羣都有一個,它與NameNode進行通信,按期保存HDFS元數據快照。 NameNode故障能夠做爲備用NameNode使用,目前還不能自動切換。可是功能毫不僅限於此。所謂後備也不是它的主要功能。後續詳細解釋。
DataNode
叫數據節點, 每臺從服務器節點都運行一個 ,負責把HDFS數據塊讀、寫到本地文件系統。 這三個東西組成了Hadoop平臺其中一個支柱——HDFS體系。
再看另外一個支柱——MapReduce,有兩個後臺進程。
JobTracker
叫做業跟蹤器,運行到主節點(Namenode)上的一個很重要的進程,是MapReduce體系的調度器。用於處理做業(用戶提交的代碼)的後臺程序,決定有哪些文件參與做業的處理,而後把做業切割成爲一個個的小task,並把它們分配到所須要的數據所在的子節點。
Hadoop的原則就是就近運行,數據和程序要在同一個物理節點裏,數據在哪裏,程序就跑去哪裏運行。這個工做是JobTracker作的,監控task,還會重啓失敗的task(於不一樣的節點), 每一個集羣只有惟一一個JobTracker,相似單點的nn,位於Master節點(稍後解釋Master節點和slave節點) 。
TaskTracker
叫任務跟蹤器,MapReduce體系的最後一個後臺進程,位於每一個slave節點上,與datanode結合(代碼與數據一塊兒的原則),管理各自節點上的task(由jobtracker分配), 每一個節點只有一個tasktracker,但一個tasktracker能夠啓動多個JVM ,用於並行執行map或reduce任務,它與jobtracker交互通訊,能夠告知jobtracker子任務完成狀況。
Master與Slave
Master節點:運行了Namenode、或者Secondary Namenode、或者Jobtracker的節點。還有瀏覽器(用於觀看管理界面),等其它Hadoop工具。 Master不是惟一的!
Slave節點:運行Tasktracker、Datanode的機器。
數據分析者面臨的問題和Hadoop的思想
目前須要咱們處理的數據日趨龐大,不管是入庫和查詢,都出現性能瓶頸, 用戶的應用和分析結果呈整合趨勢,對實時性和響應時間要求愈來愈高。使用的模型愈來愈複雜,計算量指數級上升。
故,人們但願出現一種技術或者工具來解決性能瓶頸,在可見將來不容易出現新瓶頸,而且學習成本儘可能低,使得過去所擁有的技能能夠平穩過渡。好比SQL、R等,還有轉移平臺的成本可否控制最低,好比平臺軟硬件成本,再開發成本,技能再培養成本,維護成本等。
而Hadoop就能解決如上問題——分而治之,化繁爲簡。
來源於:http://www.thebigdata.cn/