OutputFormat
- OutputFormat是MapReduce輸出的基類,所有實現MapReduce輸出都實現了OutputFormat介面
- 幾種常見的OutputFormat實現類:NullOutputFormat、MapFileOutputFormat、TextOutputFormat等
自定義OutputFormat
- 應用場景:輸出資料到MySQL/HBase/Elasticsearch等儲存框架中
- 步驟:自定義一個類繼承FileOutputFormat —> 改寫RecordWriter,具體改寫輸出資料的方法write()
資料壓縮
一、概述
- 優點:減少磁碟IO和儲存空間
- 缺點:增加CPU開銷
- 壓縮原則:運算密集型的作業少用壓縮;IO密集型的作業多用壓縮
二、MR支援的壓縮編碼
壓縮格式 | 是否Hadoop自帶 | 演算法 | 副檔名 | 是否可切片 | 換成壓縮格式後,原來的程式是否需要修改 | 優點 | 缺點 |
---|---|---|---|---|---|---|---|
DEFLATE | 是,直接使用 | DEFLATE | .deflate | 否 | 和文字處理一樣,不需要修改 | ||
Gzip | 是,直接使用 | DEFLATE | .gz | 否 | 和文字處理一樣,不需要修改 | 壓縮率比較高 | 不支援Split;壓縮/解壓速度一般 |
bzip2 | 是,直接使用 | bzip2 | .bz2 | 是 | 和文字處理一樣,不需要修改 | 壓縮率高;支援Split | 壓縮/解壓速度慢 |
LZO | 否,需要安裝 | LZO | .lzo | 是 | 需要建索引,還需要指定輸入格式 | 壓縮/解壓速度比較快;支援Split | 壓縮率一般;想支援切片需要額外建立索引 |
Snappy | 是,直接使用 | Snappy | .Snappy | 否 | 和文字處理一樣,不需要修改 | 壓縮和解壓縮速度快 | 不支援Split;壓縮率一般 |
- 壓縮方式選擇時重點考慮:壓縮/解壓縮速度、壓縮率(壓縮後儲存大小)、壓縮後是否可以支援切片
- 壓縮可以在MapReduce作用的任意階段啟用