当前位置:   article > 正文

Hadoop(2.6.0-cdh5.15.1)配置lzo压缩_hadoop-lzo包

hadoop-lzo包

Hadoop经常用于处理大量的数据,如果期间的输出数据、中间数据能压缩存储,对系统的I/O性能会有提升。综合考虑压缩、解压速度、是否支持split,目前lzo是最好的选择。LZO(LZO是Lempel-Ziv-Oberhumer的缩写)是一种高压缩比和解压速度极快的编码,它的特点是解压缩速度非常快,无损压缩,压缩后的数据能准确还原,lzo是基于block分块的,允许数据被分解成chunk,能够被并行的解压。LZO库实现了许多有下述特点的算法:
  (1)、解压简单,速度非常快。
  (2)、解压不需要内存。
  (3)、压缩相当地快。
  (4)、压缩需要64 kB的内存。
  (5)、允许在压缩部分以损失压缩速度为代价提高压缩率,解压速度不会降低。
  (6)、包括生成预先压缩数据的压缩级别,这样可以得到相当有竞争力的压缩比。
  (7)、另外还有一个只需要8 kB内存的压缩级别。
  (8)、算法是线程安全的。
  (9)、算法是无损的。
一、安装lzop native library
1.在编译lzo包的时候,需要一些环境,可以用下面的命令安装好lzo编译环境
[root@hadoop000 ~]# yum -y install  lzo-devel  zlib-devel  gcc autoconf automake libtool
2.下载、解压并编译lzo包

  1. [root@hadoop000 local]#wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
  2. [root@hadoop000 local]#tar -zxvf lzo-2.06.tar.gz
  3. [root@hadoop000 local]#cd lzo-2.06
  4. [root@hadoop000 local]#export CFLAGS=-m64
  5. [root@hadoop000 local]#./configure -enable-shared -prefix=/usr/local/hadoop-2.9.1/lzo/
  6. [root@hadoop000 local]#make && sudo make install

二、修改Hadoop配置
进入配置文件目录
[hadoop@hadoop000 hadoop]$ cd etc/hadoop
[hadoop@hadoop000 hadoop]$ vim hadoop-env.sh 

export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib

[hadoop@hadoop000 hadoop]$ vim core-site.xml 

  1. <property>
  2. <name>io.compression.codecs</name>
  3. <value>org.apache.hadoop.io.compress.GzipCodec,
  4. org.apache.hadoop.io.compress.DefaultCodec,
  5. com.hadoop.compression.lzo.LzoCodec,
  6. com.hadoop.compression.lzo.LzopCodec,
  7. org.apache.hadoop.io.compress.BZip2Codec
  8. </value>
  9. </property>
  10. <property>
  11. <name>io.compression.codec.lzo.class</name>
  12. <value>com.hadoop.compression.lzo.LzoCodec</value>
  13. </property>

[hadoop@hadoop000 hadoop]$ vim mapred-site.xml

  1. <property>
  2. <name>mapred.compress.map.output</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>mapred.map.output.compression.codec</name>
  7. <value>com.hadoop.compression.lzo.LzoCodec</value>
  8. </property>
  9. <property>
  10. <name>mapred.child.env</name>
  11. <value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value>
  12. </property>

三、安装hadoop-lzo
下载hadoop-lzo
[root@hadoop000~]#wget https://github.com/twitter/hadoop-lzo/archive/master.zip
解压文件
[root@hadoop000~]#unzip master.zip
进入目录
[root@hadoop000~]# cd hadoop-lzo-master/
查看Hadoop的版本

  1. [hadoop@hadoop000 bin]$ ./hadoop version
  2. Hadoop 2.6.0-cdh5.15.1
  3. Subversion http://github.com/cloudera/hadoop -r 2d822203265a2827554b84cbb46c69b86ccca149
  4. Compiled by jenkins on 2018-08-09T16:23Z
  5. Compiled with protoc 2.5.0
  6. From source with checksum 96bc735f7d923171f18968309fa3c477
  7. This command was run using /home/hadoop/app/hadoop-2.6.0-cdh5.15.1/share/hadoop/common/hadoop-common-2.6.0-cdh5.15.1.jar

