前言

  • OS:CentOS 7
  • hadoop:2.7.7
  • lzo:lzo-2.10
  • Apache Maven:3.6.0
  • JDK:1.8.0_221
  • hadoop-lzo是一个围绕lzo压缩算法实现的Maven项目,基于hadoop提供的API实现了lzo压缩算法的编解码器,以及其他的一些自定义hadoop组件,本文主要演示如何编译此Git项目,并配置到hadoop集群中,实现lzo算法在集群中的使用
  • 由于Hadoop和hadoop-lzo中目前都未集成lzo算法函数库,因此在编译hadoop-lzo项目之前需要保证lzo依赖库正确安装,参考博客:Linux之配置lzo压缩
  • 如果不想自行编译的可以直接去 mvnrepository 下载已经编译好的jar包,如:hadoop-lzo-0.4.20.jar,然后从步骤三开始配置即可

安装步骤

一、下载hadoop-lzo项目源码

hadoop-lzo项目源码地址:GitHub

hadoop-lzo压缩包下载地址: https://github.com/twitter/hadoop-lzo/archive/master.zip


二、编译源码

1)解压压缩包

unzip hadoop-lzo-master.zip -d /opt/module

2)修改pom.xml部分属性

进入hadoop-lzo解压路径下,修改pom.xml文件,找到properties标签,修改hadoop.current.version变量值,将其设置为当前hadoop版本号

cd /opt/module/hadoop-lzo-master/
vim pom.xml
  <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><hadoop.current.version>2.7.7</hadoop.current.version><!-- 此值设置为当前hadoop版本号 --><hadoop.old.version>1.0.4</hadoop.old.version></properties>

3)设置编译相关变量

# 设置lzo编译后生成的include文件夹路径
export C_INCLUDE_PATH=/opt/module/lzo-2.10-compiled/include
# 设置lzo编译后生成的lib文件夹路径
export LIBRARY_PATH=/opt/module/lzo-2.10-compiled/lib

4)编译Maven项目

mvn clean package -Dmaven.test.skip=true

三、配置Hadoop支持lzo

1)复制添加jar包

将编译生成的target文件夹下的hadoop-lzo-0.4.21-SNAPSHOT.jar文件复制到$HADOOP_HOME/share/hadoop/common路径下

cp hadoop-lzo-0.4.21-SNAPSHOT.jar $HADOOP_HOME/share/hadoop/common

PS:记得同步集群中$HADOOP_HOME/share/hadoop/common文件夹中的hadoop-lzo-0.4.21-SNAPSHOT.jar文件

2)设置读取压缩文件时使用的编解码器

修改配置文件$HADOOP_HOME/etc/hadoop/core-site.xml,在configuration标签中,添加如下配置,然后同步集群的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.DeflateCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.Lz4Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec</value><description>A comma-separated list of the compression codec classes that canbe used for compression/decompression. In addition to any classes specifiedwith this property (which take precedence), codec classes on the classpathare discovered using a Java ServiceLoader.</description></property><!-- 配置lzo编解码器相关参数 --><property><name>io.compression.codec.lzo.class</name><value>com.hadoop.compression.lzo.LzoCodec</value></property>

3)开启mapreduce压缩功能

启动mapreduce压缩功能,并设置成最终输出文件使用lzo压缩。在mapred-site.xml文件中的configuration标签中添加如下配置,然后同步集群中此配置文件:

