多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 编译hadoop源码支持snappy压缩 jar包准备(hadoop元am,jdk8,maven,protobuf) 1. hadoop-2.7.7-src.tar.gz 2. jdk-8u144-linux-x64.tar.gz 3. snappy-1.1.3.tar.gz 4. apache-maven-3.0.5-bin.tar.gz 5. protobuf-2.5.0.tar.gz 首先jdk安装好,环境变量配置好 **maven解压配置** ~~~ tar -zxvf apache-maven-3.0.5-bin.tar.gz ~~~ 配置环境变量 ~~~ # maven MAVEN_HOME=/root/tools/maven-3.0.5 export MAVEN_HOME export PATH=$MAVEN_HOME/bin:$PATH ~~~ ~~~ source /etc/profile ~~~ 自定义仓库位置 ~~~ <localRepository>自己仓库的存放目录,我的仓库已经移动到e盘了,具体看上面的那个图的箭头所指的位置</localRepository> ~~~ 阿里云Maven镜像: ~~~ <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> ~~~ 编译源码 ~~~ yum install -y svn autoconf automake libtool cmake ncurses-devel openssl-devel gcc* tar -zxvf snappy-1.1.3.tar.gz cd snappy-1.1.3 ./configure make make install ~~~ 查看snappy库文件 ~~~ ls -lh /usr/local/lib | grep snappy ~~~ **编译安装protobuf** ~~~ tar -zxvf protobuf-2.5.0.tar.gz cd protobuf-2.5.0/ ./configure make make install ~~~ 验证下 ~~~ protoc --version ~~~ **编译hadoop native** 需要点时间 ~~~ tar -zxvf hadoop-2.7.2-src.tar.gz cd hadoop-2.7.2-src mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy ~~~ 执行成功后,/path/hadoop-dist/target/hadoop-2.7.2.tar.gz是新生成的支持snappy压缩的二进制安装包 # 开启map输出阶段压缩 开启map输出阶段压缩可以减少job中map和reduce task间数据传输量.具体配置如下 1. 开启hive中间数据传输压缩功能 ~~~ hive> set hive.exec.compress.intermediate=true; ~~~ 2. 开启mapreduce中map输出压缩功能 ~~~ hive> set mapreduce.map.output.compress=true; ~~~ 3. 设置mapreduce中map输出数据的压缩方式 ~~~ hive> set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; ~~~ 4. 执行查询语句 ~~~ hive> select count(ename) name from emp; ~~~ # 开启reduce输出阶段压缩 当hive将输出写入到表中,输出内容同样可以进行压缩. 属性hive.exec.compress.output控制这个功能.用户可能需要保存默认设置文件中的默认值false.这样默认的输出就是非压缩的纯文本文件. 用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能. 1. 开启hive最终输出数据压缩功能 ~~~ hive> set hive.exec.compress.output=true; ~~~ 2. 开启mapreduce最终输出数据压缩 ~~~ hive> set mapreduce.output.fileoutputformat.compress=true; ~~~ 3. 设置mapreduce最终数据输出压缩方式 ~~~ hive> set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; ~~~ 4. 设置mapreduce最终数据输出压缩为块压缩 ~~~ hive> set mapreduce.output.fileoutputformat.compress.type=BLOCK; ~~~ 5. 测试一下输出结果是否是压缩文件 ~~~ hive> insert overwrite local directory '/root/distribute-result' select * from emp distribute by deptno sort by empno desc; ~~~ 文件内容是被压缩的