之前一直使用ranger管理hive的用户权限,现在系统要集成SparkSQL(thriftserver),但是在ranger下并没有SparkSQL的相关的插件,通过搜集HORTONWORKS相关资料,可以给SparkSQL配置LLAP(关于LLAP的更多细节,查看https://cwiki.apache.org/confluence/display/Hive/LLAP),然后通过ranger的hive policy间接支持SparkSQL的用户权限管理。
2. 原理
图-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:集群内部集成
在Ambari中,定位到hive服务配置页,并且点击Enable Interactive Query:
随后会跳出相关配置,这些配置和LLAP服务资源分配有关,可以保持默认,因为目前只是为了满足测试需要。
保存配置,确认,继续。
重启影响的服务。
定位到service summary tab页面,确保Hiveserver2 Interactive服务启动成功:
在Ambari中,定位到spark2配置页
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
注:在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权限(推荐)
之所以推荐这样设置是,因为连接ThriftServer的时候一般是jdbc:hive2://{thriftserver-host}:{thriftserver-port},如果没有登录default的权限,连接时将直接拒绝,更谈不上执行更多的任务。
2)、测试
我的hive中现有3个库:
而用户**15698只对***_data_service有权限:
现在用用户**15698连接ThriftServer,只显示***_data_service库:
执行explain select,已经开始走LLAP权限验证:
测试完成。
4. 参考资料
hortonworks-spark/spark-llapgithub.comError:"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 - Hortonworkscommunity.hortonworks.com
SparkSQL, Ranger, and LLAP via Spark Thrift Server for BI scenarios to provide row, column level security, and masking - Hortonworkszh.hortonworks.com