上篇:

Hadoop3集群搭建之——虚拟机安装

Hadoop3集群搭建之——安装hadoop,配置环境

Hadoop3集群搭建之——配置ntp服务

Hadoop3集群搭建之——hive安装

Hadoop3集群搭建之——hbase安装及简单操作

下篇:

Hadoop3集群搭建之——hive添加自定义函数UDTF

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的更多相关文章

  1. Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)

    上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...

  2. Hadoop3集群搭建之——hive添加自定义函数UDTF

    上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...

  3. Hadoop3集群搭建之——hive安装

    Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hbase安装及简单操作 现在到 ...

  4. Hadoop3集群搭建之——hbase安装及简单操作

    折腾了这么久,hbase终于装好了 ------------------------- 上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hado ...

  5. Hadoop3集群搭建之——配置ntp服务

    上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 下篇: Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简 ...

  6. Hadoop3集群搭建之——安装hadoop,配置环境

    接上篇:Hadoop3集群搭建之——虚拟机安装 下篇:Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简单操作 上篇已 ...

  7. Hadoop3集群搭建之——虚拟机安装

    现在做的项目是个大数据报表系统,刚开始的时候,负责做Java方面的接口(项目前端为独立的Java web 系统,后端也是Java web的系统,前后端系统通过接口传输数据),后来领导觉得大家需要多元化 ...

  8. 集群搭建之Hive配置要点

    注意点: 在启动Hive 的时候要先启动Hadoop和MySQL服务. Mysql 和 Hive 搭建在 yan00机器上. part1:MySQL配置相关 安装和配置相关命令: Yum instal ...

  9. Hive2.1.1集群搭建

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

随机推荐

  1. Mac Sublime Text3 如何安装插件

    1.打开sublime text3后按快捷键control+`后下面会出来东西,然后输入如下命令. import urllib.request,os; pf = 'Package Control.su ...

  2. java 基础之--传统网络编程

    什么是socket ? socket 是连接运行在网络上的两个程序间的双向通讯端点 服务器将某一套接字绑定到一个特定的端口,并通过这一套接字等待和监听客户端的的连接请求 客户端通过这个端口与服务器进行 ...

  3. Bootstrap(11)列表组面板和嵌入组件

    一.列表组组件列表组组件用于显示一组列表的组件.//基本实例 <ul class="list-group"> <li class="list-group ...

  4. 在ALV界面添加下拉框

    1.在alv界面表单属性中设置 if wa_fieldcat-fieldname = 'YC_MARK'.              wa_fieldcat-edit = 'X'.           ...

  5. mysql中各种join连表查询总结

    通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...

  6. Java(JFinal)实现sqlserver2017的数据库的备份与恢复

    1.连接数据库的代码: package com.once.xfd.dbutil; import java.sql.Connection; import java.sql.DriverManager; ...

  7. Oracle_高级功能(7) 数据字典视图和动态性能视图

    oracle数据字典 1.概念数据字典是oracle数据库用来存储数据库结构信息的地方.数据字典是用来描述数据库数据的组织方式的,由表和视图组成.数据字典基表是在任何 Oracle 数据库中创建的第一 ...

  8. Oracle触发器(trigger):一般用法

    trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些 ...

  9. php 多进程

    php 在使用场景中一般是处理web应用,所以多进程使用不适合在web中使用,且php-fpm中pcntl_fork不能使用,所以使用场景是在cgi模式下 一个进程调用pcntl_fork函数后,系统 ...

  10. C单链表操作

    #include <stdio.h> #include <stdlib.h> #define ElemType int #define Status int #define O ...