hadoop源码编译:支持snappy压缩

                                                                                 hadoop源码编译:支持snappy压缩


     在大数据的情况下,数据量都是特别的大,有时候呢,我们想把数据进行压缩之后在进行处理,这样呢可以大幅度的减少磁盘的IO而且还可以减少网络传输的压力,具体来讲对于本地的数据任务来讲,例如在map任务下,适当的对数据进行压缩,可以减少磁盘的IO,在涉及到reduce任务的时候呢,reduce就会从远程的磁盘进行数据拷贝,那么压缩数据就会减缓网络IO流的压力。但是需要注意的是:这些数据到底适合压缩吗?对于mapreduce任务会把数据分片,不同的压缩会隔离数据,所以,慎重考虑压缩技术的应用。

      hadoop的源码编译的时候,首先在本机环境你改下大部分情况下对于支持snappy都是可选项,但是今天的这次编译我们用如下命令来实现snappy的添加,在编译完成之后,就会在bin/hadoop checknative该命令下看到与之对应的支持情况。note:要想hadoop支持snappy,就必须要让本地存在snappy的lib库

    该命令就会编译支持snappy的hadoop版本。

mvn package -Pdist,native,docs -DskipTests -Dtar  -Drequire.snappy
    完成之后,会看到如下的结果:我们会看到这个时候就支持snappy啦。


      还需要在hadoop的配置文件core-site.xml种添加一个配置如下。然后重新启动hadoop就可以啦。

<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>

      hive的表格在建立的时候,可以指定数据的的压缩格式,就像下面这样:

create table if not exists emp_sub_orc_sanppy
stored as orc tblproperties ("orc.compress"="SNAPPY")
as
select empno, ename ,job from emp ;
  

     tblproperties描述的就是table所对应的属性值,这里的描述就是对数据进行snappy压缩。在创建完表格之后,在加载数据。另外还需要在hive种设置一些属性才可以生效。注意这里的SnappyCodec必须是全部的名称,才能生效,否则就会出现找不到对应的包名称的情况,如下图所示:


set mapreduce.job.reduces = 1 ;
set mapreduce.map.output.compress = true ;
set mapreduce.map.output.compress.codec = org.apache.hadoop.io.compress.SnappyCodec ;
set hive.exec.compress.intermediate = true ;


set mapreduce.job.reduces = 1 ;
set mapreduce.output.fileoutputformat.compress = true ;
set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec ;
set hive.exec.compress.output = true ;


     这个时候,我们来看看吧。运行一下命令,向对应的文件写入数据,并且使用snappy压缩数据格式.查询对应职位的个数。

insert  overtwrite local directory '/opt/datas/job-output-snappy2'  
select deptno, count(1) from emp group by deptno ;
     最终看看运行结果就是这样的:
     

     到此为止,和数据压缩的简单介绍就结束了。





     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值