热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

上篇:

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包

        
            org.apache.hive
            hive-exec
            1.2.1
        
        
        
            org.apache.hadoop
            hadoop-common
            3.0.1
            provided
        

上具体代码:

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 ){
            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

 


推荐阅读
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
author-avatar
樂烙清欢1982
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有