目录
了解Hive的数据压缩
hive 的数据压缩 == MR的数据压缩
1.在哪个阶段进行数据压缩
MR阶段过程:
input -> map -> shuffle -> reduce -> output
shuffle 阶段几个重要内容:
分区 -> 排序 -> combiner(map端的reduce) -> 压缩 -> 分组
compression压缩的阶段:
map 输出 和 reduce 输出
2.为什么要数据压缩
- 节省磁盘空间
- 减小网络IO、磁盘IO
3.有哪些数据压缩方案
zlib
gzip
bzip2
snappy(google 企业应用)
lz4
lzo
- 节省存储空间:bzip2 > gzip > lzo
- 解压速度:lzo > gzip > bzip2
4.查看Hadoop中的压缩数据工具
bin/hadoop checknative -a
下面要开始安装数据压缩snappy
Hadoop安装snappy(编译源码)
准备工具
- 电脑系统:macOS 10.15.4
- 虚拟机软件:Parallels Desktop14
- Hadoop各节点节点操作系统:CentOS 7
- JDK版本:jdk1.7.0_67
- Hadoop CDH版本:hadoop-2.6.0-cdh5.9.3
- 官方Hadoop2.6.0源码:hadoop-2.6.0-src
- protobuf版本:protobuf-2.5.0
- snappy版本:snappy-1.1.3
- maven版本:apache-maven-3.5.4-bin
snappy下载链接:
https://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.3.tar.gz/7358c82f133dc77798e4c2062a749b73/
protobuf下载链接:
https://github.com/google/protobuf/releases/tag/v2.5.0
官方Hadoop2.6.0源码下载链接:
https://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/
maven3.5.4下载链接:
https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/
第一步:配置阿里云yum源
1、打开centos的yum文件夹
cd /etc/yum.repos.d/
2、用wget下载repo文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo
如果wget命令不生效,说明还没有安装wget工具
yum -y install wget
回车进行安装,当前目录是/etc/yum.repos.d/,刚刚下载的Centos-7.repo也在这个目录上。
3、备份系统原来的repo文件
mv CentOS-Base.repo CentOS-Base.repo.bak
4、替换系统原理的repo文件
mv Centos-7.repo CentOS-Base.repo
5、执行yum源更新命令
yum clean all
yum makecache
yum update
第二步:配置/etc/resolv.conf
vim /etc/resolv.conf
添加内容:
nameserver 8.8.8.8
nameserver 8.8.4.4
第三步:下载Hadoop源码并解压
chmod u+x hadoop-2.6.0-src.tar.gz
tar -zxvf hadoop-2.6.0-src.tar.gz -C /opt/modules
第四步:配置JDK
在Hadoop安装snappy的时候需要jdk7,这是我在测试的时候成功过,jdk1.8在编译的时候会报错
下面就需要重新安装jdk7,并修改配置文件,记得在编译过之后要把jdk换回来8d
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export CLASSPATH=${JAVA_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
第五步:安装配置maven
chmod u+x apache-maven-3.5.4-bin.tar.gz
tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /opt/modules
配置环境变量
export MAVEN_HOME=/opt/modules/maven
export PATH=$MAVEN_HOME/bin:$PATH
测试
mvn -version
配置conf/setting.xml
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
第六步:protobuf-2.5.0安装
在安装protobuf-2.5.0之前需要安装gcc、PCRE、zlib、openssl等依赖库。
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
tar zxvf pcre-8.40.tar.gz
下面先解压protobuf-2.5.0
tar -vxf protobuf-2.5.0.tar -C /opt/modules
然后进入到protobuf-2.5.0目录下,进入到root模式下,依次执行
./configure
./make
./make install
查看版本
[caizhengjie@bigdata-pro-m01 protobuf-2.5.0]$ protoc --version
libprotoc 2.5.0
即可表示安装成功
第七步:snappy安装
先解压snappy-1.1.3.tar
tar -xvf snappy-1.1.3.tar -C /opt/modules
然后进入到snappy-1.1.3目录下,进入到root模式下,依次执行
./configure
./make
./make install
默认的安装路径
/usr/local/lib
第八步:安装CMake
sudo yum install cmake
第九步:hadoop编译
解压之后,进入hadoop-2.6.0-src,进入到root模式
然后使用如下编译命令:
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib
大概要等三四十分钟,在网络稳定的情况下即可安装成功
我的这里安装的路径在
/opt/modules/hadoop-2.6.0-src/hadoop-dist/target/hadoop-2.6.0/lib/native
下面需要将hadoop-2.6.0/lib/native
里面的安装文件拷贝到HadoopCDH版本的lib/native
cp -r ../native/* /opt/modules/hadoop/lib/native/
最后查看/opt/modules/hadoop/lib/native
里面的文件
第十步:hadoop配置修改
(1)修改core-site.xml
3台机在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,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
(2)修改mapred-site.xml
在mapred-site.xml文件中添加:
<property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.map.output.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
这里只配置了map端的数据压缩
如何查看:
首先启动服务
sbin/mr-jobhistory-daemon.sh start historyserver
查看历史服务器web访问端口:19888
测试
bin/hadoop checknative -a
在测试一下mapreduce的wordcount程序,看一下压缩数据的效果
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.9.3.jar wordcount /user/caizhengjie/datas/wordcount.txt /user/caizhengjie/mr/output1
疑惑详解
在/usr/local/lib
下有snappy,那么为什么不直接把snappy拷贝到Hadoop的lib/native目录下,而是还需要编译Hadoop源码
经过mapreduce的wordcount测试,出现了报错
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!