就目前來說Hadoop已經成為處理大數據的問題的必備的組件,許多的大廠都已經在使用Hadoop軟件棧處理自己的問題,那為什么Hadoop技術棧這么流行?
其實不外乎幾個原因:首先Hadoop是完全開源的,雖然Oracle也可以搭建集群但是畢竟Oracle不是開源的,其次是當數據量大的時候Oracle的計算也會變得很慢。其次是Hadoop的社區(qū)比較活躍,這樣解決問題的成本就會很低,因為很可能一些問題早已經被別人解決了。最后是Hadoop已經被很多企業(yè)投入使用,有了實戰(zhàn)的經驗,同時Hadoop有很廣泛的大數據解決面。
Hadoop1.0和Hadoop2.0
要學習hadoop首先就要認識Hadoop的版本問題,因為網上很多資料都是很混淆的,有的介紹的其實是Hadoop1.0的問題,有的資料都搞混Hadoop1.0與Hadoop2.0,這對學習很不利。

首先我們應該知道Hadoop1.0最大的問題是單點故障問題
Hadoop2.0就是針對Hadoop1.0的問題進行解決與優(yōu)化。根據上圖我們知道,Hadoop1.0只支持單一的計算模型MapReduce,Hadoop2.0加入Yarn資源調度器,可以支持多種類型的計算模型,Yarn同時可以給不同的計算任務進行計算資源的分配。
Hadoop2.0
- HDFS 主要提供了分布式存儲系統(tǒng),供了高可靠性、高擴展性和高吞吐率的數據存儲服務,同時基于對數據的操作基本屬于順序讀取的流式讀取,并且Hadoop可以承載草大文件的存儲。
- Yarn 主要負責集群的資源的管理,同時也可以進行資源的分配。
- Mapreduce分布式計算框架,具有易于編程、高容錯性和高擴展性等優(yōu)點.
HDFS

HDFS的基本原理,就是將大文件切分為同樣大小的數據塊(128MB),進行冗余(3份)存儲在不同的機器上。同時調控集群的負載均衡。
如上圖所示,在Hadoop2.0中Namenode節(jié)點有兩個為了解決但節(jié)點故障問題,不過現在的備份節(jié)點是屬于靜態(tài)綁定,如果兩個節(jié)點都故障,就不得使用冷啟動方式啟動。
Yarn

了解Hadoop1.0的一定知道其是通過JobTracker和TaskTracker進行任務與資源的分配,但是也存在單節(jié)點故障的問題。Yarn目前很復雜,但目前也符合主/從的模式,由上圖知,ResourceManager管理著NodeManage從節(jié)點。具有良好的擴展性和高可用性。
MapReduce

上圖是MapReduce計算的過程,主要分為input,splitting,Mapping,shuffing,Reducing,output五個過程。但是其他復雜過程都被封裝了,我們只需要進行編寫Mapping和Reducing的過程。
Hadoop生態(tài)系統(tǒng)

Hive
最初用于解決海量結構化的日志數據統(tǒng)計問題,其是構建在HDFS數據倉庫上的,其底層就是MapReduce計算實現。Hive定義了一種HiveQL語言,可以使Hive通過簡單的類SQL語句實現MapReduce程序。
SELECT word, COUNT(*) FROM doc LATERAL VIEW explode(split(text, ' ')) lTable
as word GROUP BY word;
pig
pig與hive類似,但是pig不管數據是不是關系型的,有無元數據,是否嵌套都可以進行操作,而且pig也可以在其他平臺上進行使用。
定義了一種數據流語言——Pig Latin
① 加載數據 input = load ‘/input/data’ as (line:chararray);
② 將字符串分割成單詞 words = foreach input generate flatten(TOKENIZE(line)) as word;
③ 對單詞進行分組 grpd = group words by word;
④ 統(tǒng)計每組中單詞數量 cntd = foreach grpd generate group, COUNT(words);
⑤ 打印結果 dump cntd;
Mahout
基于Hadoop的機器學習和數據挖掘的分布 式計算框架
mahout主要包含以下5部分
頻繁挖掘模式:挖掘數據中頻繁出現的項集。
聚類:將諸如文本、文檔之類的數據分成局部相關的組。
分類:利用已經存在的分類文檔訓練分類器,對未分類的文檔進行分類。
推薦引擎(協(xié)同過濾):獲得用戶的行為并從中發(fā)現用戶可能喜歡的事物。
頻繁子項挖掘:利用一個項集(查詢記錄或購物記錄)去識別經常一起出現的項目。
Hbase

