1. 程式人生 > >學習hadoop——第2篇

學習hadoop——第2篇

1.Hadoop 的產生與發展

      在大資料時代,資料面臨著爆炸式的增長,據IDC公司統計2013年,全球產生3.5ZB的資料,預計到2020年,這個資料將超過10 倍增長,1ZB等於10億TB,大資料的價值在於挖掘,挖掘就是分析,但是如何儲存和分析這些資料成為一個重要難題。在傳統計算機體系中,儲存空間正面臨著嚴重挑戰,儲存資料的成本越來越高。在儲存領域,出現的技術更多的增加到儲存的速度,但是增加硬碟容量的技術卻發展的非常慢,現在很多廠商已經意識到大容量硬碟同樣是一個巨大的市場但技術研發需要時間,但遠水解不了近渴,存在的問題是,儲存的讀取速度提升有限,磁碟的儲存空間嚴重不足。


   Hadoop 提供了一個可靠的共享儲存和分析系統:HDFS 實現儲存,而MapReduce實現分析處理。

   這兩種構成了Hadoop系統的核心

  Hadoop的主要技術特點:

    1.擴容能力:能可靠地儲存和處理千兆位元組(PB)資料

    2.成本低:通過普通機器組成的伺服器叢集來分發以及處理資料

    3.可靠性:Hadoop能自動維護資料的多份副本,並且在任務失敗後能自動部署計算任務


2.Hadoop的定義與組成

  Hadoop由Pig,Chukwa,Hive,HBase,MapReduce,HDFS,Zookeeper,Core,Avro九部分,其中最核心是MapReduce

HDFS  

  其中部分子專案的作用如下表所示:


Pig                                  一種用於探索大型資料的指令碼語言

Chukwa                          展示,監控和分析已收集的資料

Hive                               提供類似Oracle的資料新增,查詢,修改,刪除

Hbase                            提供可靠的,可擴充套件分散式資料庫

Zookeeper                     為分散式檔案系統提供一致性服務

Core                               提供了一個分散式檔案系統(HDFS)和支援MapReduce的分散式計算序列化,提供分散式出書效率


MapReduce 計算框架:

    作業完成時間取決於最慢任務完成時間

    (1)一個作業由若干個Map任務和Reduce任務構成

    (2)因硬體老化軟體bug等,某些任務可能執行非常慢

    推測執行機制:

    (1)發現某個任務執行

         速度遠慢與任務平均速度就拖後腿

         任務啟動一個備份任務,同時進行

    (2)誰先執行先,則採用誰得結果


不能啟用推測執行機制:

     任務間存在嚴重的負載傾斜

     特殊任務,比如任務向資料庫中寫東西

Hadoop與關係型資料庫的比較

  隨著近些年企業資料量的爆發式增長,原有關係型資料庫在成本和效率上的先天不足就日益顯露出來,這時新的分散式處理技術Hadoop 就應運而生

      

關係型資料庫和MapReduce的比較
比較項 傳統關係型資料庫 MapReduce
資料大小 GB PB
訪問 互動式和批處理 批處理
更新 多次讀寫 一次寫入多次讀取
結構 靜態模式 動態模式
整合度
伸縮性 非線性 線性

那麼問題來了???      

為什麼不能使用關係型資料庫加上更多的磁碟來做大規模的批量分析?為什麼需要MapReduce?

這個問題的答案來源於磁碟驅動器的另一個發展趨勢:定址時間的提高速度遠遠慢與傳輸速率的提高速度

如果資料的訪問模式受限於磁碟的定址,勢必會導致它花更長時間來讀或者寫大部分資料;

另一方面,在更新一小部分資料庫記錄的時候,傳統的B樹效果很好。但是在更新大部分資料庫資料時,B樹的效率就沒有就沒有

MapReduce的效率高,因為它需要使用排序/合併來重建資料庫

 

在許多情況下,MapReduce被視為一種關係型資料庫管理系統的補充。MapReduce很適合處理那些需要分析整個資料集的問題,

以批處理的方式,尤其是自主或者及時分析。RDBMS 適用於點查詢和更新(其中,資料集已經被索引以提供低延遲的檢索和短時

間的少量資料更新).MapReduce適合資料寫入和多次讀取的應用,而關係型資料庫更適合持續更新的資料集。

 

MapReduce和關係型資料庫之間的另一個區別是它們操作得資料集中的結構化資料的數量。結構化資料擁有準確定義的實體化數

據,具有XML文件或者資料庫表定義的格式,格式特定的預定義模式。這就是RDBMS包括的內容。另一方面,半結構化資料比較

寬鬆,雖然可能有模式,但經常被忽略,所以只能用作資料結構指南。非結構化資料沒有特別的內部結構,例如純文字或者影象數

據。MapReduce 對於非結構化或者半結構化資料非常有效,因為它被設計為處理時內直譯器。換句話說:MapReduce輸入的鍵值

和值並不是資料固有的屬性,它們是由分析資料的人來選擇的。

 

關係型資料往往是規範的,以保持其完整性和冗餘性。WEB伺服器日誌時記錄集的一個很好的非規範化例子(例如,客戶端主機每次

都以全名來指定,即使同一客戶端可能會出現很多次),這也是MapReduce非常適用於分析各種日誌檔案的原因之一了。

 

MapReduce 是一個線性可伸縮的程式設計模型。程式猿編寫兩個函式——map函式和reduce函式——每個都定義一個鍵/值對對映到另一

個。這些函式無視資料的大小或者他們正在使用的叢集特徵,這樣就可以原封不動的應用到小規模資料集或者大的資料集上。更重要

的是,如果放如兩倍的資料量,執行時間會少於兩倍。