Hive与MapReduce相关排序及自定义UDF函数

Posted bqwzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ‘ ‘ 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 ‘ ‘ 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函数的主要内容,如果未能解决你的问题,请参考以下文章

Hive UDF 第一篇:怎么实现自己的 hive 自定义函数

Spark(Hive) SQL中UDF的使用(Python)

IDEA下写hive的udf(踩坑教程)

Hadoop基础---MapReduce对数据进行排序

(五)Hive的UDF、UDAF和UDTF自定义函数

自定义UDF函数,从hive保存到mongodb