摘要:
我们用Apache或者CDH下载下来的hadoop安装包来安装hadoop是不支持snappy压缩的,我们可以查看$HADOOP_HOME/lib/native,最开始里面是空的。或者执行hadoop checknative -a来查看支持的压缩,发现压缩格式基本都是false。如果要用snappy压缩,需要重新编译hadoop。下面我们来编译hadoop。
一、编译准备
- 部署JAVA环境
- 安装maven
- 安装Protocol Buffer
- 安装Findbugs
以上安装过程可以参考之前的博客或参考网上其他教程。
为了支持native,我们需要手动去安装支持这些压缩的本地库,具体操作如下:
$>yum install -y openssl openssl-devel svn ncurses-devel zlib-devel libtool
$>yum install -y snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop autoconf automake
二、开始编译
首先我们先到官网下载hadoop的源码包,我这里使用的CDH版本的hadoop,下载包的版本为hadoop-2.6.0-cdh5.7.0-src.tar.gz。
首先将源码包解压,我这里解压到app目录下。
tar -zxvf hadoop-2.6.0-cdh5.7.0-src.tar.gz -C ~/app
然后进入到解压好的app/hadoop-2.6.0-cdh5.7.0-src目录下
执行如下命令开始编译
mvn clean package -Pdist,native -DskipTests -Dtar
编译需要下载很多依赖包,根据个人网络情况编译时间不定,需要等待一段时间。
如果最后显示BUILD SUCCESS,则表示编译成功。我们来查看下压缩是否支持
hadoop checknative -a
如上图所示,hadoop已经支持各种压缩了。
三、编译遇到的问题
1、在编译的时候,pom默认是从cdh的lib库里面下载依赖包,但是有一些lib在上面已经找不到了。我这里在settings.xml添加了阿里的镜像地址。
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>/
2、可能是公司网络的原因,我最开始编译了好多次都失败了。报有一些包无法找到,但是我按照报错的信息在镜像库里面却可以找到这些包。最后我在家编译一次通过。如果有遇到这种情况,可以换个网络再编译试试。
四、测试
首先,我们要在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.BZip2Codec,
com.hadoop.compression.lzo.LzoCodec,
org.apache.hadoop.io.compress.Lz4Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
然后配置mapred-site.xml,重启hadoop。
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
我在MySQL里面建了一张表user_click,表里面有数据
然后使用sqoop将该表导入到HDFS里面
sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password 123456 \
--delete-target-dir \
--table user_click \
--fields-terminated-by ','
执行完后,查看HDFS 目录/user/hadoop/user_click下,数据文件是以.snappy为后缀的,说明测试成功。