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.

 

posted @ 2020-07-14 00:43  Summer_二东  阅读(35)  评论(0编辑  收藏