实验8HiveUDF
实验目的及要求
(1)掌握Hive中全局排序Order by、内部排序Sort by的用法及区别。
(2)掌握Hive中Group by分组语句的用法。
(3)了解Hive中Distribute By分区排序、Group By及Cluster By排序的用法与区别。
实验系统环境及版本
-
Linux Ubuntu 20.04
-
JDK1.8
-
Hadoop3.1.0
-
MySQL8.0.28
-
Hive3.1.2
实验任务
(1)全局排序Order By与内部排序Sort By的用法及应用的场景。
(2)分组查询Group By的应用场景与基本语法。
(3)排序Cluster By与Distribute By和内部排序Sort By的关系及相关操作。
实验内容及步骤
输入jps检查Hadoop相关进程,Hadoop是否已经启动。若未启动,切换到/usr/local/hadoop/sbin目录下,启动Hadoop。
jps
cd /usr/local/hadoop/sbin
./start-all.sh
查看MySQL数据库的运行状态。
sudo service mysql status
如果输出显示MySQL数据库未启动,执行以下启动命令:
sudo service mysql start
开启Eclipse
创建一个Maven工程,groupId输入com.synu.hive,artifactId输入hiveUDF1。
在pom.xml中导入依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.0</version>
</dependency>
</dependencies>
创建一个Java类Hive_UDF:
package hiveUDF1;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Hive_UDF extends UDF {
public String evaluate (final String s) {
if (s == null) {
return null;
}
return s.toLowerCase();
}
}
编写调试Java程序后,在Maven工程hiveUDF上右键单击,在弹出菜单中单击【Run As】命令,在弹出界面中单击【Maven install】按钮,生成JAR包。更名该JAR包并将其存放在本地/opt/datas/目录下。
cp /home/hadoop/workspace/hiveUDF1/target/hiveUDF-0.0.1-SNAPSHOT.jar /opt/datas/hiveudf1.jar
切换到/usr/local/hive/bin目录下,开启Hive,并切换到hivedwh数据仓库。
hive
use hivedwh;
将JAR包添加到Hive的classpath。
add jar /opt/datas/hiveudf.jar;
在Hive界面创建自定义函数myLower:
create temporary function myLower as “hiveUDF.Hive_UDF”;
创建test表,并导入test.txt文件中的数据。
hive> create table test(id int, name string)
> row format delimited fields terminated by ‘\t’;
hive> load data local inpath ‘/opt/datas/test.txt’ into table test;
使用自定义函数myLower查询表test的数据:
select * from test;
select id, name, myLower(name) lowername from test;
删除自定义函数:
drop temporary function myLower;