Hadoop 編程
MapReduce - 編程
處理
select:直接分析輸入數據,取出需要的字段數據即可
where: 也是對輸入數據處理的過程中進行處理,判斷是否需要該數據
aggregation:min, max, sum
group by: 通過Reducer實現
sort
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
輸入文件從HDFS進行讀取.
輸出文件會存入本地磁盤.
Reducer和Mapper間的網絡I/O,從Mapper節點得到Reducer的檢索文件.
使用Reducer實例從本地磁盤迴讀數據.
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找一塊該數據的完整備份進行恢復,不能恢復才報錯