Table:表:類似于傳統(tǒng)傳統(tǒng)數據庫中的表
Column Family:列簇:Table在水平方向有一個或者多個
Column Family 組成
一個Column Family中可以由任意多個Column組 成
Row Key: 行鍵 ?Table的主鍵 ?Table中的記錄按照Row Key排序 ?Timestamp: 時間戳
每行數據均對應一個時間戳 ?版本號
Client:
包含訪問HBase的接口,并維護cache來加快對HBase的訪問。說白了,就是用來訪問HBase的客戶端。
HMaster:
這個東西是HBase的主節(jié)點,用來協(xié)調Client端應用程序和HRegionServer的關系,管理分配HRegion給HRegionserver服務器。
HRegionServer:
Hbase的從節(jié)點,管理當前自己這臺服務器上面的HRegion,HRegion是Hbase表的基礎單元組建,存儲了分布式的表。HRegionserver負責切分在運行過程中變得過大的HRegion。
HRegion:
一個Table可以有多個HRegion,HBase使用rowKey將表水平切割成多個HRegion,每個HRegion都紀錄了它的StartKey和EndKey(第一個HRegion的StartKey為空,最后一個HRegion的EndKey為空),由于RowKey是排序的,因而Client可以通過HMaster快速的定位每個RowKey在哪個HRegion中。HRegion由HMaster分配到相應的HRegionServer中,然后由HRegionServer負責HRegion的啟動和管理,和Client的通信,負責數據的讀(使用HDFS)。每個HRegionServer可以同時管理1000個左右的HRegion,出處請參看論文:BigTable(5 Implementation節(jié)):Each tablet server manages a set of tablets(typically we have somewhere between ten to a thousand tablets per tablet server))。
MemStore:
它是一個寫緩存,數據先WAL[write ahead log](也就是HLog它是一個二進制文件,所有寫操作都會先保證將數據寫入這個Log文件后,才會真正更新MemStore,最后寫入HFile中),在寫入MemStore后,由MemStore根據一定的算法將數據Flush到底層HDFS文件中(HFile),一般而言,對于每個HRegion中的每個Column Family來說,有一個自己的MemStore。
StoreFile:
1個HStore,由一個MemStore和0~N個StoreFile組成。
HFile:
用于存儲HBase的數據(Cell/KeyValue),在HFile中的數據是按RowKey、Column Family、Column排序,對于相同的數據單元,排序則按照時間戳(Timestamp)倒敘排列。
Zookeeper:
HBase內置有zookeeper,但一般我們會有其他的Zookeeper集群來監(jiān)管master和regionserver,Zookeeper通過選舉,保證任何時候,集群中只有一個活躍的HMaster,HMaster與HRegionServer 啟動時會向ZooKeeper注冊,存儲所有HRegion的尋址入口,實時監(jiān)控HRegionserver的上線和下線信息。并實時通知給HMaster,存儲HBase的schema和table元數據,默認情況下,HBase 管理ZooKeeper 實例,Zookeeper的引入使得HMaster不再是單點故障。一般情況下會啟動兩個HMaster,非Active的HMaster會定期的和Active HMaster通信以獲取其最新狀態(tài),從而保證它是實時更新的,因而如果啟動了多個HMaster反而增加了Active HMaster的負擔。
Zookeeper
Zookeeper本質上是一個MapReduce程序。

連接Hadoop與傳統(tǒng)數據庫之間的橋梁 支持多種數據庫,包括MySQL、DB2等 插拔式,用戶可根據需要支持新的數據庫 本質上是一個MapReduce程序 充分利用了MR分布式并行的特點,充分利用MR容錯性
Oozie
如何對這些框架和作業(yè)進行統(tǒng)一管理和調度?
不同作業(yè)之間存在依賴關系(DAG);
周期性作業(yè)
定時執(zhí)行的作業(yè)
作業(yè)執(zhí)行狀態(tài)監(jiān)控與報警(發(fā)郵件、短信等)

開源版本
Apache Hadoop
CDH
HDP
建議選擇公司發(fā)行版,比如CDH或HDP
不用考慮不同軟件間的版本匹配