Hadoop3集群搭建之——hive添加自定义函数UDF
上篇:
下篇:
hive 提供的函数,总是不能很贴切的满足我们程序的需要,这时候就需要自定义hive的函数了
hive 函数,大概分为三种:
udf : 一行输入,一行输出
udtf : 一行输入,多行输出
udaf : 多行输入,一行输出,一般在group by中使用group by
不多说,直接开始编写。
1、UDF函数
我们的用户id,使用固定格式,如 000000001、000000002.。。。。。这样递增
在把用户每日数据,写入hbase的时候,设计row key 为:userid_yyyymmdd,这样有一个问题,由于hbase存储是以row key 递增的,
就会导致数据不均衡,随机读写命中率低(hbase读的时候,会吧row key附近的block块都读上来)。
然后,就需要把userid,翻转一下,如下:
。
。
。
基本这样,在使用hive算数据的时候,就把userid翻转一下,拼上当天的日期,rowkey 就出来了
下面开始编写revert 函数,代码上传到码云:https://gitee.com/SpringMoon-Venn/hivefunction
简单介绍一下:
hive function是个简单的java项目,只加载了两个jar包:hive-exec包和hadoop-common包
<!--hive 2.3. 最新不会用,退回旧版-->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.</version>
</dependency>
<!--hadoop common-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.0.</version>
<scope>provided</scope>
</dependency>
上具体代码:
public class RevertString extends UDF {
/**
* evalute function: use overload 可以重载,自动识别
* @param str
* @return
*/
public String evaluate(String str) {
// if string is null or ""
if(org.apache.commons.lang.StringUtils.isEmpty(str.trim())){
return "";
}
int len = str.length();
char[] chars = new char[len];
// revert string
for(int i=; i < len; i++){
chars[i] = str.charAt(len - i -);
}
return new String(chars).toString();
}
}
hive UDF函数,主要是继承UDF类,实现 evaluate方法,最后返回的即时转换后的字符串。
由于使用maven做项目管理,直接使用 mvn package,打包,jar包如下:

上传到服务器。
在 $HIVE_HOME/bin 创建.hiverc 文件
添加如下内容:
[hadoop@venn05 bin]$ more .hiverc
add jar /opt/hadoop/lib/hivefunction-1.0-SNAPSHOT.jar;
create temporary function revert_string as 'com.venn.udf.RevertString';
关闭hive client,重新打开,使用自定义函数:
hive>
> select revert_string(userid),userid from sqoop_test limit ;
OK
Hadoop3集群搭建之——hive添加自定义函数UDF的更多相关文章
- Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...
- Hadoop3集群搭建之——hive添加自定义函数UDTF
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...
- Hadoop3集群搭建之——hive安装
Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hbase安装及简单操作 现在到 ...
- Hadoop3集群搭建之——hbase安装及简单操作
折腾了这么久,hbase终于装好了 ------------------------- 上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hado ...
- Hadoop3集群搭建之——配置ntp服务
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 下篇: Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简 ...
- Hadoop3集群搭建之——安装hadoop,配置环境
接上篇:Hadoop3集群搭建之——虚拟机安装 下篇:Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简单操作 上篇已 ...
- Hadoop3集群搭建之——虚拟机安装
现在做的项目是个大数据报表系统,刚开始的时候,负责做Java方面的接口(项目前端为独立的Java web 系统,后端也是Java web的系统,前后端系统通过接口传输数据),后来领导觉得大家需要多元化 ...
- 集群搭建之Hive配置要点
注意点: 在启动Hive 的时候要先启动Hadoop和MySQL服务. Mysql 和 Hive 搭建在 yan00机器上. part1:MySQL配置相关 安装和配置相关命令: Yum instal ...
- Hive2.1.1集群搭建
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
随机推荐
- Docker学习之安装mysql
1.从Docker检索mysql镜像 指令: docker search mysql 2.镜像下载 指令: docker pull mysql:5.7.19 3.查看本地镜像列表 指令: docker ...
- python 库安装方法及常用库
python 库安装方法及常用库 python库安装方法: 方法一:setpu.py 1.下载库压缩包,解压,记录下路径:*:/**/……/ 2.运行cmd,切换到*:/**/……/目录下 3.运行s ...
- mybatis 返回类型为 java.lang.String 接收为null的情景
<select id="selectOnly" parameterType="java.util.Map" resultType="java.l ...
- django具体操作(七)
新增组件 使用 python manage.py startapp新建一个app,并且在settings中注册,添加stark.apps.StarkConfig, 然后在stark的apps中添加re ...
- [leetcode]445. Add Two Numbers II 两数相加II
You are given two non-empty linked lists representing two non-negative integers. The most significan ...
- 使用HttpClient 传送form 表单的请求
在项目中用到了,需要使用HttpClient 进行模拟表单传送form 表单的需求,在平常的项目中,大概都是传送json串的样式需求,但是如何才能给对应的服务器传送一个form 表单呢? 这就需要了N ...
- SQL update语句 更新和查询同一张表 冲突
#update 和 select在同一张表的时候会显示冲突 报错信息: [Err] 1093 - You can't specify target table 'tb_a' for update i ...
- SAP请求号的传输
SAP传输目的: SAP传输目的是把开发机中的程序或对象传输到对应的测试机或生成机中,保持各系统的同步性,方便测试和最后的部署! SAP求情号传输的步骤: 1.创建一个请求号 2.用SE10进入如下界 ...
- 梦殇 chapter one
梦殇 chapter one 星梦 天空中飘着几片云,喝着小鸟的欢呼声,这一切似乎显得愈加可爱了. 不觉间已经到了2013年,错过的12年,似乎在向我们招手,不知道远方的朋友们,你们还好吗? 是否也会 ...
- Excel上传找到错误数据类型
一:查询数据库表中字段的类型语句 SELECT CASE WHEN col.colorder = 1 THEN obj.name ELSE '' END AS 表名, col.colorder AS ...