Hadoop支持lzo压缩(版本cdh5.15.1)

Hadoop 专栏收录该内容
19 篇文章 0 订阅

参考文章:
https://www.iteblog.com/archives/992.html
https://blog.csdn.net/muyingmiao/article/details/102259663
https://programmer.group/using-lzo-compression-and-supporting-slicing-for-hadoop.html

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)、算法是无损的。

一 安装lzo相关依赖

[root@JD ~]# yum install -y svn ncurses-devel
[root@JD ~]# yum install -y gcc gcc-c++ make cmake
[root@JD ~]# yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool 
[root@JD ~]# yum install -y lzo lzo-devel lzop autoconf automake cmake

二 编译lzo

[hadoop@JD ~]$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
[hadoop@JD ~]$ tar -zxvf lzo-2.06.tar.gz
[hadoop@JD ~]$ cd lzo-2.06
[hadoop@JD ~]$ export CFLAGS=-m64
[hadoop@JD ~]$ mkdir compile
[hadoop@JD ~]$ ./configure -enable-shared -prefix=/home/hadoop/app/lzo-2.06/compile
[hadoop@JD ~]$ make &&  make install

三 编译Hadoop-lzo

下载源码

wget https://github.com/twitter/hadoop-lzo/archive/master.zip

解压

[hadoop@JD software]$ unzip -d ~/app/ hadoop-lzo-master.zip

进入解压后的目录

[hadoop@JD app]$ cd hadoop-lzo-master/
[hadoop@JD hadoop-lzo-master]$ 

修改此目录下pom.xml文件

<repositories>
	#添加cloudera仓库
    <repository>
     <id>cloudera</id>
     <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
    </repository>
  </repositories>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    #因为用的是cdh的
    <hadoop.current.version>2.6.0-cdh5.15.1</hadoop.current.version>
    <hadoop.old.version>1.0.4</hadoop.old.version>
</properties>

添加环境变量

[hadoop@JD hadoop-lzo-master]$ export CFLAGS=-m64
[hadoop@JD hadoop-lzo-master]$ export CXXFLAGS=-m64

#Modify the actual path for your hadoop
[hadoop@JD hadoop-lzo-master]$ export C_INCLUDE_PATH=/home/hadoop/app/lzo-2.06/compile/include
[hadoop@JD hadoop-lzo-master]$ export LIBRARY_PATH=/home/hadoop/app/lzo-2.06/compile/lib

编译源码:

mvn clean package -DskipTests

在这里插入图片描述进入target/native/Linux-amd64-64

[hadoop@JD hadoop-lzo-master]$ cd target/native/Linux-amd64-64/
[hadoop@JD Linux-amd64-64]$ mkdir ~/app/hadoop-lzo-files
[hadoop@JD Linux-amd64-64]$ tar -cBf - -C lib . | tar -xBvf - -C ~/app/hadoop-lzo-files
拷贝文件
[hadoop@hadoop-01 hadoop-lzo-files]$ cp ~/app/hadoop-lzo-files/libgplcompression* $HADOOP_HOME/lib/native/

四 修改hadoop配置

vi core-site.xml

修改core-site.xml的配置文件

    <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>

修改mapred-site.xml配置文件

    <property>
      <name>mapred.compress.map.output</name>
      <value>true</value>
    </property>
 
    <property>
        <name>mapred.map.output.compression.codec</name>
        <value>com.hadoop.compression.lzo.LzoCodec</value>
    </property>
 
    <property>
        <name>mapred.child.env</name>
        <value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/lib</value>
    </property>

五 准备数据

准备一个753M的数据
在这里插入图片描述
然后压缩此文件

lzop -f access.txt

在这里插入图片描述

六 wordcount

首先把数据上传到hdfs

hdfs dfs -put access.txt.lzo /lzo-data/input

文件如下
在这里插入图片描述
计算wordcount

hadoop jar \
/home/hadoop/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar \
wordcount \
-Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat \
/lzo-data/input/access.txt.lzo \
/lzo-data/output3

从下图可以看出,没有分片
在这里插入图片描述

七 文件添加index

hadoop jar \
/home/hadoop/app/hadoop-lzo-master/target/hadoop-lzo-0.4.21-SNAPSHOT.jar \
com.hadoop.compression.lzo.DistributedLzoIndexer  \
/lzo-data/input/access.txt.lzo

在这里插入图片描述
再次计算wordcount

hadoop jar \
/home/hadoop/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar \
wordcount \
-Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat \
/lzo-data/input/access.txt.lzo \
/lzo-data/output4

从下图,我们可以看出分成3个
在这里插入图片描述

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页

打赏作者

阿顾同学

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值