利用Submarin集成Spark-Ranger
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:https://www.captainai.net/dongkelun
前言
本文总结如果利用Submarin集成Spark-Ranger,通过ranger控制spark sql的权限
前提
已经安装了Spark、Hive、kerberos、Ranger,并且Hive已经集成了Ranger,本文环境基于Ambari
submarine-spark-security 插件打包
官网文档https://submarine.apache.org/docs/userDocs/submarine-security/spark-security/README (0.6.0版本)
git clone https://github.com/apache/submarine
当前master分支(0.7.0)已经没有submarine-spark-security模块了,需要切换到tag:release-0.6.0-RC0
然后利用mvn命令打包
mvn clean package -Dmaven.javadoc.skip=true -DskipTests -pl :submarine-spark-security -Pspark-2.4 -Pranger-1.2
打的submarine-spark-security-0.6.0.jar在目录submarinesubmarine-securityspark-security arget
然后将submarine-spark-security-0.6.0.jar上传到$SPARK_HOME/jars
Ranger Admin界面添加了Spark Server策略
在原来的Hive模块下,添加一个sparkServer策略,名称自定义
其中下面三个key,必须填spark,不填的话可能存在问题,至于是否都必填和具体什么含义,目前还没有研究
tag.download.auth.users
policy.download.auth.users
policy.grantrevoke.auth.users
jdbc.url和 hive策略里的一样就行,然后测试一下连接,建完后如下图所示
为了测试效果,我们先删掉其他策略,只保留all-database,table,column,这是默认的是有spark用户的
配置Spark
根据官网文档,在$SPARK_HOME/conf创建下面两个配置文件
ranger-spark-security.xml
<configuration>
<property>
<name>ranger.plugin.spark.policy.rest.url</name>
<value>http://yourIp:16080</value>
</property>
<property>
<name>ranger.plugin.spark.service.name</name>
<value>sparkServer</value>
</property>
<property>
<name>ranger.plugin.spark.policy.cache.dir</name>
<value>/etc/ranger/sparkServer/policycache</value>
</property>
<property>
<name>ranger.plugin.spark.policy.pollIntervalMs</name>
<value>30000</value>
</property>
<property>
<name>ranger.plugin.spark.policy.source.impl</name>
<value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
</property>
</configuration>
ranger-spark-audit.xml
<configuration>
<property>
<name>xasecure.audit.is.enabled</name>
<value>true</value>
</property>
<property>
<name>xasecure.audit.destination.db</name>
<value>false</value>
</property>
<property>
<name>xasecure.audit.destination.db.jdbc.driver</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>xasecure.audit.destination.db.jdbc.url</name>
<value>jdbc:mysql://yourIp:3306/ranger</value>
</property>
<property>
<name>xasecure.audit.destination.db.password</name>
<value>ranger</value>
</property>
<property>
<name>xasecure.audit.destination.db.user</name>
<value>ranger</value>
</property>
<property>
<name>xasecure.audit.jaas.Client.option.keyTab</name>
<value>/etc/security/keytabs/hive.service.keytab</value>
</property>
<property>
<name>xasecure.audit.jaas.Client.option.principal</name>
<value>hive/_HOST@INDATA.COM</value>
</property>
</configuration>
至于具体的ip、端口、用户名、密码信息可以在之前已经配置好的hive-ranger插件配置文件里查看,也可以在ambari界面搜索
启动Spark-SQL SparkServer
Spark-SQL
spark-sql --master yarn --deploy-mode client --conf 'spark.sql.extensions=org.apache.submarine.spark.security.api.RangerSparkSQLExtension' --principal spark/youIp@INDATA.COM --keytab /etc/security/keytabs/spark.service.keytab
SparkServer
spark-submit --master yarn --deploy-mode client --executor-memory 2G --num-executors 3 --executor-cores 2 --driver-memory 4G --driver-cores 2 --class org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 --name Thrift-11111 --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' --principal spark/yourIp --keytab /etc/security/keytabs/spark.service.keytab --hiveconf hive.server2.thrift.http.port=11111
注意需要添加submarine的extensions,并且以spark用户认证kerberos,因为ranger是通过kerberos的认证用户进行权限控制的 这里以Spark-SQL为例进行演示,启动spark-sql后,执行
show tables
,这是会根据配置文件,读取ranger里的sparkServer策略,如果读取并解析成功,则会在配置的缓存目录下生成对应的json文件,如:
ll /etc/ranger/sparkServer/policycache/
total 28
-rw-r--r-- 1 root root 27223 Dec 2 09:52 sparkSql_sparkServer.json
这个时候可以看到,spark是有权限读取表信息的
然后在ranger里将sparkServer策略的spark用户删掉,过个几十秒,我们可以看到,spark-sql已经刷新了ranger的策略,然后再show tables
,这时已经没有权限读取表信息了
到这里,我们已经验证了可以通ranger控制spark sql的权限了,后面可以自己把spark 用户再加回去,验证权限是否又有了,并且可以修改策略,比如可以看哪些表,select update 等操作权限 当然正式使用应该起Spark Server
问题
其他kerberos用户
我们通过其他kerberos用户认证时,虽然可以控制权限,但是会抛异常,Spark Server虽然没有异常,但是并不能控制其他用户的权限
扩展多个spark.sql.extensions
因为我们已经通过spark.sql.extensions=org.apache.submarine.spark.security.api.RangerSparkSQLExtension扩展了submarine,如果同时再扩展hudi,这样使用spark-sql 建hudi表时有冲突
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击