• 大数据学习之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

  • 相关阅读:
    Android Studio NDK编程-环境搭建及Hello!
    Android Studio22-NDK-LLDB调试
    使用Xutils 3 中遇到的一些问题!!!!
    Android 安装时报错INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法
    Android Fragment 剖析
    java 中抽象类和接口的五点区别?
    undefined reference to `__android_log_print'
    android JNI 调用NDK方法
    html如何和CSS联系起来
    Android如何自定义dialog
  • 原文地址:https://www.cnblogs.com/hidamowang/p/10909008.html
Copyright © 2020-2023  润新知