- Hadoop簡介和歷史
- Hadoop架構體系
- Master和Slave節點
- 數據分析面臨的問題和Hadoop思想
由於工作原因,必須學習和深入一下Hadoop,特此記錄筆記。
什么是hadoop?
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就能解決如上問題——分而治之,化繁為簡。
歡迎關注
dashuai的博客是終身學習踐行者,大廠程序員,且專注於工作經驗、學習筆記的分享和日常吐槽,包括但不限於互聯網行業,附帶分享一些PDF電子書,資料,幫忙內推,歡迎拍磚!