Hadoop:Google雲計算的開源實作
Hadoop是Apache開源組織的一個分布式計算機架構,可以在大量廉價的硬體裝置組成的叢集上運作應用程式,為應用程式提供一組穩定可靠的接口,旨在建構一個具有高可靠性和良好擴充性的分布式系統。
Hadoop的核心是HDFS,MapReduce和HBase,它們分别對應Google的雲計算GFS,MapReduce和Bigtable。
Hadoop主要由以下幾個子項目組成:
1)Hadoop Common:原來的Hadoop Core,這是整個Hadoop項目的核心
2)Avro:Hadoop的RPC方案
3)Vhukwa:一個用來管理大型分布式系統的資料采集系統
4)HBase:支援結構化資料存儲的分布式資料庫,是Bigtable的開源實作
5)HDFS:提供高呑吐量的分布式檔案系統,是GFS的開源實作
6)Hive:提供資料摘要和查詢功能鍵的資料倉庫
7)MapReduce:大型資料的分布式處理模型
8)Pig:是在MapReduce上建構的一種進階的資料流語言
9)ZooKeeper:用于解決分布式系統中的一緻性問題,是Chubby的開源實作
除了開源以外,hadoop還有很多優點:
1)可擴充
2)經濟
3)可靠
4)高效
分布式檔案系統HDFS
設計前提和目标:
1)處理硬體錯誤并快速自動恢複
2)流式的資料通路,應用程式以流式讀為主,做批量處理,更注重資料通路的高吞吐量
3)超大規模資料集,支援大檔案存儲,一個單一的HDFS執行個體能夠支撐數以千萬計的檔案,并且能在一個叢集裡擴充到數百個節點
4)簡單一緻性模型,應用程式一般對檔案實行一次性寫,多次讀的通路模式
5)移動計算比移動資料更簡單
6)異構軟硬體平台間的可移植性
體系結構:
HDFS是一個主從結構的體系,HDFS叢集有一個NameNode和很多個DataNode組成的。
NameNode管理檔案系統的中繼資料,DataNode存儲實際的資料。用戶端聯系NameNode以擷取檔案的中繼資料,而真正的檔案I/O操作是直接和DataNode進行互動的。
HDFS的資料都是一次寫入多次讀取,典型的塊大小是64MB
用戶端從NameNode獲得組成檔案的資料塊的位置清單,也就是知道資料塊被存儲在哪些DataNode上,然後用戶端直接從DataNode上讀取檔案,NameNode不參與檔案的傳輸
NameNode使用事件日志記錄HDFS中繼資料的變化,使用映像檔案存儲檔案系統的命名空間
保障可靠性措施:
1)備援備份
2)副本存放
3)心跳檢測,每個DataNode定期接受心跳包和塊報告,收到心跳包說明該DataNode工作正常
4)安全模式,在系統啟動時會進入一個安全模式,此時不會出現資料塊的寫操作
5)資料完整性檢測,在HDFS檔案建立時,計算每個資料塊和校驗和,并将校驗和作為一個單獨的隐藏檔案儲存在命名空間下。用戶端擷取檔案時會做對應的校驗檢查,如果不同則用戶端認為資料塊有損壞,将從其它的DataNode擷取資料塊的副本
6)空間回收,當檔案被删除時,會先被移到/trash目錄裡,隻要還在這個目錄裡就可以很快恢複,目錄的清空時間是可配置的
7)中繼資料磁盤失效,映像檔案和事務日志是HDFS的核心資料結構
8)快照,快照支援某個時間的資料複制,當HDFS資料損壞時,可以復原到過去一個已知正确的時間點。
提升性能的措施:
1)副本選擇
2)負載均衡
3)用戶端緩存
4)流水線複制
通路接口:
可以通過Java API,也可以使用C語言封裝的API
1)org.apache.hadoop.conf:定義了系統參數的配置檔案處理API
2)org.apache.hadoop.dfs:Hadoop分布式檔案系統(HDFS)子產品的實作
3)org.apache.hadoop.fs:定義了抽象的檔案系統API
4)org.apache.hadoop.io:定義了通用的I/O API,用于針對網絡,資料庫,檔案等資料對象做讀/寫操作
5)org.apache.hadoop.ipc:用于網絡服務端和用戶端的工具,封裝了網絡異步I/O的基礎子產品
6)org.apache.hadoop.mapred:Hadoop分布式計算系統(MapReduce)子產品的實作
7)org.apache.hadoop.metrics:定義了用于性能統計資訊的API,主要用于mapred和dfs子產品
8)org.apache.hadoop.record:定義了針對記錄的I/O API類及一個記錄描述語言的翻譯器
9)org.apache.hadoop.tools:定義了一些通用的工具
10)org.apache.hadoop.util:定義了一些公用的API
分布式資料處理MapReduce
MapReduce是一種分布式的計算機模型,也是Hadoop的核心
邏輯模型:
将運作在大規模叢集上的并行計算過程抽象為兩個函數:Map和Reduce,也就是映射和化簡
簡單說MapReduce就是任務的分解與結果的彙總,Map把任務分解為多個任務,Reduce把分解後的結果彙總起來,得到最終結果
實作機制:
1,分布式并行計算,MapReduce架構由JobTracker和TaskTracker這兩類服務排程的。JobTracker是主要服務,隻有一個,負責排程和管理TaskTracker
2,本地計算
3,任務粒度,有利于資料的本地性,一個小資料集啟動一個Map服務,M個Map任務可以在N台計算機上并行運作,使用者可以指定Reduce任務的數量
4,Combine
5,分區,經過連接配接後可以把産生的中間結果按key的範圍劃分為R份
6,讀取中間結果
7,任務管道
分布式資料化資料表HBase
HBase資料庫是基于hadoop的項目,是針對Google的Bigtable的開源實作,它與Google的Bigtable相似
使用者在表格裡存儲一系列的資料行,每行包含一個可排序的關鍵字,一個可選的時間戳及一些可能有資料的列
Hadoop的安裝
可以使用虛拟機進行模拟,如果機器上沒有安裝SSH,安裝SSH
配置安裝JDK,詳細步驟網上很多不一一操作了
到apache的hadoop網站上下載下傳hadoop-0.20.2.tar.gz
使用ftp傳到相應的伺服器上,如果是虛拟機可以到共享檔案夾下選擇
複制到linux下的usr目錄
tar -zxvf hadoop-0.20.2.tar.gz
解壓後使用vi找到conf/hadoop-env.sh檔案
打開
安裝步驟:
hadoop有三種運作模式:單機模式,僞分布式模式和完全分布式模式。
在調試階段使用單機模式
檢視并且運作示例
檢視到的結果如下: