• UDF函数,hive调用java包简单方法


    UDF函数,是hadoop在强大的大数据批量导入导出操作之余,为了满足复杂的数据逻辑操作留下的接口 

    核心思想:不管是UDF函数还是自定义处理jar包,都是要放置在hadoop服务器上的,相当于hadoop多出了一个自定义的处理数据的方法

    1)其中调用的不管是参数还是数据库都是以hadoop本身的服务器环境路径为本地路径,而不是自己操作的java环境

    2)

    现在记录下2种近期使用过的简单方法,非常简单。

    1、函数调用

    1)导入UDF架包,保证引用UDF时不会编译报错

    2)java中建任意类继承UDF,然后重写其evaluate方法,参数为你想操作的字段的值

    -- 建议单一修改字段值时但是hive自带函数不满足条件时使用  不建议处理复杂操作

    3)将写好的java类编译为.class文件   可以使用eclipse或者intelij等IDE工具直接获取,或者使用jdk编译方式

    -- jdk编译方式,将写好的java类拷贝出来放在1个路径简单的位置, win+R --cmd  打开命令窗口  cd到jdk的bin目录下  

    javac + java文件位置   回车运行即可,若报错 检查bin目录下是否缺少javac组件或者文件路径是否写错 

    4)打包  仍然可以使用eclipse或者intelij等IDE工具直接打包  也可以使用jar命令打包方式   保证2种方式打出来的包结构相同即可

    -- jar打包方式  新建文件夹,名称英文即可,此处假设为com。将3)步生成好的class文件放入 假设为test.class 

    cd 到com的同级目录   使用命令  jar -cvf testUdf.jar com    运行后会在com的同级目录中出现名称testUdf.jar的包 

    5)将包上传到hadoop服务器上你可以找到的位置  假设为  /home/hadoop/soft/file/testUdf.jar

    6)将包加入hive    进入hive环境,输入命令:add jar  /home/hadoop/soft/file/testUdf.jar;

    1> 临时方式:create temporary function testFunction as 'com.test';  -- 只对当前session起效,即退出hive后,下次要使用需要再次创建

    2>永久生效: 

    《1》 上传到 hdfs,使用命令:hdfs  dfs -put /home/hadoop/soft/file/testUdf.jar /lib   

    《2》 创建函数  create function functionTest as 'com.test' using jar 'hdfs:///lib/testUdf.jar';

    2、 比较实用的 包jar调用,使用sh的脚本调用方式   实现方法更加简单 

    1)不用实现UDF,直接像写正常的java类那样写一个你要处理数据的类,包含1个main函数即可

    2)入参从main函数的 args中取,可以为任意类型,第1个为args[0],第2个为args[1] 以此类推

    3)将写好的java程序打包,

    这里需要注意的是:除了jdk的架包外,若还需要其他架包一起打包进jar‘。一般若是作数据处理是不需要其他包的,若有

    需要特别处理的方法,可以自己写一个工具类然后把整个函数拷贝进去 

    4)将打好的包上传到hadoop上自己熟悉的位置,使用sh脚本调用jar包,带上自己要使用的参数即可 

    5)sh调用方式: 暂无

    需要引起注意的地方: 1》  hadoop我使用的环境是原先配置的有jdk,若使用者没有需要自己配置

                    2》  此方法适用于 使用参数 查询 hive数据进行复杂算法逻辑

  • 相关阅读:
    在Android中使用Handler和Thread线程
    getCacheDir用法
    OAuth协议
    android开发参考网站
    常用的地址
    LayoutInflater获取方式
    java for map
    ubuntu12.04+nginx+apc
    ubuntu12.04 + dropbox
    yii + 获取 control + action
  • 原文地址:https://www.cnblogs.com/mzyy/p/9879696.html
Copyright © 2020-2023  润新知