编辑pom.xml中的hadoop版本号跟集群中使用的版本号一致

  1. <repository>
  2. <id>cloudera</id>
  3. <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
  4. </repository>
  5. <properties>
  6. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  7. <hadoop.current.version>2.6.0-cdh5.15.1</hadoop.current.version>
  8. <hadoop.old.version>1.0.4</hadoop.old.version>
  9. </properties>

开始编译
mvn clean package -Dmaven.test.skip=true

  1. Generating /home/hadoop/software/hadoop-lzo-master/target/apidocs/allclasses-noframe.html...
  2. Generating /home/hadoop/software/hadoop-lzo-master/target/apidocs/index.html...
  3. Generating /home/hadoop/software/hadoop-lzo-master/target/apidocs/overview-summary.html...
  4. Generating /home/hadoop/software/hadoop-lzo-master/target/apidocs/help-doc.html...
  5. [INFO] Building jar: /home/hadoop/software/hadoop-lzo-master/target/hadoop-lzo-0.4.21-SNAPSHOT-javadoc.jar
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] BUILD SUCCESS
  8. [INFO] ------------------------------------------------------------------------
  9. [INFO] Total time: 01:27 h
  10. [INFO] Finished at: 2019-10-06T23:37:29+08:00
  11. [INFO] ------------------------------------------------------------------------

编译成功后执行如下命令
cd target/native/Linux-amd64-64
tar -cBf - -C lib . | tar -xBvf - -C ~
cp ~/libgplcompression* $HADOOP_HOME/lib/native/

到hadoop-lzo-master下把jar包导入Hadoop中
cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/
cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/mapreduce/lib

四、检测是否配置成功

1、hive方法

  1. create table lzo(id int,name string)
  2. STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
  3. OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';

2、job日志方法
使用lzo压缩

  1. [hadoop@hadoop000 data]$ ll -h trackinfo_20191001.data
  2. -rw-r--r-- 1 hadoop hadoop 1.5G Oct 7 15:23 trackinfo_20191001.data
  3. [hadoop@hadoop000 data]$ lzop trackinfo_20191001.data
  4. [hadoop@hadoop000 data]$ ll -h trackinfo_20191001*
  5. -rw-r--r-- 1 hadoop hadoop 1.5G Oct 7 15:23 trackinfo_20191001.data
  6. -rw-r--r-- 1 hadoop hadoop 279M Oct 7 15:23 trackinfo_20191001.data.lzo

上传到HDFS

  1. [hadoop@hadoop000 data]$ hdfs dfs -put trackinfo_20191001.data.lzo /data/lzo
  2. [hadoop@hadoop000 data]$ hdfs dfs -ls /data/lzo
  3. Found 1 items
  4. -rw-r--r-- 1 hadoop supergroup 292080918 2019-10-07 15:25 /data/lzo/trackinfo_20191001.data.lzo
  5. [hadoop@hadoop000 data]$ hdfs dfs -ls -h /data/lzo
  6. Found 1 items
  7. -rw-r--r-- 1 hadoop supergroup 278.6 M 2019-10-07 15:25 /data/lzo/trackinfo_20191001.data.lzo

在web界面查看,该数据只有一个128M的分片

执行一个wordcount

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount  /data/lzo/trackinfo_20191001.data.lzo /data/lzo/output

日志提示使用了lzo库,但是分片只有一个


给文件建立索引

hadoop jar /home/hadoop/software/hadoop-lzo-master/target/hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer  /data/lzo/trackinfo_20191001.data.lzo
  1. [hadoop@hadoop000 target]$ hdfs dfs -ls /data/lzo
  2. Found 2 items
  3. -rw-r--r-- 1 hadoop supergroup 292080918 2019-10-07 15:25 /data/lzo/trackinfo_20191001.data.lzo
  4. -rw-r--r-- 1 hadoop supergroup 47672 2019-10-07 15:48 /data/lzo/trackinfo_20191001.data.lzo.index

web页面的显示为


重新执行wordcount
注意此次的命令和上面的命令不一样,多了参数(-Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat)

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /data/lzo/trackinfo_20191001.data.lzo /data/output/lzo


文件trackinfo_20191001.data.lzo大小 278.6 M,分成3个splits,符合预期。
参考链接:
https://blog.csdn.net/weixin_43267534/article/details/84928645
https://blog.csdn.net/diyangxia/article/details/80845638

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/519982
推荐阅读
相关标签
  

闽ICP备14008679号