hive添加UDF

步骤如下:
  • 函数分为永久和临时函数,后者会话退出则消失,前者不会

  • 查看已有函数(创建好后也可以通过这个来查看是否成功

show functions;
  • 写UDF的java文件,如:
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ package org.apache.hadoop.hive.ql.udf; import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.serde2.ByteStream;
import org.apache.hadoop.hive.serde2.io.ByteWritable;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.hive.serde2.io.ShortWritable;
import org.apache.hadoop.hive.serde2.io.TimestampWritable;
import org.apache.hadoop.hive.serde2.lazy.LazyInteger;
import org.apache.hadoop.hive.serde2.lazy.LazyLong;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text; /**
* UDFToString.
*
*/
public class UDFToString extends UDF {
private final Text t = new Text();
private final ByteStream.Output out = new ByteStream.Output(); public UDFToString() {
} public Text evaluate(NullWritable i) {
return null;
} private final byte[] trueBytes = {'T', 'R', 'U', 'E'};
private final byte[] falseBytes = {'F', 'A', 'L', 'S', 'E'}; public Text evaluate(BooleanWritable i) {
if (i == null) {
return null;
} else {
t.clear();
t.set(i.get() ? trueBytes : falseBytes);
return t;
}
} public Text evaluate(ByteWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyInteger.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
} public Text evaluate(ShortWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyInteger.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
} public Text evaluate(IntWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyInteger.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
} public Text evaluate(LongWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyLong.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
} public Text evaluate(FloatWritable i) {
if (i == null) {
return null;
} else {
t.set(i.toString());
return t;
}
} public Text evaluate(DoubleWritable i) {
if (i == null) {
return null;
} else {
t.set(i.toString());
return t;
}
} public Text evaluate(Text i) {
if (i == null) {
return null;
}
i.set(i.toString());
return i;
} public Text evaluate(TimestampWritable i) {
if (i == null) {
return null;
} else {
t.set(i.toString());
return t;
}
} public Text evaluate (BytesWritable bw) {
if (null == bw) {
return null;
}
t.set(bw.getBytes(),0,bw.getLength());
return t;
}
}
  • 将写好的java文件打包成jar:
jar cvf UDFUpper.jar -c bin UDFUpper.java
  • 进入hive,添加jar文件
hive> add jar UDFToString.jar;
Added [UDFToString.jar] to class path
Added resources: [UDFToString.jar]
  • 添加临时函数(会话结束函数消失

    • 进入hive,添加jar文件

      hive> add jar UDFToString.jar;
      Added [UDFToString.jar] to class path
      Added resources: [UDFToString.jar]
    • 添加函数(注意class所在包)

      语法为:
      CREATE TEMPORARY FUNCTION function_name AS class_name; hive> create temporary function mytest as 'org.apache.hadoop.hive.ql.udf.UDFToString';
      OK
      Time taken: 0.009 seconds 路径出错会提示:
      FAILED: Class default.udf.Upper not found
      FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask 具体类路径为UDF java文件里的package+'.'+java文件名
    • 删除临时函数

      DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
  • 添加永久函数

    • 添加

      语法:
      CREATE FUNCTION [db_name.]function_name AS class_name
      [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ]; 注意:
      如果hive非本地模式运行,则后面应该是为非本地文件等URI,如hdfs路径,否则会报错; 例子:
      hive> create function default.hah as "org.apache.hadoop.hive.ql.udf.UDFToString" using jar "UDFToString.jar";
      FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask. Hive warehouse is non-local, but UDFToString.jar specifies file on local filesystem. Resources on non-local warehouse should specify a non-local scheme/path hive> create function default.hah as "org.apache.hadoop.hive.ql.udf.UDFToString" using jar "hdfs:///hdfs_home/UDFToString.jar";
      converting to local hdfs:///hdfs_home/UDFToString.jar
      Added [/tmp/fda83e6d-e1af-4005-affa-9f9c4ee226a6_resources/UDFToString.jar] to class path
      Added resources: [hdfs:///hdfs_home/UDFToString.jar]
      OK
      Time taken: 0.521 seconds
    • 删除

      DROP FUNCTION [IF EXISTS] function_name;
引用第三方包的情况

假如在你的UDF文件里引用了第三方包,那么只需要在生成jar文件的时候改变一下命令就可以了,如下:

javac -classpath hive-0.4.1.jar:commons-io-2.5.jar:bcprov-jdk15on-158.jar  com/example/hive/udf/UDFDecrypt.java

jar -cvf UDFDecrypt.jar ./com/example/hive/udf/UDFDecrypt.class

上面javac命令中classpath跟的是用到的第三方包名,使用:做间隔,后面跟的是java文件路径

此处参考了这里

参考

hive添加UDF的更多相关文章

  1. hive 添加UDF(user define function) hive的insert语句

    add JAR /home/hadoop/study/study2/utf.jar; package my.bigdata.udf; import org.apache.hadoop.hive.ql. ...

  2. Hive 10、Hive的UDF、UDAF、UDTF

    Hive自定义函数包括三种UDF.UDAF.UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) ...

  3. hive中UDF、UDAF和UDTF使用

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...

  4. hive下UDF函数的使用

    1.编写函数 [java] view plaincopyprint?package com.example.hive.udf;    import org.apache.hadoop.hive.ql. ...

  5. 在hive中UDF和UDAF使用说明

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...

  6. 【转】hive中UDF、UDAF和UDTF使用

    原博文出自于: http://blog.csdn.net/liuj2511981/article/details/8523084 感谢! Hive进行UDF开发十分简单,此处所说UDF为Tempora ...

  7. hive的UDF读取配置文件

    hive的UDF读取配置文件 实现步骤 在读取配置文件的写为./file_name,然后在添加UDF的时候把配置文件也加入资源就好了: add jar xxx.jar; add file file_n ...

  8. 【Hive五】Hive函数UDF

    Hive函数 系统自带的函数 查看系统自带的函数 查看系统自带的函数 show functions; 显示自带的函数的用法 desc function upper; 详细显示自带的函数的用法 desc ...

  9. hive premanent udf 发布...

    起因: hive premanent udf 发布成功,但是hue 无法加载使用(但是cli 是可用的) ,处理半天,依然不可用!后来发现重启hiveserver2 就可以了     具体步骤如下:  ...

随机推荐

  1. Nginx Rewrite正则表达式案例

    前两天简单整理了下Nginx的URL Rewrite基本指令,今天谈谈Nginx Rewrite的location正则表达式. 1.Nginx Rewrite 基本标记(flags) last 相当于 ...

  2. 老男孩linux实战培训初级班第三次课课前考试题

    ################################################################ 本文内容摘录于老男孩linux实战运维培训中心考试题 如有转载,请务必 ...

  3. android dialog加载中动画效果

    //显示动画 dialog = new Dialog(context, R.style.loading); dialog.setContentView(R.layout.loadinglayout); ...

  4. Oracle命令(二):Oracle数据库几种启动和关闭方式

    一.Oracle数据库几种启动方式 1.startup nomount 非安装启动,这种方式下启动可执行:重建控制文件.重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进 ...

  5. Config程序配置文件操作实践进阶之ConfigurationSectionGroup

    今天又进一步对System.Configuration下的ConfigurationSectionGroup类及相关的类与方法进行了研究.发现要构建多层次嵌套的XML标签 则必须用到Configura ...

  6. C#中const 详细分析与说明

    const是一个c语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮 ...

  7. Linux 4.10中两个新特性与我的一段故事

    今早5点半起来没有開始写文章,而是去西湾红树林连跑带走折腾了将近20公里.回来后就8点多了...洗了个澡之后坐稳当.開始写一段关于我的故事.        在2014年到2015年期间,我在负责研发一 ...

  8. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  9. python yield的解释

    链接地址: http://pyzh.readthedocs.io/en/latest/the-python-yield-keyword-explained.html https://www.jians ...

  10. OpenUDID 实现UDID替代

    http://www.cnblogs.com/zhulin/archive/2012/03/26/2417860.html 补充:还有两个比较通用的开源解决方案: OpenUDID:https://g ...