PS:若mapreduce.output.fileoutputformat.compress.codec参数设置为com.hadoop.compression.lzo.LzoCodec,则MR输出文件为.lzo_deflate,若此参数设置为com.hadoop.compression.lzo.LzopCodec,则MR输出文件为.lzo,只有.lzo压缩文件才支持建立索引,支持建立lzo索引,进而支持压缩文件分片

    <!-- 以下是关于压缩功能的相关配置 --><!-- map输出是否压缩 --><!-- 默认值:false --><property><name>mapreduce.map.output.compress</name><value>true</value><description>Should the outputs of the maps be compressed before beingsent across the network. Uses SequenceFile compression.</description></property><!-- 设置map输出压缩所使用的对应压缩算法的编解码器,此处使用snappy压缩,如果未配置snappy则使用lzo压缩 --><!-- 默认值:org.apache.hadoop.io.compress.DefaultCodec --><property><name>mapreduce.map.output.compress.codec</name><value>org.apache.hadoop.io.compress.SnappyCodec</value><description>If the map outputs are compressed, how should they be compressed?</description></property><!-- 设置job最终输出文件是否压缩 --><!-- 默认值:false --><property><name>mapreduce.output.fileoutputformat.compress</name><value>true</value><description>Should the job outputs be compressed?</description></property><!-- 设置job最终输出文件所使用的压缩算法对应的编解码器,此处使用lzo压缩,结果文件会以lzo结尾 --><!-- 默认值:org.apache.hadoop.io.compress.DefaultCodec --><property><name>mapreduce.output.fileoutputformat.compress.codec</name><value>com.hadoop.compression.lzo.LzopCodec</value><description>If the job outputs are compressed, how should they be compressed?</description></property><!-- 设置序列文件的压缩格式,建议设置成BLOCK --><!-- 默认值:RECORD --><property><name>mapreduce.output.fileoutputformat.compress.type</name><value>BLOCK</value><description>If the job outputs are to compressed as SequenceFiles, how shouldthey be compressed? Should be one of NONE, RECORD or BLOCK.</description></property>

4)测试是否开启lzo压缩

创建文本文件 SteveJobs_speech.txt 作为wordcount程序输入文件,其中内容如下:

And that is as true for your work as it is for your lovers. Your work is going to fill a
large part of your life, and the only way to be truly satisfied is to do what you believe
is great work. And the only way to do great work is to love what you do. If you haven't
found it yet, keep looking. Don't settle. As with all matters of the heart, you'll know
when you find it. And, like any great relationship, it just gets better and better as
the years roll on. So keep looking until you find it. Don't settle.

将文本文件上传至hdfs中

hadoop fs -mkdir -p /tmp/data/input /tmp/data/output
hadoop fs -put -f SteveJobs_speech.txt /tmp/data/input

调用hadoop自带的wordcount程序

hadoop fs -rm -R /tmp/data/output/wordcount && \
hadoop jar \
/opt/module/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \
wordcount /tmp/data/input/SteveJobs_speech.txt /tmp/data/output/wordcount

观察hdfs中的输出文件,是否以lzo结尾

hadoop fs -ls /tmp/data/output/wordcount
[tomandersen@hadoop101 /]$ hadoop fs -ls /tmp/data/output/wordcount
Found 2 items
-rw-r--r--   1 tomandersen supergroup          0 2020-06-11 11:17 /tmp/data/output/wordcount/_SUCCESS
-rw-r--r--   1 tomandersen supergroup        460 2020-06-11 11:17 /tmp/data/output/wordcount/part-r-00000.lzo

若生成结果为lzo结尾的压缩文件,则表明lzo压缩算法配置成功。也可以使用lzop工具进行解压输出文件,验证其中的具体内容是否正确


四、建立文件索引,支持lzo压缩文件分片

对于lzo压缩文件,MR Job默认是不会对其进行分片的,即最小分片大小只能是hdfs-site.xml文件中设置的块大小。通过此工程中提供的Java程序能够为指定的hdfs中的lzo压缩文件建立索引,同时配合其提供的com.hadoop.mapreduce.LzoTextInputFormat(新)或com.hadoop.mapred.DeprecatedLzoTextInputFormat(旧),可以实现大型lzo压缩文件的读取时分片(默认处理压缩文件时无法分片)。

PS:只有.lzo文件支持建立索引,然后读取时分片,.lzo_deflate文件不支持建立索引。

1)针对指定lzo压缩文件,建立lzo索引文件

假设大型lzo压缩文件为/tmp/data/input/big_file.lzo,大小为1GB,则建立lzo索引命令如下:

hadoop jar \
/opt/module/hadoop-2.7.7/share/hadoop/common/hadoop-lzo-0.4.21-SNAPSHOT.jar \
com.hadoop.compression.lzo.DistributedLzoIndexer \
/tmp/data/input/big_file.lzo

运行结束后,会在相同路径下生成big_file.lzo.index文件

2)基于LzoTextInputFormat和lzo索引,实现读取lzo压缩文件时分片

此处以wordcount程序为例,在提交MR Job时,设置InputFormat为LzoTextInputFormat,实现读取文件时分片

