凡是过往,皆为序章

0%

大数据_11(函数,数据压缩存储,调优)

本篇总结Hive的函数、数据压缩和数据存储格式 以及 Hive调优等。


Hive函数

内置函数

内容较多,见《Hive官方文档》

  1. 查看系统自带的函数

    1
    hive> show functions;
  2. 显示自带的函数的用法

    1
    hive> desc function upper;
  3. 详细显示自带的函数的用法

    1
    hive> desc function extended upper;

常用内置函数

1
2
3
4
5
6
7
8
9
10
11
#字符串连接函数: concat 
select concat('abc','def’,'gh');
#带分隔符字符串连接函数: concat_ws
select concat_ws(',','abc','def','gh');
#cast类型转换
select cast(1.5 as int);
#get_json_object(json 解析函数,用来处理json,必须是json格式)
select get_json_object('{"name":"jack","age":"20"}','$.name');
#URL解析函数
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST');
#explode:把map集合中每个键值对或数组中的每个元素都单独生成一行的形式

自定义函数

概述

  1. Hive 自带了一些函数,比如:max/min等,当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF).
  2. 根据用户自定义函数类别分为以下三种:
    1. UDF(User-Defined-Function)
      • 一进一出
    2. UDAF(User-Defined Aggregation Function)
      • 聚集函数,多进一出
      • 类似于:count/max/min
    3. UDTF(User-Defined Table-Generating Functions)
      • 一进多出
      • lateral view explore()
  3. 编程步骤:
    1. 继承org.apache.hadoop.hive.ql.UDF
    2. 需要实现evaluate函数;evaluate函数支持重载;
  4. 注意事项
    1. UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
    2. UDF中常用Text/LongWritable等类型,不推荐使用java类型;

UDF 开发实例

需求,建立的自己的my_upper方法,将输入的字符串第一个字符大写。

1、创建maven工程

其中的pom.xml文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.5</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

注意:这一步踩了坑,hive-exec坐标引用后爆红(org\pentaho\pentaho-aggdesigner-algorithm\5.1.5-jhyde.jar有红线),解决方法:

2、编写程序代码

开发 Java 类集成 UDF

1
2
3
4
5
6
7
8
9
10
public class MyUDF  extends UDF{
public Text evaluate(final Text str){
String tmp_str = str.toString();
if(str != null && !tmp_str.equals("")){
String str_ret = tmp_str.substring(0, 1).toUpperCase() + tmp_str.substring(1);
return new Text(str_ret);
}
return new Text("");
}
}

3、项目打包

利用maven 的package命令打成jar包,并上传到集群(bigdata3)的hive的lib目录下。

4、添加jar包到hive中

重命名我们的jar包名称

1
2
cd /export/servers/apache-hive-2.7.5-bin/lib
mv hive-1.0-SNAPSHOT.jar my_upper.jar

hive的客户端添加我们的jar包

1
hive> add jar /export/servers/apache-hive-2.7.5-bin/lib/my_upper.jar;

5、设置函数与我们的自定义函数关联

1
hive> create temporary function my_upper as 'udf.MyUDF';

6、使用自定义函数

1
2
3
select my_upper('hello world!');

# 结果 Hello world!

数据压缩、数据存储格式

~感谢你请我吃糖果~
-------------本文结束,感谢您的阅读,欢迎评论留言!-------------