什么是lzo?
LZO是一个无损的数据压缩库,相比于压缩比它更加追求速度,官网地址是:http://www.oberhumer.com/opensource/lzo/,相比gzip,bzip,lzo的压缩率不高,但是压缩、解压速度都比较高。
启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3。同时压缩和解压缩的速度也比较快。
本文讲解如何在hadoop集群中配置lzo,并在spark中启动lzo
本文测试使用的软件版本是:Centos 7.7、HDP 3.1.5、Spark 2.4、Lzo使用最新版0.4.21
如何安装配置lzo?
安装lzop
curl -O http://www.lzop.org/download/lzop-1.03.tar.gz
tar xzvf lzop-1.03.tar.gz
cd lzop-1.03/
./configure
make
make install
ln -s /usr/local/bin/lzop /usr/bin/lzop
#测试
lzop -V
lzop -h
安装lzo
curl -O http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
tar -zxvf lzo-2.10.tar.gz
cd lzo-2.10
export CFLAGS=-m64
./configure -enable-shared
make
make install
#配置
vim /etc/ld.so.conf.d/lzo.conf
# 添加如下内容
/usr/local/lib
#使以上配置生效
/sbin/ldconfig -v
#删除安装包
rm -rf lzo-2.10 lzo-2.10.tar.gz
hadoop-lzo的编译&打包
curl -O https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
tar -zxvf apache-maven-3.8.5-bin.tar.gz
mv apache-maven-3.8.5 maven
# 下载 https://github.com/twitter/hadoop-lzo 的master
unzip hadoop-lzo-master.zip
cd hadoop-lzo-master/
# 编译 & 打包
export CFLAGS=-m64
export CXXFLAGS=-m64
export C_INCLUDE_PATH=/usr/local/include/lzo
export LIBRARY_PATH=/usr/local/lib
../maven/bin/mvn clean package -Dmaven.test.skip=true
export HADOOP_HOME=/usr/hdp/3.1.5.0-152/hadoop
cp target/native/Linux-amd64-64/lib/* $HADOOP_HOME/lib/native/
cp target/hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME
修改Hadoop配置
在hadoop的core-site.xml文件中增加如下lzo相关配置:
<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>
以上是针对单台机器的操作,如果是集群,则还需要做如下步骤:
- 将hadoop下新加入的so文件、jar包,还有修改的core-site.xml分发给集群其他节点
- 重启hadoop集群
Spark下启用LZO
修改配置文件
修改spark配置文件spark-defaults.conf
vim spark-defaults.conf
#增加如下配置,$HADOOP_HOME可以改为自己的hadoop路径
spark.driver.extraClassPath $HADOOP_HOME/hadoop-lzo-0.4.21-SNAPSHOT.jar
spark.executor.extraClassPath $HADOOP_HOME/hadoop-lzo-0.4.21-SNAPSHOT.jar
修改spark-env.sh
vim spark-env.sh
#增加如下配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_CLASSPATH=/usr/hdp/current/tez-client:/usr/hdp/current/tez-client/lib:/usr/hdp/current/hive-client/lib:$SPARK_CLASSPATH
HADOOP_CONF_DIR=/etc/hadoop/conf
SPARK_MASTER_WEBUI_PORT=9090
export JAVA_HOME=/usr/java/jdk1.8.0_60
export HIVE_HOME=/usr/hdp/current/hive-client/bin
export SPARK_HISTORY_OPTS="-Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs:///spark2.4-history"
export HDP_VERSION=2.6.2.14-5
分发重启Spark
如果是spark集群,则需要分发以上的hadoop-lzo-0.4.21-SNAPSHOT.jar及配置。