美文网首页
HADOOP-HIVE4

HADOOP-HIVE4

作者: 大空翼123 | 来源:发表于2021-01-06 08:45 被阅读0次

    Hive压缩


    开启Map输出阶段压缩

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

    案例实操:

    1.开启hive中间传输数据压缩功能

    hive (default)>sethive.exec.compress.intermediate=true;

    2.开启mapreduce中map输出压缩功能

    hive (default)>setmapreduce.map.output.compress=true;

    3.设置mapreduce中map输出数据的压缩方式

    hive (default)>setmapreduce.map.output.compress.codec=

     org.apache.hadoop.io.compress.SnappyCodec;

    4.执行查询语句

       hive (default)>select count(ename) name

    from emp;

    开启Reduce输出阶段压缩

    输出内容同样可以进行压缩

    1.开启hive最终输出数据压缩功能

    hive (default)>sethive.exec.compress.output=true;

    2.开启mapreduce最终输出数据压缩

    hive (default)>setmapreduce.output.fileoutputformat.compress=true;

    3.设置mapreduce最终数据输出压缩方式

    hive (default)> setmapreduce.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(列,MR用)、PARQUET(列,spark用)。

    列式存储和行式存储

    1.行存储的特点

    查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

    2.列存储的特点

    因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

    TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;

    ORC和PARQUET是基于列式存储的。

    EG: create table xxxxxxx  stored as orc ;

    查看表中数据大小/user/hive/warehouse/log_orc/000000_0

    存储文件的压缩比总结:

    ORC>  Parquet >  textFile

    查询速度相近。

    查看hadoop支持的压缩方式 

    hadoop checknative  
    存储方式和压缩总结

    在实际的项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy,lzo。

    create table XXXXXX stored as orc tblproperties

    ("orc.compress"="SNAPPY");

    HIVE优化

    HIVE本地模式

    MR计算不走YARN

    Hive可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。

    缺点:本地模式没有并行计算,大文件无法处理

    set hive.exec.mode.local.auto=true;  //开启本地mr

    //设置localmr的最大输入数据量,当输入数据量小于这个值时采用local  mr的方式,默认为134217728,即128M

    set hive.exec.mode.local.auto.inputbytes.max=50000000;

    //设置localmr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,默认为4

    set hive.exec.mode.local.auto.input.files.max=10;

    Group By(数据量非常大才适合用)

    并不是所有的聚合操作都需要在Reduce端完成,很多聚合操作都可以先在Map端进行部分聚合,最后在Reduce端得出最终结果。

    .开启Map端聚合参数设置

           (1)是否在Map端进行聚合,默认为True

    set hive.map.aggr = true

    (2)在Map端进行聚合操作的条目数目

    set hive.groupby.mapaggr.checkinterval= 100000

    (3)有数据倾斜的时候进行负载均衡(默认是false)

    set hive.groupby.skewindata =true

    Count(Distinct)去重统计

    数据量大 一般COUNT DISTINCT使用先GROUP BY再COUNT的方式替换:

    select count(distinct id) from bigtable;

    select count(id) from (select id from bigtable group by id) a;

    相关文章

      网友评论

          本文标题:HADOOP-HIVE4

          本文链接:https://www.haomeiwen.com/subject/cozioktx.html