Hadoop 編程&Hadoop IO

Hadoop 編程

MapReduce - 編程

處理

  1. select:直接分析輸入數據,取出需要的字段數據即可

  2. where: 也是對輸入數據處理的過程中進行處理,判斷是否需要該數據

  3. aggregation:min, max, sum

  4. group by: 通過Reducer實現

  5. sort

  6. join: map join, reduce join

Third-Party Libraries

export LIBJARS=$MYLIB/commons-lang-2.3.jar, hadoop jar prohadoop-0.0.1-SNAPSHOT.jar org.aspress.prohadoop.c3. WordCountUsingToolRunner -libjars $LIBJARS
hadoop jar prohadoop-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.aspress.prohadoop.c3. WordCountUsingToolRunner The dependent libraries are now included inside the application JAR file

一般還是上面的好,指定依賴可以利用Public Cache,如果是包含依賴,則每次都需要拷貝

Hadoop IO

Hadoop - IO

  1. 輸入文件從HDFS進行讀取.

  2. 輸出文件會存入本地磁盤.

  3. Reducer和Mapper間的網絡I/O,從Mapper節點得到Reducer的檢索文件.

  4. 使用Reducer實例從本地磁盤迴讀數據.

  5. Reducer輸出- 回傳到HDFS.

串行化

傳輸、存儲都需要

Writable接口

Avro框架:IDL,版本支持,跨語言,JSON-linke

壓縮

能夠減少磁盤的佔用空間和網絡傳輸的量

Compressed Size, Speed, Splittable

gzip, bzip2, LZO, LZ4, Snappy

要比較各種壓縮算法的壓縮比和性能

重點:壓縮和拆分一般是衝突的(壓縮後的文件的block是不能很好地拆分獨立運行,很多時候某個文件的拆分點是被拆分到兩個壓縮文件中,這時Map任務就無法處理,所以對於這些壓縮,Hadoop往往是直接使用一個Map任務處理整個文件的分析)

Map的輸出結果也可以進行壓縮,這樣可以減少Map結果到Reduce的傳輸的數據量,加快傳輸速率

完整性

磁盤和網絡很容易出錯,保證數據傳輸的完整性一般是通過CRC32這種校驗法

每次寫數據到磁盤前都驗證一下,同時保存校驗碼

每次讀取數據時,也驗證校驗碼,避免磁盤問題

同時每個datanode都會定時檢查每一個block的完整性

當發現某個block數據有問題時,也不是立刻報錯,而是先去Namenode找一塊該數據的完整備份進行恢復,不能恢復才報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章