hadoop fs -rm -R /tmp/data/output/wordcount && \
hadoop jar \
/opt/module/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar \
wordcount -Dmapreduce.job.inputformat.class=com.hadoop.mapreduce.LzoTextInputFormat \
/tmp/data/input/big_file.lzo /tmp/data/output/wordcount

End~

Hadoop配置lzo压缩相关推荐

  1. Hadoop之Lzo压缩配置

    Hadoop之Lzo压缩配置 一.hadoop-lzo编译 hadoop本身并不支持lzo压缩,故需要使用twitter提供的hadoop-lzo开源组件.hadoop-lzo需依赖hadoop和lz ...

  2. Hadoop配置lzo

    Hadoop配置lzo 编译部署参考:https://blog.csdn.net/weixin_40420525/article/details/84869883 一.编译: 0. 环境准备 mave ...

  3. Hadoop支持LZO压缩配置

    支持LZO压缩配置 hadoop本身并不支持lzo压缩,故需要使用twitter提供的hadoop-lzo开源组件.hadoop-lzo需依赖hadoop和lzo进行编译,编译步骤如下. hadoop ...

  4. HDFS和Spark配置LZO压缩,Spark读取LZO创建正常Task数量

    1.说明 为了解决,数据日益增长并且目前使用Snappy压缩导致的Spark读取时会出现OOM,并且处理起来速度过慢的问题,决定使用LZO+Index来解决问题. 线上Hadoop版本3.2.1,Sp ...

  5. HDFS配置lzo压缩

    参考 https://www.cnblogs.com/caoshouling/p/14091113.html, 做了验证,很好的文档. 1) 停止hdfs集群 2)安装配置maven https:// ...

  6. hadoop使用lzo压缩文件笔记

    LZO性能 编译LZO 下载:

  7. Hive之配置和使用LZO压缩

    前言 OS:CentOS 7 Hive:2.3.0 Hadoop:2.7.7 MySQL Server:5.7.10 Hive官方手册:LanguageManual LZO 在配置Hive使用lzo压 ...

  8. Hadoop LZO压缩配置

    1.压缩配置 1)hadoop本身并不支持lzo压缩,故需要使用twitter提供的hadoop-lzo开源组件.hadoop-lzo需依赖hadoop和lzo进行编译,编译步骤如下. Hadoop支 ...

  9. hadoop配置支持LZO压缩格式

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 简介 安装lzo lzo并不是linux系统原生支持,所以需要下载安装软件包.这里至少需要安装3个软件包:lzo ...

最新文章

  1. QSignalMapper的使用
  2. mysql游标循环的使用
  3. C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什...
  4. linux 数组的简单总结
  5. jquery文本折叠
  6. 解决This application failed to start because no Qt platform plugin could be initialized问题
  7. oracle中导出的sql文件转入mysql中的工作记录
  8. Angular structural指令host element的定位调试
  9. 音乐计算机融合课,融合信息技术的音乐课
  10. overflowhidden把内容遮住了怎么办_图片有水印怎么办?不用PS,有这4招就够了!...
  11. 我国政务大数据政策的文本分析:推进逻辑与未来进路
  12. 电子计算机中专考试试题,职业中专考试试题
  13. 用户使用计算机首要考虑因素,工业设计心理学试题(新整理有答案参考)
  14. 使用Rust开发编译系统(C以及Rust编译的过程)
  15. DSX-5000校准的意义?
  16. online python compiler_在线控制台编译器:Online Console Compiler
  17. 【地图学笔记】1 地图的基本知识
  18. 第二证券|紧盯“有诺不行”隐疾 补齐上市公司高质量发展“短板”
  19. 人工智能 一种现代方法 第5章 对抗搜索
  20. 【读书笔记】认知心理学 第一章

热门文章

  1. win10无法登录Microsoft账号(登录页面无法加载)
  2. domino 调用java_java调用domino
  3. rar,zip文件加密判断
  4. 洛谷题单···(Python)
  5. 【数据库系统】空值的处理
  6. shp文件中polyline是什么_shp文件的读取
  7. excel表格拆分多个表如何操作
  8. 辉芒微IO单片机FT60F123-RB
  9. 记住你跑得快,别人跑得更快。
  10. 罗技 连点 脚本_双十一,罗技,价格不贵又好用的办公无线鼠标,吐血推荐!2020.10月,双11...