• Hive的UDF实现及注意事项


    Hive自身查询语言HQL能完毕大部分的功能,但遇到特殊需求时,须要自己写UDF实现。下面是一个完整的案例。

    1、eclipse中编写UDF

    ①项目中增加hive的lib下的全部jar包和Hadoop中share下hadoop-common-2.5.1.jar(Hadoop眼下最新版本号2.5.1)。
    ②UDF类要继承org.apache.hadoop.hive.ql.exec.UDF类。类中要实现evaluate。

     当我们在hive中使用自己定义的UDF的时候,hive会调用类中的evaluate方法来实现特定的功能
    ③导出项目为jar文件。
    注:项目的jdk与集群的jdk要一致。


    详细样例:

    package com.zx.hive.udf;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    public class UdfTestLength extends UDF{
    
        public Integer evaluate(String s)
        {
            if(s==null)
            {
                return null;
            }else{
                return s.length();
            }
        }
    }
    将上面的类打成jar的形式,我使用eclipse直接导出为test-udf.jar包。然后放在/root文件夹中。



    2、自己定义函数调用过程

    ①加入jar包(在hive命令行里面运行)
    hive> add jar /root/test-udf.jar;

    ②创建暂时函数 ,hive命令行关闭后,即失效。
    hive> create temporary function testlength as ‘com.zx.hive.udf.UdfTestLength';

    ③调用
    hive> select id, name, testlength(name) from student;

    ④将查询结果保存到HDFS中

    hive> create table result row format delimited fields terminated by ' ' as select id,testlength(nation) from student;

    (转载请注明,很多其它内容见:http://blog.csdn.net/hwwn2009/article/details/41289197


    3、遇到的问题:

    ①须要引用第三方包,有两种方式:

    1)在执行hive hql时,手动将udf所须要的jar包通过add语句加入:add jar /root/***.jar(測试通过)。
    2)安装eclipse 插件:fatjar (測试通过)

    在线安装fatjar:
    eclipse菜单条 help >software updates >Search for new features to install>new update site>
    填写name 和url 
    name:随意起个, 就写fat吧
    url:这个是fat jar的地址  输入http://kurucz-grafika.de/fatjar

    使用fatjar打包的方法:



    ②程序须要读取外部资源

    首先外部资源要在UDF执行之前加入,使用命令add file [file]在hive中进行暂时注冊。
    UDF中内部调用的文件地址直接用本地文件地址表示。

    比如: String filepath = "/home/dev/test/test.txt";上传至hive之后。外部文件地址仅仅需改成String filepath = "./test.txt";就可以。

    (转载请注明,很多其它内容见:http://blog.csdn.net/hwwn2009/article/details/41289197

  • 相关阅读:
    使用PHPExcel 读取 表格数据, 发现中文全变成 FALSE??
    使用百度编辑器--ueditor,后台接收提交编辑的内容,HTML不见了, 赋值不了,赋值之后,html暴露出来了??
    PHP中使用RabiitMQ---各项参数的使用方法
    Java包装类、拆箱和装箱详解
    Eclipse中新建Java工程的三个JRE选项区别
    博客园的代码运行
    35个jQuery小技巧(代码)
    前端最全的 API 集锦
    我的博客开张了
    达梦数据库TPCC测试
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5303073.html
Copyright © 2020-2023  润新知