UDF


1. bin/hiveserver2
2. !connect jdbc:hive2://hadoop.baizhiedu.com:10000 root 321456 org.apache.hive.jdbc.HiveDriver

一、编写hive UDF程序的依赖

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

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

二、使用hadoop 基本的依赖(pom文件中引入)

对于Hadoop2.x.x版本,需要引入4个jar:
hadoop-common
hadoop-hdfs
hadoop-mapreduce-client-core
hadoop-client
jdk.tools(一般需要引入,否则报错)

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>2.6.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-yarn-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-yarn-common</artifactId>
            <version>2.6.0</version>
        </dependency>
        
 hive自定义udf依赖的包:hadoop基础包  hive-exec

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


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

三、生成jar包 例如:lower.jar 

四、上传到hive的机器上,即放在机器本地路径

五、add jar /opt/datas/lower.jar;  将jar包加载上。

六、创建Function命令:

CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ]; file_uri可以为hdfs上文件路径

例如:create temporary function m_lower(自己起的函数名字)   as  "com.yiwan.CTestUDF"(类的路径)  ;


删除: drop function function_name;
显示: show functions ['regex']

七、补充

最新版本hive 0.13.*以后的版本 直接用:create function lower_upper(自己命名的函数名) as 'hdfs://hadoop/baizhiedu.com:8020/user/jars/lower.jar'(hdfs上的类路径,必须把jar包上传到hdfs)  ;

=================================================

一、自定义UDF(一个输入,一个输出)
    1. 实现一个大小写转换的自定义函数。
        实现完成后
        1. 添加jar:add jar /home/hadoop/jobs/beifeng14-0.0.1.jar;
        2. 创建function:
            临时function: create temporary function temp_f as 'com.beifeng.hive.ql.UDFLowerOrUpperCase';
            永久function: create function lower_upper as 'com.beifeng.hive.ql.UDFLowerOrUpperCase';
        3. 使用
            select [dbname.]lower_upper(studentname) from beifeng13.students;
二、自定义UDAF(多个输入,一个输出) 和group by一起操作
    1. UDAF介绍
        PARTIAL1:iterate&terminatePartial  map的输入阶段
        PARTIAL2: merge&terminatePartial map输出阶段
        FINAL: merge&terminate reducer输入&reducer输出阶段
        COMPLETE: iterate&terminate 没有reducer的map输出阶段
    2. UDAF实例:实现自定义sum函数
        create function self_sum as 'com.beifeng.hive.ql.UDAFSumCase';
三、自定义UDTF(一个输入,多个输出)
    1. UDTF实例:解析爬虫数据,从数据中读取产品id、产品名称、价格。
        1. 实现udtf,并打包jar,copy到linux机器上。
        2. 创建hbase关联表
            create external table hive_data(rowkey string,content string) row format serde 'org.apache.hadoop.hive.hbase.HBaseSerDe' stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties('hbase.columns.mapping'=':key,f:content') tblproperties ('hbase.table.name'='data');
        3. 创建函数
            add jar /home/hadoop/jobs/beifeng14-0.0.1.jar;
            create function f1 as 'com.beifeng.hive.ql.UDTFCase';
四、hive集成自定义函数的各种不同的方式
    1. 修改hive-site.xml
        <property>
        <name>hive.aux.jars.path</name>
        <value>file:///home/hadoop/jobs/beifeng14-0.0.1.jar</value>
  </property>
    最常用的:使用将jar上传到hdfs中,然后再进行操作的方式。
        1. 上传文件到hdfs: dfs -put /home/hadoop/jobs/beifeng14-0.0.1.jar /beifeng/beifeng14-0.0.1.jar
        2.  创建函数:create function f2 as 'com.beifeng.hive.ql.UDTFCase' using jar 'hdfs://hh:8020/beifeng/beifeng14-0.0.1.jar';
        3. 正常使用  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值