zoukankan      html  css  js  c++  java
  • 大数据学习之Hive UDF及优化23

    十一:UDF函数

    自定义函数

    之前使用hive自带函数sum/avg/max/min...

    三种自定义函数:

    UDF:一进一出(User-Defined-Function)

    UDAF:多进一出 (count、max、min)

    UDTF:一进多出

    (1)导入hive依赖包 hive/lib下。编写自定义函数

    2)上传 alt+p

    3)添加到hive中 add jar /root/lower.jar;

    (4)关联(注意是全类名)

    create temporary function my_lower as "com.itstaredu.com.Lower";

    (5) 使用

     select ename,my_lower(ename) lowername from empt;

    十二:hive优化

    1压缩

    1)开启Map阶段输出压缩

    开启输出压缩功能:

    set hive.exec.compress.intermediate=true;

    开启map输出压缩功能:

    set mapreduce.map.output.compress=true;

    设置压缩方式:

    set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compres

    s.SnappyCodec;

    (2)开启reduce输出端压缩

    开启最终输出压缩功能

    set hive.exec.compress.output=true;

    开启最终数据压缩功能

    set mapreduce.output.fileoutputformat.compress=true;

    设置压缩方式

    set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoo

    p.io.compress.SnappyCodec;

    设置块压缩

    set mapreduce.output.fileoutputformat.compress.type=BLOCK;

    2存储

    https://blog.51cto.com/14284607/2381714这篇文章进行了hive的存储格式对比。我觉得写得很清楚!!

    Hive存储格式:TextFile/SequenceFile/orc/Parquet

    orc:Index Data/row Data/stripe Footer

    压缩比:

    orc > parquet > textFile

    查询速度:

    orc > textFile

    50s > 54s

    3Group by优化

    分组:mr程序,map阶段把相同key的数据分发给一个reduce,一个key的量很大。

    解决方案:

    map端进行聚合(combiner)

    set hive.map.aggr=true;

    设置负载均衡

    set hive.groupby.skewindata=true;

    4数据倾斜

    1)合理避免数据倾斜

    合理设置map数

    合并小文件

    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

    合理设置reduce数

    2)解决数据倾斜

    map端进行聚合(combiner)

    set hive.map.aggr=true;

    设置负载均衡

    set hive.groupby.skewindata=true;

    3)JVM重用

    mapred-site.xml

    mapreduce.job.jvm.numtasks

    10~20

  • 相关阅读:
    移植ssh到mini2440
    VMware中Ubuntu安装VMware Tools步骤及问题解决方法
    Linux的网卡由eth0变成了eth1,如何修复
    mini2440移植所有驱动到3.4.2内核详细解说
    单片机的一生(感觉在说大部分人)
    mini2440移植linux-3.4.2内核详细解说
    Ubuntu中恢复桌面的上下默认面板命令
    mini2440移植最新u-boot-2012.04.01详细解说
    MyEclipse CI 2018.8.0 官方最新免费版(破解文件+激活工具+破解教程)
    cocos 获取一个骨骼动画多次显示播放
  • 原文地址:https://www.cnblogs.com/hidamowang/p/10909008.html
Copyright © 2011-2022 走看看