天天看點

雲計算讀書筆記(五)

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有三種運作模式:單機模式,僞分布式模式和完全分布式模式。

在調試階段使用單機模式

檢視并且運作示例

檢視到的結果如下:

繼續閱讀