zoukankan      html  css  js  c++  java
  • 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数据进行复杂算法逻辑

  • 相关阅读:
    208. Implement Trie (Prefix Tree)
    97. Interleaving String
    314. Binary Tree Vertical Order Traversal
    windows获取IP和MAC地址【Qt】
    阳历阴历转换
    getDat(char *val)获得某一天是这一年中的第几天
    int位数的获取及int类型转char *
    以二进制形式输出char *数据
    char类型变量二进制形式输出
    int类型变量以二进制形式输出
  • 原文地址:https://www.cnblogs.com/mzyy/p/9879696.html
Copyright © 2011-2022 走看看