Hadoop详解(一):Hadoop简介
1. Hadoop 起源
1.1 Hadoop的身世
首先我們介紹一下Nutch的發展情況,Nutch是一個以Lucene為基礎實現的搜索引擎系統,Lucene為Nutch提供了文本檢索和索引的API,Nutch不僅僅有檢索的功能,還有網頁數據采集的功能。
1.2 Hadopop簡介
Hadoop本質上起源于Google的集群系統,Google的數據中心使用廉價的Linux PC機組成集群,用其運行各種應用。即使是分布式開發的新手也可以迅速使用Google的基礎設施Google采集系統的核心的組件有兩個:
Map是把輸入Input分解成中間的Key/Value對,Reduce把Key/Value合成最終輸出Output。這兩個函數由程序員提供給系統,下層設施把Map和Reduce操作分布在集群上運行,并把結果存儲在GFS上。
典型的Hadoop由一個Master邏輯節點和多個Slave邏輯節點構成,Master邏輯節點由NameNode和ResourceManager組成,NameNode是HDFS的Master,主要負責Hadoop分布式文件系統元數據的管理工作;ResourceManager是MapReduce的Master,其主要職責就是啟動、跟蹤、調度各個NodeManager的任務執行,每一個Slave邏輯節點通常同時具有DataNode以及NodeManager的功能。
下面我們介紹一下Hadoop整個生態系統:
- HDFS——Hadoop分布式文件系統,GFS的Java開源實現,運行于大型商用機器集
群,可實現分布式存儲。 - MapReduce——一種并行計算框架,Google MapReduce模型的Java開源實現,基于其寫出來的應用程序能夠運行在由上千個商用機器組成的大型集群上,并以一種可靠容錯的方式并行處理T級別及以上的數據集。
- Zookeeper——分布式協調系統,Google Chubby的Java開源實現,是高可用的和可靠的分布式協同(coordination)系統,提供分布式鎖之類的基本服務,用于構建分布式應用。
- Hbase——基于Hadoop的分布式數據庫,Google BigTable的開源實現 是一個有
序、稀疏、多維度的映射表,有良好的伸縮性和高可用性,用來將數據存儲到各個計算節點上。 - Hive——是為提供簡單的數據操作而設計的分布式數據倉庫,它提供了簡單的類似
SQL語法的HiveQL語言進行數據查詢。 - Cloudbase——基于Hadoop的數據倉庫,支持標準的SQL語法進行數據查詢。
- Pig——大數據流處理系統,建立于Hadoop之上為并行計算環境提供了一套數據工
作流語言和執行框架。 - Mahout——基于HadoopMapReduce的大規模數據挖掘與機器學習算法庫
- Oozie——MapReduce工作流管理系統。
- Sqoop——數據轉移系統,是一個用來將Hadoop和關系型數據庫中的數據相互轉
移的工具,可以將一個關系型數據庫中的數據導入Hadoop的HDFS中,也可以將HDFS
的數據導入關系型數據庫中。 - Flume——一個可用的、可靠的、分布式的海量日志采集、聚合和傳輸系統
- Scribe——Facebook開源的日志收集聚合框架系統。
2. 大數據、Hadoop和云計算
2.1 大數據
大數據一般是指的是這樣的數據:數據量大,需要運用新處理模式才能更具有更強大的決策力、洞察力和流程優化能力的海量、高增長率和多樣化的信息資產。
大數據的特征有四個層面:第一,數據量巨大,從TB級別,躍升到PB級別;第二,數據類型繁多,包括網絡日志、視頻、圖片、地理位置信息等;第三,價值密度低,商業價值高,以視頻為例,在連續不間斷的監控過程中,可能有用的數據僅僅只有一兩秒;第四,處理速度快。最后這一點也和傳統的數據挖掘技術有著本質的不同。業界將其歸納為4V——Volume、Variety、Value和Velocity
上面我們介紹了大數據的基本概念以及顯著的特征,下面我們將從不同的維度來闡述大數據的很細問題:
2.2 大數據、Hadoop和云計算的關系
分布式存儲架構不僅需要scale up的可擴展性,也需要scale out式的可擴展性,因此大數據處理離不開云計算技術,云計算也為大數據提供彈性可擴展的基礎設施支撐環境以及數據服務的高效模式,大數據則為云計算提供了新的商業價值,大數據技術和云計算技術必將有更完美的結合。
3. 設計思想和架構
從計算的角度,再超級的計算機也很難一下處理海量的數據,因而需要分而為之,Hadoop就能將大數據進行分而處理,然后進行歸約。
3.1 數據存儲和切分
HDFS式Hadoop分布式計算的存儲基石,簡單總結下來有如下基本特征:
- 對于整個集群有單一的命名空間。
- 數據一致性。適合一次寫入多次讀取的模型,客戶端在文件沒有被成功創建之前無
法看到文件存在。 - 文件會被分割成多個文件塊,每個文件塊被分配存儲到數據節點上,而且根據配置
會有復制文件塊來保證數據的安全性。
在Hadoop中數據存儲涉及HDFS的三個重要角色,分別為:名稱節點
(NameNode)、數據節點(DataNode)、客戶端。
NameNode可以看做是分布式文件系統中的管理者,主要負責管理文件系統的命名空間、集群配置信息、存儲塊的復制。NameNode會存儲文件系統的Metadata在內存中,這些信息主要包括文件信息,即每一個文件對應的文件塊的信息,以及每一個塊在DataNode的信息。
DataNode是文件存儲的基本單元。它將Block存儲在本地文件系統中,保存了Block的Metadata,同時周期性地發送所有存在的Block的報告給NameNodeClient就是需要獲取分布式文件系統文件的應用程序。
數據存儲中的讀取和寫入過程,如下:
文件寫入HDFS的基本流程如下:
文件讀取HDFS的基本流程如下:
在HDFS中復制文件塊的基本流程如下:
3.2 MapReduce模型
Hadoop向用戶提供了一個規范的MapReduce編程接口,用戶只需要編寫Map和Reduce函數,這兩個函數都是運行在鍵-值基礎上,整數的切分,節點之間的通信調度等全部由Hadoop框架本身來負責。
在Map之前會對輸入的數據有split的過程,默認split就是寫入數據時的邏輯塊,每一個塊對應一個split,一個split就對應一個Map進程,正是split保證了任務的并行效率。在Map之后還會有shuffle和sort的過程,shuffle簡單描述就是一個Map的輸出應該映射到哪個Reduce作為輸入,sort就是指在Map運行完輸出后會根據輸出的鍵進行排序。這兩個處理步驟對于提高Reduce的效率及減小數據傳輸的壓力有很大的幫助。
MapReduce基本思想
從本質上講MapReduce借鑒了函數式程序設計語言的設計思想,其軟件實現是指定一個Map函數,把鍵值對(key/value)映射成新的鍵值對(key/value)形成一系列中間結果形式的鍵值對(key/value),然后把它們傳給Reduce(歸約函數,把具有相同中間形式key的value合并在一起。Map和Reduce函數具有一定的關聯性。其算法描述為:
Map(k,v)-> list(k1,v1) Reduce(k1,list(v1))->list(v1)在Map過程中將數據并行,即把數據用映射函數規則分開,而Reduce則把分開的數據用歸約函數規則合在一起,即Map是個分的過程,Reduce則對應著合。
3.3 MPI和MapReduce
利用MapReduce,程序員能夠輕松地編寫緊耦合的程序,在運行時能高效地調度和執行任務,在實現時,在Map函數中指定對各分塊數據的處理過程,在Reduce函數中指定如何對分塊數據處理的中間結果進行歸約。用戶只需要指定Map和Reduce函數來編寫分布式的并行程序不需要關心如何將輸入的數據分塊、分配和調度,同時系統還將處理集群內節點失敗及節點間通信的管理等。
4.Hadoop發行版
4.1 Apache Hadoop
Apache Hadoop是Hadoop最權威的官方版本,就像Linux的內核與Linux的發行版的地位一樣,Apache Hadoop版本是所有商業發行版之源,主要組件為HDFS和MapReduce。
4.2 Cloudera Hadoop
Cloudera成立于2008年,是最早將Hadoop用于商業化的公司,為其合作伙伴提供Hadoop的商用解決方案,主要包括支持、咨詢服務、培訓。
Cloudera的Hadoop發行版在商用中算是最成功的,Cloudera的CDH版本集成了Hadoop、Pig、Flume、HBase、Hcatalog、Hive、Hue、Mahout、Oozie、Sqoop、Whirr以及Zookeeper版本,并且也是開源的,最新版本為CDH4.2.0
4.3 Hortonworks Hadoop 發行版
4.4 MapR Hadoop 發行版
4.5 IBM Hadoop 發行版
4.6 Intel Hadoop 發行版
4.7 華為Hadoop發行版
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Hadoop详解(一):Hadoop简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zookeeper分布式一致性原理(十一
- 下一篇: Hadoop详解(三):HDFS完全分布