1. 程式人生 > 其它 >hadoop 支援 LZO 壓縮配置

hadoop 支援 LZO 壓縮配置

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.LzopCodec
</value> </property> <property> <name>io.compression.codec.lzo.class</name> <value>com.hadoop.compression.lzo.LzoCodec</value> </property> </configuration>
5)同步 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) 安裝成功後進行測試

在命令列中使用lzo 壓縮,相關引數可以到官網查詢:

https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

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.lzo200M)上傳到叢集的根目錄

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檔案中增加如下配置,然後分發到hadoop103hadoop104伺服器上,並重新啟動叢集。

<!--是否啟動一個執行緒檢查每個任務正使用的實體記憶體量,如果任務超出分配值,則直接將其殺掉,預設是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>