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
相關文章
相關標籤/搜索