Spark standlone driver on cluster 用户权限问题

原创 2015年11月18日 11:32:46

1)   原因

 Spark standlone 模式下面driver 提交到cluster,application 用户变成了spark 部署环境用户,这样会带来两个问题:

a)      spark master web无法知道那个用户提交的任务;

b)      spark权限问题无法管理,比如读取Hive、HBase、HDFS数据的权限问题;

本文提出一种简单的修改方法,让Spark  standlone  driver on cluster 模型下面读取数据权限问题可以解决。

2)   代码流程


3)   修改方法

    原理上面需要从client.main agrs获取driver提交端的user name;然后经过driverdesciption传送给master和worker,需要注意的是driverdesciption里面只能给command envi添加字段;经过worker传送给driver ,但是其中经过了数组转换,转换过程比较复杂,需要修改的代码较多。

   本文直接在sparkconf里面设置driverproxyuser属性:

conf.set("driverproxyuser",user.name)

 

需要修改的代码:

a)      sparkcontext 的sparkuser变量; web显示的用户;

b)     SparkDeploySchedulerBackend 的ApplicationDescription的system user name,该app user name可以用于获取hive、hbase等表的权限;

4)   修改代码

sparkcontext.scala

diff /SparkCode/spark-1.4.0/core/src/main/scala/org/apache/spark/SparkContext.scala    core/src/main/scala/org/apache/spark/SparkContext.scala

301,315c301

<  // val sparkUser =Utils.getCurrentUserName()

<   //val sparkUser= config.get("driverproxyuser",Utils.getCurrentUserName())

<   val sparkUser = {

<     val  conf=config.clone

<

<     if(conf.contains("driverproxyuser")) {

<       logInfo("conf contains driverproxyuser configered by user ?" + conf.contains("driverproxyuser"))

<       val proxyuser=conf.get("driverproxyuser")

<       System.setProperty("HADOOP_USER_NAME", proxyuser )

<      // System.setProperty("user.name", proxyuser)

<       proxyuser

<     }else{

<       Utils.getCurrentUserName()

<     }

<   }

---

>   val sparkUser = Utils.getCurrentUserName()

495c481

<     executorEnvs("SPARK_USER") = sparkUser //sp Added JARarkUser

---

>     executorEnvs("SPARK_USER") = sparkUser

521d506

SparkDeploySchedulerBackend.scala

diff /SparkCode/spark-1.4.0/./core/src/main/scala/org/apache/spark/scheduler/cluster/SparkDeploySchedulerBackend.scala  ./core/src/main/scala/org/apache/spark/scheduler/cluster/SparkDeploySchedulerBackend.scala

86,94d85

<

<     //add by Ricky

<     val username=System.getProperty("user.name")

<     if(conf.contains("driverproxyuser")){

<       val proxyuser=conf.get("driverproxyuser")

<       logInfo("set ApplicationDescription user is : "+proxyuser)

<       System.setProperty("HADOOP_USER_NAME",proxyuser)

<       System.setProperty("user.name",proxyuser)

<     }

97,101d87

<

<

<

<     logInfo("ApplicationDescription user is :"+appDesc.user)

<     System.setProperty("user.name",username) // added by Ricky

版权声明:本文为博主原创文章,未经博主允许不得转载。

在程序中指定Spark和Hadoop的用户

Spark和Hadoop都被设计为多用户共享使用,每个用户程序都关联一个用户,Spark和Hadoop根据该用户授予用户程序对集群相关资源的访问权限。如果是强认证方式,每个用户程序关联的用户不可随意指...
  • wyc09
  • wyc09
  • 2013年11月15日 12:19
  • 5715

SparkSQL利用HDFS的权限控制表的读权限

Spark内置的thrift-server(连接hive)的对权限管理支持得并不是很好,只支持了create/drop权限的控制,但是任意用户都可以读任意库/表,委实是一个问题。为了解决这个问题,可以...

spark 使用中会遇到的一些问题及解决思路

7 内存溢出问题     在Spark中使用hql方法执行hive语句时,由于其在查询过程中调用的是Hive的获取元数据信息、SQL解析,并且使用Cglib等进行序列化反序列化,中间可能产生较多...

本地开发spark代码上传spark集群服务并运行(基于spark官网文档)

本地开发spark代码上传spark集群服务并运行(基于spark官网文档)

Spark集群三种部署模式的区别

目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN,其中,第一种类似于MapReduce 1.0所采用的模式,内...

使用Idea提交Spark程序

参考这个文章(使用Intellij IDEA开发并提交Spark应用到远程Spark集群)试了一下,把遇到问题记录一下。1,错误:Permission denied: user=root, acces...
  • hotdust
  • hotdust
  • 2017年03月12日 22:53
  • 1500

Spark on YARN cluster作业运行全过程分析

下面是分析Spark on YARN的Cluster模式,从用户提交作业到作业运行结束整个运行期间的过程分析。 客户端进行操作   1、根据yarnConf来初始化yarnClient,并启动ya...

Spark on Mesos cluster mode

cluster modespark cluster mode指的是将driver运行在cluster而不是client中。可以使用surpervise机制,指的是driver会自动的进行失败重试。me...
  • lsshlsw
  • lsshlsw
  • 2016年08月25日 16:00
  • 702

Spark on yarn有分为两种模式yarn-cluster和yarn-client

Spark支持可插拔的集群管理模式(Standalone、Mesos以及YARN ),集群管理负责启动executor进程,编写Spark application 的人根本不需要知道Spark用的是什...
  • LW_GHY
  • LW_GHY
  • 2016年03月11日 22:39
  • 2505

Spark on YARN cluster & client 模式作业运行全过程分析

原文链接:https://www.iteblog.com/archives/1189.html,致谢 下面是分析Spark on YARN的Cluster模式,从用户提交作业到作业运行结束整个运...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark standlone driver on cluster 用户权限问题
举报原因:
原因补充:

(最多只允许输入30个字)