大数据开发--hadoop压缩 lzo测试

摘要:

  lzo并不是linux系统原生支持,所以需要下载安装软件包。这里至少需要安装3个软件包:lzo, lzop, hadoop-gpl-packaging。gpl-packaging的作用主要是对压缩的lzo文件创建索引,否则的话,无论压缩文件是否大于hdfs的block大小,都只会按照默认启动2个map操作。

一、安装lzop native library

 > wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
 > tar -zxvf lzo-2.06.tar.gz
 >  cd lzo-2.06
 >  export CFLAGS=-m64
 > ./configure -enable-shared -prefix=/usr/local/hadoop/lzo/
 > make && sudo make install

编译完lzo包之后,会在/usr/local/hadoop/lzo/生成一些文件。
将/usr/local/hadoop/lzo目录下的所有文件打包,并同步到集群中的所有机器上。

在编译lzo包的时候,需要一些环境,可以用下面的命令安装好lzo编译环境

yum -y install  lzo-devel  zlib-devel  gcc autoconf automake libtool

二、安装hadoop-lzo

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

解压后的文件夹名为hadoop-lzo-master。

hadoop-lzo中的pom.xml依赖了hadoop2.1.0-beta,由于我们这里用到的是Hadoop 2.6.0,所以建议将hadoop版本修改为2.6.0:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hadoop.current.version>2.6.0</hadoop.current.version>
    <hadoop.old.version>1.0.4</hadoop.old.version>
</properties>

然后进入hadoop-lzo-master目录,依次执行下面的命令

# export CFLAGS=-m64

# export CXXFLAGS=-m64

# export C_INCLUDE_PATH=/usr/local/hadoop/lzo/include

# export LIBRARY_PATH=/usr/local/hadoop/lzo/lib

# mvn clean package -Dmaven.test.skip=true

# cd target/native/Linux-amd64-64

# tar -cBf - -C lib . | tar -xBvf - -C ~

# cp ~/libgplcompression* $HADOOP_HOME/lib/native/

# cp target/hadoop-lzo-0.4.18-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common/

其实在tar -cBf – -C lib . | tar -xBvf – -C ~命令之后,会在~目录下生成一下几个文件:

 # ls -l
-rw-r--r--  1 libgplcompression.a
-rw-r--r--  1 libgplcompression.la
lrwxrwxrwx  1 libgplcompression.so -> libgplcompression.so.0.0.0
lrwxrwxrwx  1 libgplcompression.so.0 -> libgplcompression.so.0.0.0
-rwxr-xr-x  1 libgplcompression.so.0.0.0

其中libgplcompression.so和libgplcompression.so.0是链接文件,指向libgplcompression.so.0.0.0,将刚刚生成的libgplcompression*和target/hadoop-lzo-0.4.18-SNAPSHOT.jar同步到集群中的所有机器对应的目录。

三、配置hadoop环境变量
1、在Hadoop中的$HADOOP_HOME/etc/hadoop/hadoop-env.sh加上下面配置:

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

2、在$HADOOP_HOME/etc/hadoop/core-site.xml加上如下配置:

<property>
    <name>io.compression.codecs</name>
    <value>org.apache.hadoop.io.compress.GzipCodec,
           org.apache.hadoop.io.compress.DefaultCodec,
           com.hadoop.compression.lzo.LzoCodec,
           com.hadoop.compression.lzo.LzopCodec,
           org.apache.hadoop.io.compress.BZip2Codec
        </value>
</property>

<property>
    <name>io.compression.codec.lzo.class</name>
    <value>com.hadoop.compression.lzo.LzoCodec</value>

</property>

3、在$HADOOP_HOME/etc/hadoop/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>

将刚刚修改的配置文件全部同步到集群的所有机器上,并重启Hadoop集群,这样就可以在Hadoop中使用lzo。

四、lzop的安装

  lzop是lzo压缩解压的工具,你可以使用lzop file 来压缩文件成lzo文件,也可以使用lzop -d file.lzo来解压lzo文件

# wget www.lzop.org/download/lzop-1.04.tar.gz
# tar zxf lzop-1.04.tar.gz
# cd lzop-1.04
# /configure
# make && make install

然后查看版本信息,是否安装正确。

lzop -V

五、用wordcount验证lzo
默认情况下,lzo是不支持分片的。即不管单个数据文件有多大,都只有一个map去执行任务。这样满足不了分布式计算的需求。要支持分片,需要先将数据文件进行索引操作。

hadoop jar hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.LzoIndexer /user/hadoop/wc/input/result.txt.lzo

执行完毕后,我们可以在HDFS目录上看见多了一个索引文件

[hadoop@hadoop001 app]$ hadoop fs -ls /user/hadoop/wc/input
Found 2 items
-rw-r--r--   1 hadoop supergroup  778853259 2018-12-11 09:20 /user/hadoop/wc/input/result.txt.lzo
-rw-r--r--   1 hadoop supergroup      26328 2018-12-11 09:22 /user/hadoop/wc/input/result.txt.lzo.index
[hadoop@hadoop001 app]$ 

然后我们执行Hadoop自带的wc程序测试

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount  -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat   /user/hadoop/wc/input  /user/hadoop/wc/output

测试完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值