• 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查看函数

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

    执行我们的函数就可以了

  • 相关阅读:
    逻辑运算(二)
    Rust基础类型
    Rust简单demo
    逻辑基础(一)
    webpack配置typescript项目
    Go并发原理
    JS实现取任意类型的数组交集并集方法的思考
    JS 可逆加密的一种实现
    所有中文复姓
    将中文姓名转为拼音英文名的一种实现
  • 原文地址:https://www.cnblogs.com/bqwzy/p/12535641.html
Copyright © 2020-2023  润新知