Ranger、LLAP管理SparkSQL权限配置(hiveserver2)

转载:https://zhuanlan.zhihu.com/p/35647068

概述

之前一直使用ranger管理hive的用户权限,现在系统要集成SparkSQL(thriftserver),但是在ranger下并没有SparkSQL的相关的插件,通过搜集HORTONWORKS相关资料,可以给SparkSQL配置LLAP(关于LLAP的更多细节,查看https://cwiki.apache.org/confluence/display/Hive/LLAP),然后通过ranger的hive policy间接支持SparkSQL的用户权限管理。

2. 原理

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第1张图片

图-1

如图-1所示:

1)、SparkSQL接收到sql语句后,将该语句提交给HiveServer2

2)、Ranger 通过hive插件检查access policy,并告诉SparkSQL访问哪些表(列)不能访问哪些表(列)

3)、SparkSQL开始尝试通过LLAP从hdfs读取数据

4)、LLAP收到请求,检测到请求中包含没有权限访问的列,就停止处理该请求,同时返回一个权限异常给Spark

3. 配置

  • 环境

1)、HDP-2.6.3.0-235 with Spark2,non-kerberized 集群

2)、SPARK-LLAP:集群内部集成

  • 配置Hiveserver2 Interactive 服务

在Ambari中,定位到hive服务配置页,并且点击Enable Interactive Query:

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第2张图片

随后会跳出相关配置,这些配置和LLAP服务资源分配有关,可以保持默认,因为目前只是为了满足测试需要。

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第3张图片

保存配置,确认,继续。

重启影响的服务。

定位到service summary tab页面,确保Hiveserver2 Interactive服务启动成功:

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第4张图片

  • 配置Spark2

在Ambari中,定位到spark2配置页

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第5张图片

spark2配置页

找到 Custom spark2-defaults,

点击 add property 并添加如下属性:

spark.sql.hive.hiveserver2.jdbc.url= jdbc:hive2://{hiveserver-interactive-hostname}:10500/

spark.hadoop.hive.llap.daemon.service.hosts=@llap0

spark.hadoop.hive.zookeeper.quorum={some-or-all-zookeeper-hostnames}:2181

找到 Custom spark2-thrift-sparkconf,

点击 add property 并添加和 Custom spark2-defaults相同的属性

找到 Advanced spark2-env,

给属性spark_thrift_cmd_opts设置值:--jars /usr/hdp/2.6.3.0-235/spark_llap/spark-llap-assembly-1.0.0.2.6.3.0-235.jar --conf spark.sql.hive.llap=true

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第6张图片

注:在HDP-2.6.3已经内部集成了spark-llap,对于没有集成spark-llap的HDP版本,spark_thrift_cmd_opts值应该这样设置值:--packages com.hortonworks.spark:spark-llap-assembly_2.11:1.1.3-2.1 --repositories http://repo.hortonworks.com/content/groups/public/ --conf spark.sql.hive.llap=true

保存属性修改,然后重启影响的服务,完成。

  • 测试

1)、给默认database设置ranger权限(推荐)

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第7张图片

之所以推荐这样设置是,因为连接ThriftServer的时候一般是jdbc:hive2://{thriftserver-host}:{thriftserver-port},如果没有登录default的权限,连接时将直接拒绝,更谈不上执行更多的任务。

2)、测试

我的hive中现有3个库:

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第8张图片

而用户**15698只对***_data_service有权限:

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第9张图片

现在用用户**15698连接ThriftServer,只显示***_data_service库:

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第10张图片

执行explain select,已经开始走LLAP权限验证:

Ranger、LLAP管理SparkSQL权限配置(hiveserver2)_第11张图片

测试完成。

4. 参考资料

hortonworks-spark/spark-llap​github.comRanger、LLAP管理SparkSQL权限配置(hiveserver2)_第12张图片Error:"Unable to instantiate SparkSession with LLAP support because LLAP or Hive classes are not found" after upgrading from HDP 2.6.2 to 2.6.3 when starting Spark2 Thirft Server - Hortonworks​community.hortonworks.com

 

SparkSQL, Ranger, and LLAP via Spark Thrift Server for BI scenarios to provide row, column level security, and masking - Hortonworks​zh.hortonworks.comRanger、LLAP管理SparkSQL权限配置(hiveserver2)_第13张图片

你可能感兴趣的:(hadoop,spark,ranger)