Hadoop支持LZO
环境准备:配置环境变量,修改sitting.xml添加阿里云镜像
通过yum安装即可,直接梭哈
yum -y install lzo-devel zlib-devel gcc autoconf automake libtool
下载、安装并编译LZO
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -zxvf lzo-2.10.tar.gz
创建/usr/local/hadoop/lzo/complie/
需要root权限:su root
./configure -prefix=/usr/local/hadoop/lzo/complie/
make && make install
切换自己的用户:su erdong
安装Hadoop-lzo
wget https://github.com/twitter/hadoop-lzo/archive/master.zip
unzip master.zip
解压之后,进入到hadoop-lzo-master中修改pom.xml文件,让其对应Hadoop版本
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hadoop.current.version>3.1.3</hadoop.current.version> // 一定要跟自己安装用的hadoop版本一致,不然凉凉
<hadoop.old.version>1.0.4</hadoop.old.version>
</properties>
声明两个临时环境变量
export C_INCLUDE_PATH=/usr/local/hadoop/lzo/complie/include/
export LIBRARY_PATH=/usr/local/hadoop/lzo/complie/lib/
编译
进入hadoop-lzo-master,执行maven编译命令
mvn package -Dmaven.test.skip=true
进入target,hadoop-lzo-0.4.21-SNAPSHOT.jar 即编译成功的hadoop-lzo组件
把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
接下来修改配置文件
再Hadoop的etc/hadoop/hadoop-env.sh中添加lib包地址
export LD_LIBRARY_PATH=/usr/local/hadoop/lzo/complie/lib
在core-site.xml,添加
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
在mapred-site.xml,添加
<property>
<name>mapred.child.env </name>
<value>LD_LIBRARY_PATH=/usr/local/hadoop/lzo/complie/lib</value>
</property>
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
重动过了Hadoop的,重启一下
没启动的直接启动Hadoop即可:
hdfs --daemon start namenode
hdfs --daemon start datanode
使用lzo压缩
lzop 文件名.log
使用命令:ll -lh
就会出现:文件名.log.lzo 压缩后的文件
然后-put一下.lzo大文件,进行测试一下
(这部分待验证)
实验一个文件大于128M
然后用Hadoop自带的wordcount实验一下,直接wordcount文本lzo会发现一个问题,那就是分片只有一片
查看执行日志: INFO mapreduce.JobSubmitter: number of splits:1
给文件建立索引:
hadoop jar hadoop-lzo-0.4.21-SNAPSHOT.jar com.hadoop.compression.lzo.DistributedLzoIndexer /user/erdong/文件名.log.lzo
然后运行
hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat /user/erdong/文件名.log.lzo /user/erdong/output
OK.