Hive与MapReduce相关排序及自定义UDF函数
原文链接:
https://www.toutiao.com/i6770870821809291788/
Hive和mapreduce相关的排序和运行的参数
1.设置每个reduce处理的数据量(单位是字节)
我们在hive中查看下

配置文件hive-site.xml.template

我们打开配置文件可以看到

这是256MB

如果超过1G,将使用4个reducers

2、设置最大运行的reduce的个数
同上我们可以在配置中找到下面的内容

复制到记事本里,简化了描述,从配置中我们可以看到默认reduce个数是1009

3.实际运行的reduce的个数
这个去哪里看呢?我们用之前执行过的reduce

访问8088端口,查看历史history

进入后在configuration中可以搜索到,可以看到我们的语句是否有reduce。
默认设置在hive中可以看到

如果我们使用下面的排序,是否reduce的数量有关系呢?
order by 全局排序
sort by:局部排序
distribute by (底层是MR分区)
cluster by:相当于distribute by + sort by组合使用
假如我们设置成3个

执行语句
select * from emp order by sal;


所以对于order by 全局排序,设置多个reduce的没有太大作用。
执行语句
Insert overwrite local directory '/data/hivetest/export_local_emp' select * from emp sort by sal desc;
查看结果,reduce是3个

生成文件

查看文件内容,可以看到每个都排序了

所以对于sort by 局部排序,设置多个reduce的是有作用的。
执行语句
insert overwrite local directory '/opt/hivetest/distribute_test' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from emp distribute by deptno sort by sal ;

我们查看文件

查看文件内容,都已经排序了

所以对于distribute by 局部排序,设置多个reduce的是有作用的。有两个注意的地方
(1)可以按照指定的字段进行分区
(2)先分区后排序,一般和sort by联合使用
执行语句
insert overwrite local directory '/data/hivetest/cluster_test' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from emp cluster by sal ;

查看文件

查看内容

所以对于cluster by 局部排序,设置多个reduce的是有作用的,排序只能降序排序,不能指定排序规则
自定义函数(UDF)一进一出
实现一个功能,转换大小写,
首先创建一个maven项目


添加依赖
下面是依赖的主要内容
org.apache.hadoop
hadoop-client
2.7.3
org.apache.hive
hive-exec
1.2.1
org.apache.hive
hive-jdbc
1.2.1


创建一个类

编写代码

编写一个测试方法,测试代码

将写好的代码打成jar包,上传linx

一直点击下一步,其中注意主类的选择

将jar添加到hive里面去
add jar /data/hivetest/hive_udf.jar;
将包上传

我们进入hive,使用db_deptemp库

执行命令

list jars 和 delete jar 分别是显示jar和删除jar

创建临时函数
create temporary function convert_bl as 'com.xlglvc.xxx.mapredece.hiveudf.TestHiveUDF';

可以利用show functions查看函数

我们查看已有表的数据,可以看到很多大写的名字

执行我们的函数就可以了

Hive与MapReduce相关排序及自定义UDF函数的更多相关文章
- 自定义UDF函数应用异常
自定义UDF函数应用异常 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: http://www.cnblogs.com/sxt-zkys/QQ技术交流群:299142667 ...
- 如何给Apache Pig自定义UDF函数?
近日由于工作所需,需要使用到Pig来分析线上的搜索日志数据,散仙本打算使用hive来分析的,但由于种种原因,没有用成,而Pig(pig0.12-cdh)散仙一直没有接触过,所以只能临阵磨枪了,花了两天 ...
- 047 SparkSQL自定义UDF函数
一:程序部分 1.需求 Double数据类型格式化,可以给定小数点位数 2.程序 package com.scala.it import org.apache.spark.{SparkConf, Sp ...
- 三种方法实现Hadoop(MapReduce)全局排序(1)
我们可能会有些需求要求MapReduce的输出全局有序,这里说的有序是指Key全局有序.但是我们知道,MapReduce默认只是保证同一个分区内的Key是有序的,但是不保证全局有序.基于此,本文提供三 ...
- 自定义udf添加一列
//创建得分窗口字典 var dict= new mutable.HashMap[Double, Int]() ){ dict.put(result_Score(i),i) } //自定义Udf函数 ...
- Spark注册UDF函数,用于DataFrame DSL or SQL
import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions._ object Test2 { def ...
- 2.13 Hive中自带Function使用及自定义UDF编程
UDF:User Definition Function 一.function #查看自带的函数 hive (db_hive)> show functions; #查看一个函数的详细用法 hiv ...
- Hive UDF IP解析(二):使用geoip2数据库自定义UDF
开发中经常会碰到将IP转为地域的问题,所以以下记录Hive中自定义UDF来解析IP. 使用到的地域库位maxmind公司的geoIP2数据库,分为免费版GeoLite2-City.mmdb和收费版Ge ...
- Hive 自定义UDF操作步骤
Hive 自定义UDF操作步骤 需要自定义类,然后继承UDF 然后在方法envluate()方法里面实现具体的业务逻辑,打包上传到linux(以免出错打包成RunningJar) 一.创建临时函数 ( ...
随机推荐
- 转:ios delegate
首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事.也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法. 其次,我简单的总结了 ...
- <转>C++继承中虚函数的使用
转自:http://blog.csdn.net/itolfn/article/details/7412364 一:继承中的指针问题. 1. 指向基类的指针可以指向派生类对象,当基类指针指向派生类对 ...
- [BUUCTF]PWN——[BJDCTF 2nd]ydsneedgirlfriend2
[BJDCTF 2nd]ydsneedgirlfriend2 附件 步骤: 例行检查,64位程序,开启了canary和nx 试运行一下程序,看看大概的情况,经典的堆块的布局 64位ida载入,习惯性的 ...
- 1、学习算法和刷题的框架思维——Go版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- LuoguB2147 求 f(x,n) 题解
Content 求给定 \(x,n\),求 \(f(x,n)=\sqrt{n+\sqrt{(n-1)+\sqrt{(n-2)+\sqrt{\dots+2+\sqrt{1+x}}}}}\) 的值. So ...
- 针对HttpClient 重写 HttpRequestRetryHandler针对特定异常 增加重试
调用方法: public static String doGet(String url) { try { RequestConfig defaultRequestConfig = RequestCon ...
- jackson-databind-2.2.3.jar,ackson-annotations-2.2.3.jar和jackson-core-2.2.3.jar下载
jackson包开发下载,包括如下3个jar文件 jackson-databind-2.2.3.jar,还需要jackson-annotations-2.2.3.jar和jackson-core-2. ...
- C++实现反射---RTTR库的使用
使用过C#或者Java 的童鞋,应该对这些语言提供的反射机制有所了解.所谓反射,在我看来就是在只知道一个类的名字(字符串形式)的情况下,自动创建出具体的类实例,并且能够枚举该类型拥有的属性.方法等信息 ...
- JS中使用reconnecting-websocket实现websocket断开自动重新连接
这里用了第三方的js 官方地址:https://github.com/joewalnes/reconnecting-websocket 引入js reconnecting-websocket.min. ...
- Centos7查看防火墙对应的开放端口以及进行端口操作
1.查看开放端口列表 [root@host bin]# firewall-cmd --list-ports 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 12888/t ...