1. Hadoop介紹
Hadoop是Apache旗下的一個用java語言實現開源軟件框架,是一個開發和運行處理大規模數據的軟件平台。允許使用簡單的編程模型在大量計算機集群上對大型數據集進行分布式處理。
狹義上說,Hadoop指Apache這款開源框架,它的核心組件有:
HDFS(分布式文件系統):解決海量數據存儲
YARN(作業調度和集群資源管理的框架):解決資源任務調度
MAPREDUCE(分布式運算編程框架):解決海量數據計算
廣義上來說,Hadoop通常是指一個更廣泛的概念——Hadoop生態圈。
當下的Hadoop已經成長為一個龐大的體系,隨着生態系統的成長,新出現的項目越來越多,其中不乏一些非Apache主管的項目,這些項目對HADOOP是很好的補充或者更高層的抽象。比如:
HDFS:分布式文件系統
MAPREDUCE:分布式運算程序開發框架
HIVE:基於HADOOP的分布式數據倉庫,提供基於SQL的查詢數據操作
HBASE:基於HADOOP的分布式海量數據庫
ZOOKEEPER:分布式協調服務基礎組件
Mahout:基於mapreduce/spark/flink等分布式運算框架的機器學習算法庫
OOZIE:工作流調度框架
Sqoop:數據導入導出工具(比如用於mysql和HDFS之間)
FLUME:日志數據采集框架
IMPALA:基於hive的實時sql查詢分析
2. Hadoop發展簡史
Hadoop是Apache Lucene創始人 Doug Cutting創建的。最早起源於Nutch,它是Lucene的子項目。Nutch的設計目標是構建一個大型的全網搜索引擎,包括網頁抓取、索引、查詢等功能,但隨着抓取網頁數量的增加,遇到了嚴重的可擴展性問題:如何解決數十億網頁的存儲和索引問題。
2003年Google發表了一篇論文為該問題提供了可行的解決方案。論文中描述的是谷歌的產品架構,該架構稱為:谷歌分布式文件系統(GFS),可以解決他們在網頁爬取和索引過程中產生的超大文件的存儲需求。
2004年 Google發表論文向全世界介紹了谷歌版的MapReduce系統。
同時期,Nutch的開發人員完成了相應的開源實現HDFS和MAPREDUCE,並從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,迎來了它的快速發展期。
2006年Google發表了論文是關於BigTable的,這促使了后來的Hbase的發展。
因此,Hadoop及其生態圈的發展離不開Google的貢獻。
3. Hadoop特性優點
擴容能力(Scalable):Hadoop是在可用的計算機集群間分配數據並完成計算任務的,這些集群可用方便的擴展到數以千計的節點中。
成本低(Economical):Hadoop通過普通廉價的機器組成服務器集群來分發以及處理數據,以至於成本很低。
高效率(Efficient):通過並發數據,Hadoop可以在節點之間動態並行的移動數據,使得速度非常快。
可靠性(Rellable):能自動維護數據的多份復制,並且在任務失敗后能自動地重新部署(redeploy)計算任務。所以Hadoop的按位存儲和處理數據的能力值得人們信賴。
4. Hadoop國內外應用
不管是國內還是國外,Hadoop最受青睞的行業是互聯網領域,可以說互聯網公司是hadoop的主要使用力量。
國外來說,Yahoo、Facebook、IBM等公司都大量使用hadoop集群來支撐業務。比如:
Yahoo的Hadoop應用在支持廣告系統、用戶行為分析、支持Web搜索等。
Facebook主要使用Hadoop存儲內部日志與多維數據,並以此作為報告、分析和機器學習的數據源。
國內來說,BAT領頭的互聯網公司是當仁不讓的Hadoop使用者、維護者。比如Ali雲梯(14年國內最大Hadoop集群)、百度的日志分析平台、推薦引擎系統等。
國內其他非互聯網領域也有不少hadoop的應用,比如:
金融行業: 個人征信分析
證券行業: 投資模型分析
交通行業: 車輛、路況監控分析
電信行業: 用戶上網行為分析
總之:hadoop並不會跟某種具體的行業或者某個具體的業務掛鈎,它只是一種用來做海量數據分析處理的工具。
總結:
Hadoop是什么?
答:狹義上:是指Apache的一款java語言開發的開源軟件,大數據問題處理平台!
Hadoop HDFS:分布式文件系統,解決海量數據存儲問題 Hadoop MapReduce:分布式計算框架,解決海量數據計算問題。 Hadoop YARN:資源管理任務調度系統 |
Hadoop框架組成:
Hadoop框架的組成
HDFS(Hadoop Distributed File System),Hadoop分布式文件系統。
Map/Reduce分布式計算系統
- 1、什么是HDFS分布式文件系統
- HDFS是一個的文件系統,可以創建、移動、刪除和重命名文件。
- 是一個基於網絡的分布式文件系統。
- 由多個機器聯網組成,其中一台為NameNode,其他的是DataNode。
- NameNode為HDFS提供元數據服務,管理保存在不同節點上的數據信息。
- DataNode管理本節點上的數據。
- NameNode將一個大的數據文件分成多個數據塊保存到不同的DataNode節點上,並記錄所有數據塊所在節點的信息,DataNode管理本節點上的數據塊,數據塊的大小默認為128M。
- HDFS上NameNode和DataNode通信基於TCP/IP協議
- 2、HDFS(分布式文件系統)
- HDFS分布式文件系統是基於網絡的。
- 是由多台機器組成的。
- 是由一個NameNode和多個DataNode組成,NameNode運行在主服務器上,管理文件系統的命名空間和客戶端對文件系統的訪問操作。DataNode運行在其他的多台機器上,主要管理數據的存儲,包括要分析的數據,歷史數據等。
- 在主服務器上的NameNode是HDFS分布式文件系統的主守護進程,分布在其他機器上的DataNode從進程定時向主進程NameNode發送報告,報告節點數據和磁盤的情況。NameNode進程向不同的DataNode節點發送指令,要求節點下載數據並管理數據。
- 3、什么是MapReduce(分布式計算系統)
- MapReduce是處理數據的編程模型。
- 關系數據庫可以采用SQL語句對數據進行操作查詢。
- MapReduce可以通過Java、C等其他語言對數據進行查詢分析。
- MapReduce分為兩個階段,map階段和reduce階段,map階段將原始數據進行過濾操作,以鍵/值對的方式輸出,map階段的輸出是reduce階段的輸入,reduce階段對數據處理后輸出最終的結果。
- MapReduce處理的數據文件保存在HDFS上,並且最終的計算結果同樣會保存到HDFS上。
- MapReduce和HDFS相對獨立由相互聯系。
- 4、MapReduce(分布式計算系統)
- Hadoop1.0版本的MapReduce
- 由一個JobTracker和多個TaskTracker組成。 JobTracker運行在主服務器上, TaskTracker運行在集群中的從節點上。
- JobTracker進程負責調度一個作業的所有任務的執行,這些任務會分配到不同的節點上。JobTracker主進程監控所有從節點的TaskTracker進程的作業執行情況,重新執行失敗的任務。TaskTracker執行JobTracker指定的任務。當一個Job(數據分析作業)提交時,JobTracker接收到提交的任作業后,將作業執行需要的配置信息和其他數據信息分發給相應的TaskTracker。同時要調度任務並監控TaskTracker的執行。
- Hadoop1.0版本的MapReduce
- 5、YARN(分布式計算系統)
- Hadoop2.0版本的MapReduceV2(YARN)
- YARN ( Yet Another Resource Negotiator )
- 由一個ResourceManager和多個NodeManager組成。 ResourceManager運行在主服務器上, NodeManager運行在集群中的從節點上。
- ResourceManager是集群所有可用資源的仲裁者。是一個單純的資源控制器和調度器。主要職責是接收應用程序的資源請求並嚴格控制系統的可用資源。動態的分配資源。
- NodeManager是集群中每個節點上的管理進程,職責是對節點中的資源進行管理並與ResourceManager保持通信,報告節點的各種狀態信息。與ResourceManager共同管理整個集群資源,資源包括內存、CPU等。
- 6、Hadoop2.0在Hadoop1.0上的改變
- YARN將JobTracker分為兩個組件:ResourceManager和ApplicationMaster。ResourceManager作為資源管理和調度不需要關心應用程序的執行和監控。而與應用程序相關的是ApplicationMaster。
- ResourceManager進程運行在主節點上,作為集群資源的管理者和總調度,不在需要關心應用程序的執行和監控。ApplicationMaster進程運行在從節點上,主要管理應用程序的執行和應用程序的生命周期,當應用程序執行結束,ApplicationMaster的生命周期結束。
- 客戶端發出應用程序執行請求,ResourceManager會創建與應用程序對應的ApplicationMaster實例。
- 好處是,分工明確,粒度細化和多應用程序的同步執行。
- 不同的應用對應不同的ApplicationMaster。MapReduce計算框架對應相應的ApplicationMaster。不同的計算框架對應不同的ApplicationMaster實現。
- 好處是:職責的分離帶來的是擴展性的提升。如:程序在運行階段發生異常帶來的節點任務失敗是需要重新啟動作業的,這些相關的容錯機制在Hadoop1.0是由JobTracker負責的。使得JobTracker成為重量級,代碼的維護相當困難,並且框架的耦合度高,功能模塊粒度粗。在YARN中這些容錯職責由ApplicationMaster擔任,實現了容錯機制局部化,而不是以往的全局管理。此外需要注意的是應用程序和ResourceManager的分離使ResourceManager輕量化。某個應用的執行不會影響到整個集群。
- Hadoop2.0和Hadoop1.0的結構圖
- 不同應用對應不同的ApplicationMaster。只需要增加不同計算框架的ApplicationMaster實現即可實現多種框架使用YARN,如MapReduce、MPI和圖計算等。實現上是把所有與應用程序相關的代碼都放到ApplicationMaster類中。並提供不同的接口滿足不同用戶的需求。