zoukankan      html  css  js  c++  java
  • Hadoop3集群搭建之——hive添加自定义函数UDF

    上篇:

    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,翻转一下,如下:

    100000000
    200000000
    300000000
    400000000
    500000000
    600000000
    700000000
    。
    。
    。

    基本这样,在使用hive算数据的时候,就把userid翻转一下,拼上当天的日期,rowkey 就出来了

    下面开始编写revert 函数,代码上传到码云:https://gitee.com/SpringMoon-Venn/hivefunction

    简单介绍一下:

    hive function是个简单的java项目,只加载了两个jar包:hive-exec包和hadoop-common包

    <!--hive 2.3.3 最新不会用,退回旧版-->
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-exec</artifactId>
                <version>1.2.1</version>
            </dependency>
            <!--hadoop common-->
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>3.0.1</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=0; i < len; i++){
                chars[i] = str.charAt(len - i -1);
            }
    
            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 10;
    OK
    18185403678    87630458181
    77375403678    87630457377
    77375403678    87630457377
    27175403678    87630457172
    75175403678    87630457157
    20365403678    87630456302
    25555403678    87630455552
    25555403678    87630455552
    34555403678    87630455543
    17545403678    87630454571
  • 相关阅读:
    OC学习一周总结
    C语言基础学习总结
    123
    汇编中中括号[]作用以及lea和mov指令的区别
    C#获取局域网内所有的SQL Server服务器名
    .net 初中级程序员招聘
    C#在客户端与 JS 交互
    [ZT]Mac下安装mysql和workbench
    Eclipse文件夹导入Jar
    Tomcat配置后提示404的解决办法
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/9063594.html
Copyright © 2011-2022 走看看