2021-04-30

1.编写文档目的

大多数企业在使用CDH集群时,考虑数据的安全性会在集群中启用Sentry服务,这样就会导致之前正常使用的UDF函数无法正常使用。本文主要讲述如何在Sentry环境下使用自定义UDF函数。

 

文章概述

  1. 部署UDF JAR 文件
  2. Hive配置
  3. 授权JAR文件
  4. 创建临时函数
  5. 创建永久函数

测试环境

  1. CM和CDH版本为6.2.1
  2. 采用用户

前置条件

  1. 集群Kerberos已启用
  2. 集群已安装Sentry服务且正常使用

 

2. 部署UDF JAR包

1.将开发好的UDF JAR包上传至HServer2及Metastore服务所在服务器统一目录

[root@dloss1 ~]# sudo mkdir /usr/lib/hive-udf-jars
[root@dloss1 hive-udf-jars]# sudo chown -R hive:hive apog-udf-1.0.jar 
[root@dloss1 hive-udf-jars]# ll

2021-04-30(后续换了jar包)

注意:/usr/lib/hive-udf-jars目录及目录下文件的属主为hive,确保hive用户能访问

2.将开发好的UDF JAR上传至HDFS

[root@dloss1 hive-udf-jars]# hadoop fs -mkdir /user/hive/udfjars
[root@dloss1 hive-udf-jars]# hadoop fs -ls /user/hive/udfjars
[root@dloss1 hive-udf-jars]# hadoop fs -put apog-udf-1.0.jar/user/hive/udfjars
[root@dloss1 hive-udf-jars]# hadoop fs -ls /user/hive/udfjars
Found 1 items
-rw-r--r--   3 hive hive   94869756 2021-04-14 16:45 /user/hive/udfjars/apog-udf-1.0.jar
[root@dloss1 hive-udf-jars]# 

2021-04-30注意:/user/hive/udfjars和jar文件的所属用户必须为hive

 

3.Hive配置

1.登录CM管理控制台,进入Hive服务

点击配置,选择高级配置,在hive-site.xml文件中增加如下配置

<property>
    <name>hive.reloadable.aux.jars.path</name>  #引入jar包
    <value>/usr/lib/hive-udf-jars</value>
</property>

2021-04-30注意:hive.reloadable.aux.jars.path路径为本地的/usr/lib/hive-udf-jars目录

 

 

2.保存配置,回到CM主页根据提示重启Hive服务

 

4.授权JAR文件

2021-04-30

5.创建函数

1.用hive用户通过beeline登录HiveServer2测试

 

(修改<name>hive.reloadable.aux.jars.path</name>配置只对 Beeline 适用,Hive CLI 方式无法识别 Jar 包)

(因已经开启了Kerberos认证需要先登录Hive/dloss1@FAYON.COM账号再进行beeline连接)

beeline
!connect jdbc:hive2://dloss1:10000/;principal=hive/dloss1@FAYSON.COM

2021-04-30

创建临时函数

create function TEST0415 as 'com.ceb.ccrp.apog.udf.TransferLocationUDTF' using jar 'hdfs://nameservice1/user/hive/udfjar/apog-udf-1.0.jar';
#此中'com.ceb.ccrp.apog.udf.TransferLocationUDTF'是调用java方法的路径、'hdfs://nameservice1/user/hive/udfjar/apog-udf-1.0.jar'是hue授权后jar包的路径

使用函数

select TEST0415(113.15150738786386,40.97701708193782);

2021-04-30

 

 

 

 

为用户授权JAR文件的GRANT ALL ON URI特权,则用户就可以在他们拥有写权限的数据库上创建Function

 

问题总结:

1、设置2021-04-30

值时要注意jar包要在每个节点的相同本地路径存在、否则hive相关服务会启动失败、启动失败会报java版本不一样的错误

2、修改完hive配置文件重启服务后要重新连接beeline

3、多次测试在beeline中的add权限问题后还是不能使用,最后使用在hue授予权限后的DHFS中的jar包路径解决问题

4、java.net.SocketException: Broken pipe报错可能的原因

防火墙和网络上的问题,或者服务器发生了crash

应用系统的数据库连接池导致,忘记数据库连接的关闭

5、add jar权限问题(未解决)

6、Unknown HS2 problem when communicating with Thrift server

 

 

 

 

 

 

 

 

上一篇:Spark-Streaming hdfs count 案例


下一篇:Sparksubmit