udf开发入门(python udf、hive udf)
开发前的声明
udf开发是在数据分析的时候如果内置的函数解析不了的情况下去做的开发,比方说你只想拆分一个字段,拼接一个字段之类的,就不要去搞udf了,这种基本的需求自带函数完全支持,具体参数可参考文档:
http://spark.apache.org/docs/latest/api/sql/search.html?q=cast
里面列举了所有函数的介绍和使用,推荐优先使用官方推出的,因为自己写的udf如果对一些异常处理不到位可能会导致数据分析的失败或者意想不到的情况。但是内置的函数真的满足不了那就真的没办法了,比如在做数据分析的时候经常使用的是ip解析,这个通常就需要自己开发udf了。
udf的分类
udf平常用的多的也就两种,一种java写的,一种python 所写,下面对这两种情况分别做个简单的demo供大家参考。
udf for java(idea)
1.创建maven工程
file->project structure->modules->点击+号->new module->选择maven
点击next,填写groupid(对应包结构)、artifactid(maven仓库对应的坐标)
source java 代码,操作如下图file->project structure,
点击apply,
2.开始写java代码
pom文件添加依赖
<dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0</version></dependency>
import org.apache.hadoop.hive.ql.exec.UDF;public class HelloUdf extends UDF {public String evaluate(String ip) {return ip+ip;}public int evaluate(int ip) {return ip+ip;}}
3.编包上传到hdfs
在此项目pom文件的路径下执行mvn clean install
将target文件中生成的jar文件上传到hdfs上,路径自己自定义,我直接上传到/。
sudo -u hdfs hdfs dfs -put testudf-1.0-SNAPSHOT.jar /
4.使用hivesql或者sparksql加载自定义函数
beeline -u jdbc:hive2://node113.leap.com:10000 -n hive
create function test.iptonum as 'com.test.HelloUdf' using jar 'hdfs:///testudf-1.0-SNAPSHOT.jar';
(com.liubl.HelloUdf为代码类的全路径自己去粘贴一下)
(测试sql见图)
udf for python
python udf入门我就不重新阐述了,我看到有一位同学的博客写的很清晰,推荐博客
https://blog.csdn.net/qq_26937525/article/details/54136317
存在的问题:
在数据清洗过程中,如果使用的是TransForm而不是UDF的话,因为Python是直接向系统申请资源的,而不是像ResourceManager申请资源,故会导致启动的Python脚本对内存和CPU的使用不可控,尤其是当启动多个Map时,因为一个map将启动一个Python因此,当同时运行的map有几十个时(测试集群较小),同时将尝试启动相同个数的python(资源够用的话仍然会启动几十个),且此时Map占用的内存是不会释放掉的他在一直等待Python的结果,这将导致python可用的资源仅仅是原本分配给系统的很少的资源(注:在安装Hadoop时,对于单个节点,一般仅仅给系统留出很少的内存,其他的内存全部分给了集群。例如32G物理内存的节点给系统和dataNode+nodeManager的内存就4-8个G,同时CPU核数也不足节点的一半,剩余的内存和cpu核数全部划分给集群使用。需要注意的是,这里虽然说是划分给集群使用,仅仅是逻辑上的划分,即规定集群可以使用的最大的物理内存,超过该内存时MR可以认为是不会抢占分配给系统+DataNode+nodeManager的内存的,但是当集群中没有MR在执行,即没有map或者reduce在执行时,划分给集群的这部分资源是可以被系统使用的。而若有map和Reduce在执行时,运行map和reduce的JVM的资源不会因为系统进程需要使用而被释放掉)所以,所有正在执行的Map一直在等待python的运行结果而没有释放掉其自身占用的资源,故python无法使用分配给集群的资源而只能使用预留给系统+nodeManager+DataNode的4-8G的内存和很少的cpu核数。因此会导致集群的资源无法被高效利用。
综上,使用Transform(Python)执行效率低的根本原因在于Python是直接向操作系统申请资源,而不是向YARN的ResourceManager申请资源,故而导致节点的资源无法高效组织和被利用。此外,不要轻易使用transform!不要轻易使用transform!不要轻易使用transform
udf开发入门(python udf、hive udf)相关推荐
- Python编写Hive UDF
2019独角兽企业重金招聘Python工程师标准>>> 1. 目的 从string类型的字段中解析并汇总每种category类型的总amount 2. 素材 表名:test_tabl ...
- MaxCompute Studio使用心得系列6——一个工具完成整个Python UDF开发
摘要: 2017/12/20 北京云栖大会上阿里云MaxCompute发布了最新的功能Python UDF,万众期待的功能终于支持啦,我怎么能不一试为快,今天就分享如何通过Studio进行Python ...
- python 游戏开发_Python游戏开发入门
spContent=--玩游戏的最高境界是什么? --当然是设计一款属于自己的游戏! --设计游戏不是目的,从游戏看道理,从道理看人生,人生何尝不是属于自己的游戏? --"弹指之间·享受创新 ...
- Hive UDF开发
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. Hive的UDF开发只需要重构UDF类的evaluate函数即可.例 ...
- 【若泽大数据实战第十九天】Hive 函数UDF开发以及永久注册udf函数
前言: 回顾上期课程,上次课我们讲了聚合函数,多进一出, 分组函数 group by,出现在select里面的字段除了分组函数之外,其他都要出现在group by里面,分组函数的过滤必须使用hivi ...
- Hive UDF 开发手册
文档目的 笔者在工作中有接触到 Hive UDF 的开发任务,大部分 UDF 开发并不困难,困难的往往是: 不清楚 UDF 代码的编写逻辑(UDF.UDTF.UDAF) 不清楚如何传入特定类型的参数 ...
- Hive 简单UDF开发
因为业务需要,需要udf辅助开发,就仿照官网案例和参考了一些博客,自己试着开发了一个简单的时间戳转日期字符串的函数,用来简化hql代码. 总结一下开发hive udf的几个步骤: 1. 用java开发 ...
- Hive 函数UDF开发以及永久注册UDF函数
explode: (把一串数据转换成多行的数据) 创建一个文本: [hadoop@ruozehadoop000 data]$ vi hive-wc.txt hello,world,welcome he ...
- hive UDF函数
虽然Hive提供了很多函数,但是有些还是难以满足我们的需求.因此Hive提供了自定义函数开发 自定义函数包括三种UDF.UADF.UDTF UDF(User-Defined-Function) UDA ...
最新文章
- html页面在微信分享php,详解html静态页面实现微信分享思路的示例代码分析
- Linux网卡改为动态过去IP,Linux修改网卡ens33为eth0以及centos7下修改动态IP为静态IP地址...
- Spring AOP功能和目标
- LabVIEW设计模式系列——移位寄存器
- Java文件合并变得语义化
- echo回声不能用了_已懂得用电子分频器,为何不继续加个效果器让音响效果更好?...
- 用eclipse往mysql插入中文出现乱码解决方法
- 【亲测有效】Centos安装完成docker后启动docker报错docker: unrecognized service的两种解决方案
- 史上最全jmeter逻辑控制器案例详解
- 五周第二次课(4月19日)
- 重写equals方法(未完)
- PAT (Basic Level) Practise (中文)- 1002. 写出这个数 (20)
- BN层对神经网络神经元数据分布的影响
- VMWare安装64位XP中文教程
- 知网论文[全PDF下载],从此告别CAJ阅读器
- 基于 Echarts 实现可视化数据大屏展示
- 如何判断某个类是否有某个注解?
- 途家2020校招算法笔试题——寻找最大数——背包问题
- kafka数据保存时间问题与kafka的性能测试
- java6发布_Minecraft Java版 1.13-pre6 发布
热门文章
- 哈尔滨理工计算机考研真题,哈尔滨理工大学考研真题各专业汇总
- 【C++学习】Effective C++
- Tomcat 配置集锦
- Navigation测试常用网址导航工具
- 开源mysql web平台_Yearning Mysql–Web端SQL审核平台
- 深度相机原理揭秘之飞行时间法(TOF)
- thinkphp6 循环 视图_ThinkPHP模板循环输出Volist标签用法实例详解
- 机器学习中数据预处理——标准化/归一化方法(scaler)
- Oracle中序列的操作以及使用前对序列的初始化
- 怎么将三张图片合成一张图片?