hadoop-2.7.3源码编译后支持的4种压缩格式

来源:互联网 发布:税务金三系统网络风险 编辑:程序博客网 时间:2024/05/18 21:11

简介

四种压缩格式的优缺点以及应用场景的介绍:

1 gzip压缩
优点:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便。
缺点:不支持split。
应用场景:当每个文件压缩之后在130M以内的(1个块大小内),都可以考虑用gzip压缩格式。譬如说一天或者一个小时的日志压缩成一个gzip 文件,运行mapreduce程序的时候通过多个gzip文件达到并发。hive程序,streaming程序,和java写的mapreduce程序完 全和文本处理一样,压缩之后原来的程序不需要做任何修改。

2 lzo压缩
优点:压缩/解压速度也比较快,合理的压缩率;支持split,是hadoop中最流行的压缩格式;支持hadoop native库;可以在linux系统下安装lzop命令,使用方便。
缺点:压缩率比gzip要低一些;hadoop本身不支持,需要安装;在应用中对lzo格式的文件需要做一些特殊处理(为了支持split需要建索引,还需要指定inputformat为lzo格式)。
应用场景:一个很大的文本文件,压缩之后还大于200M以上的可以考虑,而且单个文件越大,lzo优点越越明显。

3 snappy压缩
优点:高速压缩速度和合理的压缩率;支持hadoop native库。
缺点:不支持split;压缩率比gzip要低;hadoop本身不支持,需要安装;linux系统下没有对应的命令。
应用场景:当mapreduce作业的map输出的数据比较大的时候,作为map到reduce的中间数据的压缩格式;或者作为一个mapreduce作业的输出和另外一个mapreduce作业的输入。

4 bzip2压缩
优点:支持split;具有很高的压缩率,比gzip压缩率都高;hadoop本身支持,但不支持native;在linux系统下自带bzip2命令,使用方便。
缺点:压缩/解压速度慢;不支持native。
应用场景:适合对速度要求不高,但需要较高的压缩率的时候,可以作为mapreduce作业的输出格式;或者输出之后的数据比较大,处理之后的数据 需要压缩存档减少磁盘空间并且以后数据用得比较少的情况;或者对单个很大的文本文件想压缩减少存储空间,同时又需要支持split,而且兼容之前的应用程 序(即应用程序不需要修改)的情况。
最后用一个表格比较上述4种压缩格式的特征(优缺点):
这里写图片描述

运行环境

centos7
JDK1.8+
Hadoop2.7.3
Hive2.3.0
maven3.9
ps:安装其他版本,注意兼容问题

安装

1.安装相关的工具

由于笔者是最小安装,所以很多工具都没有安装,因此首先进行了一次工具的安装(建议在root用户下进行)

# yum -y  install make gcc gcc-c++ gcc-g77 flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel libpng10 libpng10-devel gd gd-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent libevent-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel gettext gettext-devel ncurses-devel gmp-devel pspell-devel unzip libcap lsof build-essential cmake 1g-dev pkg-config libssl-dev lzo-devel fuse fuse-devel zlib1g-dev libprotobuf-dev protobuf-compiler snappy libbz2-dev libjansson-dev libfuse-dev

如果安装完上述工具后,还是缺少可以使用如下命令来检测安装

# yum -y groupinstall “Development Tools”

2.安装protobuf

2.1下载
hadoop使用protocol buffer进行通信,需要下载和安装 protobuf-2.5.0.tar.gz。由于 现在 protobuf-2.5.0.tar.gz已经无法在官网 https://code.google.com/p/protobuf/downloads/list中 下载了,本人将 protobuf-2.5.0.tar.gz上传到百度云盘供大家下载,地址: http://pan.baidu.com/s/1pJlZubT 。

2.2解压安装
使用tar -zxf protobuf-2.5.0.tar.gz命令解压后得到是 protobuf-2.5.0的源码,

 cd protobuf-2.5.0   #进入目录

假如 你希望编译成功后输出的目录 为 /home/hadoop /protobuf/ 则输入如下两条命令:

   $  ./configure --prefix=/home/hadoop /protobuf/     $  make && make install

