精华内容
下载资源
问答
  • FLUENT学习udf编程实例.pdf
  • hive之UDF编程详解

    千次阅读 2019-04-20 18:52:15
    前言:本文详解介绍UDF编程过程,以及hive中创建UDF函数的两种方式 文章目录1.什么是udf1.1UDF分类2.UDF编程示列2.1pom依赖2.2UDF编程2.3打jar包3.创建UDF函数3.1创建临时的UDF函数3.2创建永久生效的UDF函数3.3编译...

    前言:本文详解介绍UDF编程过程,以及hive中创建UDF函数的两种方式

    1.什么是udf

    UDF(User-Defined Functions)即是用户自定义的hive函数。hive自带的函数并不能完全满足业务的需求,这时就需要我们自定义函数了。
    官网参考地址:LanguageManual UDF

    1.1UDF分类
    • UDF: one to one ,进来一个出去一个,row mapping。 是row级别操作,如:upper、substr函数
    • UDAF: many to one,进来多个出去一个,row mapping。是row级别操作,如sum/min。A:aggregation
    • UDTF:one to mang,进来一个出去多行。如lateral view 与 explode,T:table-generating

    本文这里只记录UDF类型函数的编程以及集成。

    2.UDF编程示列

    首先创建一个普通的maven工程,maven工程创建网上有很多资料,也很简单,这里就跳过了。

    2.1pom依赖

    pom文件如下,主要是添加hive-exec的jar包

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.wsk.bigdata</groupId>
        <artifactId>g6-hadoop</artifactId>
        <version>1.0</version>
        <name>g6-hadoop</name>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
            <hive.version>1.1.0-cdh5.7.0</hive.version>
        </properties>
        <!--添加CDH的仓库-->
        <repositories>
            <repository>
                <id>nexus-aliyun</id>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </repository>
            <repository>
                <id>cloudera</id>
                <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
            </repository>
        </repositories>
        <dependencies>
            <!--添加Hadoop的依赖-->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-client</artifactId>
                <version>${hadoop.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
            <!--添加hive依赖-->
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-exec</artifactId>
                <version>${hive.version}</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    2.2UDF编程

    主要是通过集成UDF类,编写evaluate方法实现UDF编程,如下HelloUDF类

    package com.wsk.bigdata.udf;
    
    import org.apache.hadoop.hive.ql.exec.UDF;
    
    public class HelloUDF extends UDF {
    
        public String evaluate(String value) {
            return "hello:" + value;
        }
    
        public static void main(String[] args) {
            HelloUDF helloUDF = new HelloUDF();
            String value = helloUDF.evaluate("wsk");
            System.out.println(value);
        }
    }
    
    2.3打jar包

    打包
    1
    生成的jar包
    2

    3.创建UDF函数

    创建UDF函数有三种方式

    • 创建临时的UDF函数,只对当前session生效
    • 创建永久的UDF函数
    • 编译hive源码支持UDF函数,对所有部署编译后的hive生效。
    3.1创建临时的UDF函数

    生产不推荐

    #上传jar包
    [hadoop@hadoop001 lib]$ rz
    [hadoop@hadoop001 lib]$ ll
    total 12
    -rw-r--r--. 1 hadoop hadoop 11447 Apr 19  2019 g6-hadoop-1.0.jar
    
    #创建临时的UDF函数
    若不想执行add操作可以将jar复制到 $HIVE_HOME/auxlib 特定的目录
    ADD JAR /home/hadoop/lib/g6-hadoop-1.0.jar;
    CREATE TEMPORARY FUNCTION sayHello_1 AS 'com.wsk.bigdata.udf.HelloUDF';
    
    我这里报异常,异常信息: Unsupported major.minor version 52.0
    思索后想起,我部署的jdk用的是1.7,而我编译UDF用的是jdk1.8,低版本环境是无法运行高版本jar的,重新部署1.8的jdk重启hadoop,同时降低UDFjar包编译的版本
    
    #测试,临时函数只对当前session生效
    hive> select sayHello_1("wsk") ;
    OK
    hello:wsk
    Time taken: 0.175 seconds, Fetched: 1 row(s)
    
    #检查mysql中的元数据,因为是临时函数,故元数据中并没有相关的信息
    mysql> select * from funcs;
    Empty set (0.11 sec)
    

    降低项目编译版本方法,如下运行的是jdk1.8环境,编译使用的是1.7环境
    3

    3.2创建永久生效的UDF函数

    通过上传hdfs实现。

    #将jar上传到指定目录
    [hadoop@hadoop001 ~]$ hdfs dfs -ls /lib
    [hadoop@hadoop001 ~]$ hdfs dfs -put ~/lib/g6-hadoop-1.0.jar  /lib/
    [hadoop@hadoop001 ~]$ hdfs dfs -ls /lib
    Found 1 items
    -rw-r--r--   1 hadoop supergroup      11543 2019-04-15 01:43 /lib/g6-hadoop-1.0.jar
    
    #创建永久生效的UDF函数
    CREATE FUNCTION sayhello_2 AS 'com.wsk.bigdata.udf.HelloUDF'
    USING JAR 'hdfs://hadoop001:9000/lib/g6-hadoop-1.0.jar';
    
    #测试
    hive> select sayHello_2("wsk2") ;
    OK
    hello:wsk2
    
    #检查mysql中的元数据,测试函数的信息已经注册到了元数据中
    mysql> select * from funcs;
    +---------+------------------------------+-------------+-------+------------+-----------+------------+------------+
    | FUNC_ID | CLASS_NAME                   | CREATE_TIME | DB_ID | FUNC_NAME  | FUNC_TYPE | OWNER_NAME | OWNER_TYPE |
    +---------+------------------------------+-------------+-------+------------+-----------+------------+------------+
    |       1 | com.wsk.bigdata.udf.HelloUDF |  1555263915 |     6 | sayhello_2 |         1 | NULL       | USER       |
    +---------+------------------------------+-------------+-------+------------+-----------+------------+------------+
    
    
    
    3.3编译hive支持自定义的UDF函数

    请参考??

    展开全文
  • 主要介绍了mysql udf编程的非阻塞超时重传示例,需要的朋友可以参考下
  • hive UDF编程

    2017-12-14 20:00:37
    UDF编程(User Defined Function)(1)创建java项目,添加maven依赖 <groupId>org.apache.hive <artifactId>hive-jdbc <version>2.2.0 </depe

    UDF编程(User Defined Function)

    (1)创建java项目,添加maven依赖

     <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>2.2.0</version>
    </dependency>
     <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-exec</artifactId>
                <version>2.2.0</version>
    </dependency> 

    (2)创建类继承org.apache.hadoop.hive.ql.UDF;实现evaluate函数,evaluate函数支持重载。

    public class LowerUDF extends UDF {
        public Text evaluate(Text s) {
            if (s == null) { return null; }
            return new Text(s.toString().toLowerCase());
        }
    }

    (3)打成jar包

    (4)注册

    方式一:

    //(1)执行命令添加jar,jar再本地文件系统
     add jar /home/bxp/Documents/doc/hivetest/hive.jar 
    //(2)创建临时函数
    create temporary function my_lower as "com.bxp.hadooptest.hive.udf.LowerUDF"
    //(3)使用自定义函数
    select my_lower(name) from emp;

    方式二:

    //此方式不需要添加jar,但是必须先将jar文件上传到hdfs文件系统
    create function my_lower1 AS 'com.bxp.hadooptest.hive.udf.LowerUDF' using jar “hdfs://192.168.1.103/user/bxp/hive/jars/hivetest.jar";

    注意:

    UDF必须有返回类型,可以返回null,但是返回类型不能是void。
    UDF中常用Text/LongWritable等类型,不推荐使用java类型。

    展开全文
  • UDF编程操作实现

    2019-09-19 09:02:42
    UDF编程操作实现 1 编写Lower_Or_UpperCase.java,其代码如下: import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class Lo...

    UDF编程操作实现

     

    1 编写Lower_Or_UpperCase.java,其代码如下:

    import org.apache.hadoop.hive.ql.exec.UDF;

    import org.apache.hadoop.io.Text;

     

    public class Lower_Or_UpperCase extends UDF{

        public Text evaluate(Text t, String up_or_lower){

           if(t==null){

               return null;

           }else if(up_or_lower.equals("lowercase")){

               return new Text(t.toString().toLowerCase());

           }else if(up_or_lower.equals("uppercase")){

               return new Text(t.toString().toUpperCase());

           }else{

               return null;

           }

        }

    }

     

    2 Lower_Or_UpperCase.java打成jar包导入到ubuntu系统hadoop用户的hive-data文件夹。

    3 实现该函数,具体操作和计算结果如下:

    hive> add jar /home/hadoop/hive-data/uporlower.jar;

    hive> create temporary function uporlower1 as 'Lower_Or_UpperCase';

    hive> select uporlower1(name, 'uppercase') from userinfo;

    WANGMING

    XIAOMING

    WUJING

    ZHANGQI

    XIAOMI

    WANGYI

    hive> select uporlower(name, 'lowercase') from userinfo;

    wangming

    xiaoming

    wujing

    zhangqi

    xiaomi

    wangyi

    转载于:https://my.oschina.net/mkh/blog/75781

    展开全文
  • 1:Hive自带函数 >show functions; -------查看hive所有自带函数 >desc function ...2:Hive UDF编程(自定义函数,然后在Hive上面能够直接使用) 核心 1 ):继承org.apache.hadoop.hive.ql.UDF这个类 2 ):需

    1:Hive自带函数

    >show functions; -------查看hive所有自带函数

    >desc function  extended  函数名;------通过一个简单的例子告诉你怎样使用这个函数


    2:Hive UDF编程(自定义函数,然后在Hive上面能够直接使用)

    核心

    1 ):继承org.apache.hadoop.hive.ql.UDF这个类
    2 ):需要实现evaluate函数,evaluate支持重载

    步骤:

    1)Maven项目添加hadoop依赖,hive-jdbc依赖 ,hive-exec依赖

    2)代码:里面的内容你自己定义,这里我只是举个栗子


    3)打包成jar包

    4)把jar包放到Linux上

    5)进入jar包所在的linux上的路径,把jar包添加到hive缓存中

    add jar '/usr/tmp/hive.jar'

    6)注册函数

    create temporary function funcname as 'com.udf.FunctionName' using jar 'hdfs://master:8020/using jar';

    7) 使用函数

    >funcname( )

    展开全文
  • 重温大数据---Hive操作及UDF编程

    千次阅读 2018-11-17 19:00:47
    这一块的内容自我感觉算不上进阶。...单学习来讲UDF编程还是很基础的,在实际项目中视不同的需求可能会麻烦一点。但再难毕竟是Java老本行。 Hive关于库的操作 一堆CDAUS: create ...
  • Hive的UDF编程

    2018-10-21 20:13:27
    编程步骤: 继承org.apache.hadoop.hive.ql.UDF 需要实现evaluat函数,evaluate函数支持重载 注意事项: UDF必须要有返回值类型,可以返回null,但是不能为void UDF中常用Text/LongWritable等类型,不推荐使用...
  • Hive UDF编程

    2015-08-16 17:25:30
    编写一个类 继承 org.apache.hadoop.hive.ql.exec.UDF 在该类中加入 evaluate 方法 "evaluate" should never be a void method. However it can return "null" if * needed.     ...
  • hive之UDF编程

    2017-05-07 17:09:44
    0.要继承org.apache.hadoop.hive.ql.exec.UDF类实现evaluate 方法 public class NationUDF extends UDF { public static Map nationMap = new HashMap(); static{ nationMap.put("China", "中国"); nationMap....
  • Hive编程指南的GenericUDF,GenericUD可以接受负责数据类型的数据参数输入,这里我们使用的是输入数组,判断数组中是否包含某个值
  • HIVE中的UDF编程

    2018-09-14 11:35:49
    1.官方文档 ... UDF:一进一出 UDAF:多进一出 (aggregation 聚集 类似于count/max/min) UDTF:一进多出 2.查看自带的函数 show functions; 查看一个函数的使用 desc function extended...
  • Hive UDF 编程

    2015-12-28 21:27:27
    HIVE允许用户使用UDF(user defined function)对数据进行处理。 用户可以使用‘show functions’ 查看function list,可以使用'describe function function-name'查看函数说明。 [plain] view plaincopy...
  • Hive基础之UDF编程

    2019-03-01 21:38:07
    UDF指用户定义函数,即在hive中进行客户化的函数,hive中自定义了很多function,我们使用show function命令可以很容易查看已有函数的用法: hive (default)&gt; desc function split; OK tab_name split(str, ...
  • Hive中UDF编程

    2016-11-22 21:47:21
    开发 UDF 步骤,实现小写转大写 pom.xml 加入Hive 依赖JAR包 创建类继承UDF 方式名称: evaluate 返回值不能为null 一定要测试 代码package om.beifeng.bigdata; import org.apache.commons.lang.StringUtils; ...
  • 十八、Hive 中UDF编程

    千次阅读 2017-02-23 19:58:17
    依据课程讲解 UDF 编程案例,完成练习,总结开发 UDF 步骤,代码贴图, 给予注释,重点在于清晰编程思路。 2) 完成如下数据字段中双引号,自定义 UDF,完成编程测试。 新建maven项目。配置pom.xml  ...
  • 2、Hive UDF编程实例

    2017-04-21 09:57:00
    Hive的UDF包括3种:UDF(User-Defined Function)、UDAF(User-Defined Aggregate Function)和UDTF(User-Defined Table-Generating Function),Hive只支持Java编写UDF,其他的编程语言只能通过select transform转化为流...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,816
精华内容 2,726
关键字:

UDF编程