• HIVE如何使用自定义函数


    HIVE提供了很多函数,但这些函数只能满足一般的需求,针对复杂的业务分析,需要自己开发适合业务需求的函数。如何开发HIVE的UDF/UDAF/UDTF,请参看如下博客介绍的自定义函数的模板: http://hugh-wangp.iteye.com/blog/1472371

     
    如何在HIVE中使用自己定义的函数,可以有几种方式:
    1.在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数
    2.在进入HIVE会话之前先自动执行创建function,不用用户手工创建
    3.把自定义的函数写到系统函数中,使之成为HIVE的一个默认函数,这样就不需要create temporary function

    1.在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数
    hive> ADD JAR /home/hugh.wangp/UDFMd5.jar;
    Added /home/hugh.wangp/UDFMd5.jar to class path
    hive> CREATE TEMPORARY FUNCTION udfmd5 AS 'udf.UDFMd5';
    OK
    Time taken: 0.014 seconds
    hive> select udfmd5('a') from dual;
    OK
    0cc175b9c0f1b6a831c399e269772661

    这种方式的弊端是:每次打开新的会话,就要重新执行一遍如上的add jar和create temporary function的命令。对普通的业务分析人员未免要求太高。第二种方法可以把业务人员释放出来


    2.在进入HIVE会话之前先自动执行创建function
    HIVE命令有个参数-i:在进入会话,待用户输入自己的HQL之前,先执行-i的参数。我们只需要把add jar和create temporary function的命令写到一个文件中,并把这个文件传到-i的参数,如此一来省去了每次要手工创建的工作。
    但是这种方式也有个弊端,当我增添HIVE的gateway,就要拷贝一份这个文件,有时候遗漏真是不可避免的。第三种方法应该就是一个终极方案,只要HIVE本身代码不做修改,或者不删除特定的功能,这个函数就能一直用,而且可以把他作为HIVE的默认函数那样使用

    3.把自定义的函数写到系统函数中,使之成为HIVE的一个默认函数
    a.编写自己的UDF/UDAF/UDTF(如何编写可参考:http://hugh-wangp.iteye.com/blog/1472371),并把代码放到$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/路径下
    b.修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
    以HIVE自带函数Trim()举例,自定义函数操作一样。
    第一步:
    写UDF代码UDFTrim.java并放到$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFTrim.java
    第二步:
    修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java文件
    a.import org.apache.hadoop.hive.ql.udf.UDFTrim;
    b.registerUDF("trim", UDFTrim.class, false);

    虽然这种方法是一劳永逸的方法,但是一旦错了,对整个HIVE使用都是灾难性的,所以不是特别通用的自定义函数还是采用前两种,一旦通用的自定义函数累计到一定程度,再去采用第三种方法。

  • 相关阅读:
    nyoj 228士兵杀敌(五)
    hdu2072 单词数
    nyoj123士兵杀敌(四)(树状数组)
    nyoj1092数字分隔(二)
    HDU1166:敌兵布阵(线段树单点更新,区间查询)
    nyoj269VF(dp)
    nyoj 860又见01背包(01背包)
    poj2184(01背包变形)
    HDU2159FATE(完全背包变形)
    HDU4508 完全背包
  • 原文地址:https://www.cnblogs.com/tangtianfly/p/2756745.html
Copyright © 2020-2023  润新知