编译成功后将export PATH= /home/ hadoop /protobuf/bin:$PATH加入到环境变量中

最后输入` protoc --version`命令,如显示 `libprotoc 2.5.0` 则安装成功

如果在编译安装的时候报如下错误

libtool: install: error: cannot install `libaprutil-1.la’ to a directory 

原因:可能是以前安装用过./configure,导致安装文件已经不太“干净”
解决方法:
(1).执行命令make clean
(2).删除刚刚编译安装的目录protobuf,重新解压安装编译即可

2.3安装snappy

snappy-1.1.1.tar.gz的下载地址:
http://pan.baidu.com/s/1kVMKwrt
解压安装:

# tar -zxvf snappy-1.1.1.tar.gz# cd snappy-1.1.1# ./configure# make && make install

检查snappy是否安装完成

$ ll /usr/local/lib/ | grep snappy

这里写图片描述

hadoop编译

1.配置maven

解压安装、重命名、配置环境变量

# tar -zvxf apache-maven-3.3.9-bin.tar.gz# mv apache-maven-3.3.9-bin.tar.gz maven3# vi .bashrc
export MAVEN_HOME=/home/hadoop/maven3export M2_HOME=$MAVEN_HOME

重新加载文件,使环境变量立即生效

source .bashrc

创建.m2文件,复制setting到该目录

# cd /home/hadoop# mkdir .m2

2.编译hadoop

hadoop 编译前将hadoop本地库加入到环境变量

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"

从官网下载hadoop的源码包,解压

$ tar -zxvf hadoop-2.7.3-src.tar.gz$ cd hadoop-2.7.3-src/

输入如下命令开始编译,编译过程较长,耐心等待

$ mvn package -DskipTests -Pdist,native -Dtar -Drequire.snappy -e -X

如果看到BUILD SUCCESS,且没有异常信息,说明hadoop已经编译成功

编译完成后可以看到hadoop的压缩包

$ cd /home/hadoop/hadoop-2.7.3-src/hadoop-dist/target

这里写图片描述
笔者配置的是hadoop 伪分布式(hadoop伪分布式的搭建参考:http://blog.csdn.net/qq_38799155/article/details/77748831),解压编译好的hadoop压缩包,替换掉里面的配置文件即可,启动输入如下命令

$ hdfs namenode -format    #只在第一次启动时执行$ start-dfs.sh$ start-yarn.sh$ mr-jobhistory-daemon.sh start historyserver

这里写图片描述
启动过程中老是提示输入密码,解决方法是配置ssh无密登录,输入如下命令即可

$ su root# ssh-keygen -t rsa# cp id_rsa.pub authorized_keys# exit

检查hadoop的本地库

$ hadoop checknative

这里写图片描述

问题以及解决的办法

执行 hadoop checknative 报错 openssl: false Cannot load libcrypto.so

部署完Hadoop之后,执行 hadoop checknative 对本地库做检查,执行结果为

17/02/09 10:02:41 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version  17/02/09 10:02:41 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library  Native library checking:  hadoop:  true /home/user/tool/hadoop-2.7.3/lib/native/libhadoop.so  zlib:    true /lib/x86_64-linux-gnu/libz.so.1  snappy:  false   lz4:     true revision:99  bzip2:   false   openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!  

提示不能正确加载 libcrypto.so,查了下是因为缺少 ssl lib包;于是执行命令

apt-get install libssl-dev

等待安装完毕后,执行 hadoop checknative ,不再提示 Cannot load libcrypto.so的错误了,出现跟官网一样的提示信息:

17/02/09 10:04:09 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version  17/02/09 10:04:09 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library  Native library checking:  hadoop:  true /home/user/tool/hadoop-2.7.3/lib/native/libhadoop.so  zlib:    true /lib/x86_64-linux-gnu/libz.so.1  snappy:  false   lz4:     true revision:99  bzip2:   false   openssl: true /usr/lib/x86_64-linux-gnu/libcrypto.so  
原创粉丝点击