9)Hive(压缩和存储)

Hadoop源码编译支持Snappy压缩
  1. 资源准备

    1. CentOS联网:
      配置CentOS能连接外网。Linux虚拟机ping www.baidu.com 是畅通的
      注意:采用root角色编译,减少文件夹权限出现问题
    2. jar包准备(hadoop源码、JDK8 、maven、protobuf)
      hadoop-2.7.2-src.tar.gz
      jdk-8u144-linux-x64.tar.gz
      snappy-1.1.3.tar.gz
      apache-maven-3.0.5-bin.tar.gz
      protobuf-2.5.0.tar.gz
  2. jar包安装(注意:所有操作必须在root用户下完成)

    1. JDK解压、配置环境变量JAVA_HOME和PATH,验证java-version(如下都需要验证是否配置成功);
    2. Maven解压、配置 MAVEN_HOME和PATH,验证命令:mvn -version;
  3. 编译源码

    1. 准备编译环境:
    [root@hadoop101 software]# yum install svn
    [root@hadoop101 software]# yum install autoconf automake libtool cmake
    [root@hadoop101 software]# yum install ncurses-devel
    [root@hadoop101 software]# yum install openssl-devel
    [root@hadoop101 software]# yum install gcc*
    
    1. 编译安装snappy
    [root@hadoop101 software]# tar -zxvf snappy-1.1.3.tar.gz -C /opt/module/
    [root@hadoop101 module]# cd snappy-1.1.3/
    [root@hadoop101 snappy-1.1.3]# ./configure
    [root@hadoop101 snappy-1.1.3]# make
    [root@hadoop101 snappy-1.1.3]# make install
    # 查看snappy库文件
    [root@hadoop101 snappy-1.1.3]# ls -lh /usr/local/lib |grep snappy
    
    1. 编译安装protobuf

      [root@hadoop101 software]# tar -zxvf protobuf-2.5.0.tar.gz -C /opt/module/
      [root@hadoop101 module]# cd protobuf-2.5.0/
      [root@hadoop101 protobuf-2.5.0]# ./configure 
      [root@hadoop101 protobuf-2.5.0]#  make 
      [root@hadoop101 protobuf-2.5.0]#  make install
      # 查看protobuf版本以测试是否安装成功
      [root@hadoop101 protobuf-2.5.0]# protoc --version
    2. 编译hadoop native

    [root@hadoop101 software]# tar
    -zxvf hadoop-2.7.2-src.tar.gz
    [root@hadoop101 software]# cd hadoop-2.7.2-src/
    [root@hadoop101 software]# mvn clean package -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib -Dbundle.snappy

    执行成功后,/opt/software/hadoop-2.7.2-src/hadoop-dist/target/hadoop-2.7.2.tar.gz即为新生成的支持snappy压缩的二进制安装包

Hadoop压缩配置
  • MR支持的压缩编码、压缩参数配置参照此文

  • 开启Map输出阶段压缩:
    开启map输出阶段压缩可以减少job中map和Reduce task间数据传输量。具体配置如下
    案例实操:

    1. 开启hive中间传输数据压缩功能
      hive (default)>set hive.exec.compress.intermediate=true;
    2. 开启mapreduce中map输出压缩功能
      hive (default)>set mapreduce.map.output.compress=true;
    3. 设置mapreduce中map输出数据的压缩方式
      hive (default)>set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
    4. 执行查询语句
      hive (default)> select count(ename) name from emp;
  • 开启Reduce输出阶段压缩
    当Hive将输出写入到表中时,输出内容同样可以进行压缩。属性hive.exec.compress.output控制着这个功能。用户可能需要保持默认设置文件中的默认值false,这样默认的输出就是非压缩的纯文本文件了。用户可以通过在查询语句或执行脚本中设置这个值为true,来开启输出结果压缩功能;
    案例实操:

    1. 开启hive最终输出数据压缩功能
      hive (default)>set hive.exec.compress.output=true;
    2. 开启mapreduce最终输出数据压缩
      hive (default)>set mapreduce.output.fileoutputformat.compress=true;
    3. 设置mapreduce最终数据输出压缩方式
      hive (default)> set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
    4. 设置mapreduce最终数据输出压缩为块压缩
      hive (default)> set mapreduce.output.fileoutputformat.compress.type=BLOCK;
    5. 测试一下输出结果是否是压缩文件
      hive (default)> insert overwrite local directory '/opt/module/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;
  • 文件存储格式
    Hive支持的存储数的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET

    • 行存储的特点查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快;
    • 列存储的特点因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法;
    • TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;
    • ORC和PARQUET是基于列式存储的;
    • TextFile格式:
      默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用,但使用Gzip这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
    • Orc格式:
      Orc (Optimized Row Columnar)是Hive 0.11版里引入的新的存储格式:
    • Parquet格式:
      Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。通常情况下,在存储Parquet数据的时候会按照Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度
  • 存储和压缩结合

    • 修改Hadoop集群具有Snappy压缩方式
      • 查看hadoop checknative命令使用:
        hadoop checknative [-a|-h] check native hadoop andcompression libraries availability
      • 查看hadoop支持的压缩方式:
        hadoop checknative
    • 将编译好的支持Snappy压缩的hadoop-2.7.2.tar.gz包导入到hadoop102的/opt/software中
    • 解压hadoop-2.7.2.tar.gz到当前路径
    • 进入到/opt/software/hadoop-2.7.2/lib/native路径可以看到支持Snappy压缩的动态链接库
    • 拷贝/opt/software/hadoop-2.7.2/lib/native里面的所有内容到开发集群 的 /opt/module/hadoop-2.7.2/lib/native路径上:
    • 分发native/
    • 再次查看hadoop支持的压缩类型
    • 小结:
      在项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy,lzo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值