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:提供高呑吐量的Distributed File System,是GFS的開源實現
6)Hive:提供資料摘要和查詢功能鍵的資料倉儲
7)MapReduce:大型資料的分散式處理模型
8)Pig:是在MapReduce上構建的一種進階的資料流語言
9)ZooKeeper:用於解決分布式系統中的一致性問題,是Chubby的開源實現
除了開源以外,hadoop還有很多優點:
1)可擴充
2)經濟
3)可靠
4)高效
Distributed File SystemHDFS
設計前提和目標:
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:HadoopDistributed File System(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檔案
開啟
# The java implementation to use. Required.# export JAVA_HOME=/usr/lib/j2sdk1.5-sunexport JAVA_HOME=/opt/jdk1.6.0_27# Extra Java CLASSPATH elements. Optional.# export HADOOP_CLASSPATH=
安裝步驟:
hadoop有三種運行模式:單機模式,偽分布式模式和完全分布式模式。
在調試階段使用單機模式
查看並且運行樣本
bin/hadoop jar hadoop-0.20.2-examples.jar wordcount input outputcat output/*
查看到的結果如下:
[root@LinuxServer hadoop-0.20.2]# cat output/*hadoop 1hello 2world 1