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

简介

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

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

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

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

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

运行环境

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

安装

1.安装相关的工具

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

# 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

若是安装完上述工具后,仍是缺乏可使用以下命令来检测安装ruby

# 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/1pJlZubTbash

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

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/maven3
export 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
相关文章
相关标签/搜索