hadoop 支援 LZO 壓縮配置
阿新 • • 發佈:2021-08-01
1)hadoop 本身並不支援 lzo 壓縮,故需要使用 twitter 提供的 hadoop-lzo 開源元件。hadoop
lzo 需依賴 hadoop 和 lzo 進行編譯,編譯步驟如下。
編譯參照:
https://www.cnblogs.com/allthewayforward/p/11131218.html
2)將編譯好後的 hadoop-lzo-0.4.20.jar 放入 hadoop-3.1.3/share/hadoop/common/
3)同步 hadoop-lzo-0.4.20.jar 到 hadoop103、hadoop104
xsync hadoop-lzo-0.4.20.jar
4)core-site.xml 增加配置支援 LZO 壓縮
<configuration> <property> <name>io.compression.codecs</name> <value> org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.SnappyCodec, com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec5)同步 core-site.xml 到 hadoop103、hadoop104 xsync core-site.xml 6)啟動及檢視叢集 [atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh [atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh 7) 安裝成功後進行測試</value> </property> <property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property> </configuration>
在命令列中使用lzo 壓縮,相關引數可以到官網查詢:
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=
com.hadoop.compression.lzo.LzoCodec /input /output111
LZO建立索引
1)建立LZO檔案的索引,LZO壓縮檔案的可切片特性依賴於其索引,故我們需要手動為LZO壓縮檔案建立索引。若無索引,則LZO檔案的切片只有一個。
hadoop jar /path/to/your/hadoop-lzo.jar com.hadoop.compression.lzo.DistributedLzoIndexer big_file.lzo
2)測試
(1)將bigtable.lzo(200M)上傳到叢集的根目錄
(2)執行wordcount程式
hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /input /output1
(3)對上傳的LZO檔案建索引
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/bigtable.lzo
(4)再次執行WordCount程式
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /input /output2
3)注意:如果以上任務,在執行過程中報如下異常
Container [pid=8468,containerID=container_1594198338753_0001_01_000002] is running 318740992B beyond the 'VIRTUAL' memory limit. Current usage: 111.5 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1594198338753_0001_01_000002 :
解決辦法:在hadoop102的/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml檔案中增加如下配置,然後分發到hadoop103、hadoop104伺服器上,並重新啟動叢集。
<!--是否啟動一個執行緒檢查每個任務正使用的實體記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!--是否啟動一個執行緒檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>