1 编写自己的udf方法hello

package cn.zhangjin.hive.udf;import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;/*** @author zj* @create 2019-02-22 17:51* 一个UDF: hello*/@Description(name = "sayhello",value = "_FUNC_(input_str) - returns Hello : input_str ",extended = "Example:\n "+ "  > SELECT _FUNC_('wxk') FROM src LIMIT 1;\n"+ "  'Hello : wxk'\n")
public class hello extends UDF {public Text evaluate(Text input) {return new Text("Hello: " + input);}
}  

pom配置

    <url>http://maven.apache.org</url><properties><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><repositories><repository><id>cloudera</id><url>https://repository.cloudera.com/artifactory/cloudera-repos</url></repository></repositories><!-- 设定插件仓库 --><pluginRepositories><pluginRepository><id>jeesite-repos</id><name>Jeesite Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></pluginRepository></pluginRepositories><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>${hadoop.version}</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>${hive.version}</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>${hive.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency></dependencies>

  

2 下载hive源码

源码下载:http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0-src.tar.gz
参见:FunctionRegistry  
3 自己修改代码
(1)修改udf函数,并放入源码中 
将hello.java  放入 hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/udf 文件夹中
vi hello.java
将 package com.****.hello; 修改为 package org.apache.hadoop.hive.ql.udf;

(2)修改FunctionRegistry.java 文件

vi hive-1.1.0-cdh5.7.0/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
文件头部 一长串 import 下添加,因为我们要吧这个UDF添加进去。
import org.apache.hadoop.hive.ql.udf.hello;文件头部 static 块中添加  system.registerUDF("hello", hello.class, false);
如下:
static {system.registerGenericUDF("concat", GenericUDFConcat.class);system.registerUDF("hello", hello.class, false);system.registerUDF("substr", UDFSubstr.class, false);

  

4 重新编译源码

  maven install 这里用的idea导入工程进行编译

5 把编译好的jar上传

  重新部署 或者 只将 编译后的hive-exec-1.1.0-cdh5.7.0.jar 放到原来hive部署的位置即可。两种方式都可以!!

  我这里选择的是只将 编译后的hive-exec-1.1.0-cdh5.7.0.jar 放到原来hive部署的位置即可

  

上传到hive的lib包下面

  /mnt/software/hive-1.1.0-cdh5.7.0/lib

  

6 重新启动hive

  

查询内置函数

hive> show functions ;

发现hello已经注册进去了

7 测试一下函数 没有问题

  

转载于:https://www.cnblogs.com/QuestionsZhang/p/10420076.html

自定义函数hello,并注册到hive源码中并重新编译相关推荐

  1. 初学者也能看懂的 Vue3 源码中那些实用的基础工具函数

    1. 前言 大家好,我是若川.最近组织了源码共读活动.每周读 200 行左右的源码.很多第一次读源码的小伙伴都感觉很有收获,感兴趣可以加我微信ruochuan12,拉你进群学习. 写相对很难的源码,耗 ...

  2. HIVE源码阅读(五)

    1.HQL 是如何转换为MR任务 1.1.Hive 的核心组成介绍 用户接口:Client CLI(command-line interface).JDBC/ODBC(jdbc 访问 hive).WE ...

  3. Caffe源码中io文件分析

    Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/util/io.hpp文件 ...

  4. android系统源码中添加app源码(源码部署移植)

    涉及到系统定制,需要在系统中加入自己的apk工程,但是上网找了很多资料都是不够全面的,或者看了还是没搞懂,我自己也是一点点摸索过来的,花了不少的时间,也是踩了不少的坑,因此特开一文,帮助大家渡河. 申 ...

  5. 初学者也能看懂的 Vue2 源码中那些实用的基础工具函数

    1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 想学源码,极力推荐之前我写的<学习源码整体架构系列>jQuery.underscore.l ...

  6. 大神论坛 逆向分析 Internet Download Manager 序列号算法 附IDM注册机完整源码

    1. 前言 idm version : 6.38 Build 23 2.算法逆向 IDM的序列号验证函数定位在: 下面是在IDA下的代码分析: .text:00510010 push ebp .tex ...

  7. 在 Android 系统源码中自定义系统服务(Custom System Service in AOSP)

    该原创文章首发于微信公众号:字节流动 在 Android 系统源码中自定义系统服务(Custom System Service in AOSP) 配置编译环境(Initial AOSP build e ...

  8. lodash源码中debounce函数分析

    lodash源码中debounce函数分析 一.使用 在lodash中我们可以使用debounce函数来进行防抖和截流,之前我并未仔细注意过,但是不可思议的是,lodash中的防抖节流函数是一个函数两 ...

  9. Hive源码阅读之路

    Hive源码阅读(1)阅读环境搭建 前言:让学习成为一种习惯 环境准备 Hive源码下载 Hive源码目录 hive三个最重要的组件: 其他组件 hive辅助组件 编译源码 配置Hive本地调试 配置 ...

  10. 如何实现游戏陪玩系统源码中注册验证码的自动填写功能

    新用户在注册登录游戏陪玩系统源码时往往需要进行短信验证,如果没有验证码自动填写功能则需要用户自行切换软件进行填写,无异于增添了许多步骤,会影响到用户的使用体验,所以今天我们主要来说一说如何实现游戏陪玩 ...

最新文章

  1. php yar swoole 比较,syar:Swoole 实现的 Yar 服务
  2. 利用OWC创建图表的完美解决方案
  3. mysql 故障处理_MySQL日志故障的处理和分析
  4. Access数据库出现的0x80004005 Unspecified error问题
  5. 晓庄学院计算机科学分数,2016南京晓庄学院艺术类专业录取分数线
  6. 系统相机裁剪比例_要不要买全画幅相机?
  7. 禁止用户通过shell登录
  8. Spring 通过XML配置装配Bean
  9. Hibernate框架使用教程
  10. pacman 查询_Pacman 命令记录
  11. Hive on spark 执行加载不了spark的jars
  12. Ruby完全读书指南
  13. Chart.js中文文档-雷达图
  14. node+express+mock
  15. dmhs oracle to dm8
  16. 基于UCD9248的7系列FPGA电源控制系统实验笔记
  17. android系统息屏设置_Android亮屏和熄屏控制
  18. 中移ML302模组通过MQTT协议接入oneNT平台
  19. ST股票投机(*ST航通)
  20. html相关游戏逆ryona,横板游戏ryona | 手游网游页游攻略大全

热门文章

  1. 机器学习第3周:算法学习
  2. 图算法——欧拉回路问题的解答
  3. Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
  4. PC-启动慢的解决好方法!
  5. celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis]
  6. The Python Debugger Command
  7. C++新标准——C++1x
  8. 颠覆你想象的150个故事(2)
  9. 雷布斯被骗200w??一行代码值两百万?雷军公开小米新logo翻车了?
  10. 架构篇:大型网站技术架构