flume消费kafka数据到hdfs 报错 native-lzo library not available 解决方案
说明
针对课程环境搭建的机器
我用flume消费kafka数据到hdfs的时候,并没有成功,在hdfs上是一些大小为0的.lzo.tmp文件,我通过 tail -f /opt/module/flume/log.txt 观察消费flume(hadoop104)的日志后,发现 报的是这个 "native-lzo library not available"错误,也就是没有配置好lzo解压缩格式的问题。
下载的安装包一律放在 /opt/software/ 目录下
1.验证安装环境(以root账户执行):
su root
yum -y install lzo-devel zlib-devel gcc autoconf automake libtool
2.安装LZO (以下以atguigu用户执行)
su atguigu
cd /opt/software
tar -zxvf lzo-2.06.tar.gz -C /opt/module/
cd /opt/module
xsync lzo-2.06 # 将安装包分发到其他机器上 xsync是脚本
接下来几行 每台机器都照做
cd /opt/module/lzo-2.06/
./configure -enable-shared -prefix=/opt/module/hadoop-2.7.2/lzo/
make && make test && make install
3.安装LZOP
cd /opt/software
tar -zxvf lzop-1.03.tar.gz -C /opt/module/
cd /opt/module
xsync lzop-1.03 # 将安装包分发到其他机器上 xsync是脚本
接下来几行 每台机器都照做
cd /opt/module/lzop-1.03
./configure -enable-shared -prefix=/opt/module/hadoop-2.7.2/lzop/
make && make install
4.把lzop复制到/usr/bin/(所有机器都照做)
ln -s /opt/module/hadoop-2.7.2/lzop/bin/lzop /usr/bin/lzop
5.将 hadoop-lzo-0.4.20放到 每个机器的 /opt/module/hadoop-2.7.2/share/hadoop/common/ 目录下
6.修改各个hadoop节点的hadoop的配置文件:
cd /opt/module/hadoop-2.7.2/etc/hadoop
vi hadoop-env.sh
6.1 在 hadoop-env.sh 末尾添加以下配置
# Extra Java CLASSPATH elements. Optional.
export HADOOP_CLASSPATH="<extra_entries>:$HADOOP_CLASSPATH:${HADOOP_HOME}/share/hadoop/common"
#export JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/opt/module/hadoop-2.7.2/lib/native:/opt/glibc-2.14/lib
export JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:/opt/module/hadoop-2.7.2/lib/native
6.2 在 core-site.xml <-configuration-> 中添加以下配置
vi 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>
6.3 在 mapred-site.xml <-configuration-> 中添加以下配置
vi 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>mapreduce.map.env</name>
<value>LD_LIBRARY_PATH=/opt/module/hadoop-2.7.2/lzo/lib</value>
</property>
<property>
<name >mapreduce.reduce.env</name>
<value>LD_LIBRARY_PATH=/opt/module/hadoop-2.7.2/lzo/lib</value>
</property>
<property>
<name>mapred.child.env</name>
<value>LD_LIBRARY_PATH=/opt/module/hadoop-2.7.2/lzo/lib</value>
</property>
结尾
不带.lzo的是之前测试时,不以lzo压缩的结果
带.lzo的便是lzo压缩格式的结果