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 on Mesos cluster mode

cluster modespark cluster mode指的是将driver运行在cluster而不是client中。可以使用surpervise机制,指的是driver会自动的进行失败重试。me...

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

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

Spark配置—Standlone模式

Step 1: 下载Spark版本:根据HDFS的版本进行下载,—–本文对应的是Spark 1.6.0 HDFS 2.6.0 http://spark.apache.org/downloads.h...

spark troubleshooting--解决yarn-cluster模式的JVM栈内存溢出问题

troubleshooting 解决yarn-cluster模式的JVM栈内存溢出问题 大公司里面你的机器节点一般都是虚拟机啊!所以不能yarn-client会有网络激增的问题! ...

【解决】centos6.2 spark cluster问题(持续追加)

使用spark遇到的问题总结,及解决办法

在64位系统下安装32位ODBC驱动问题How to install and configure a 32 bit ODBC driver on a 64 bit Operating System?

You have a 64 bit operating system, which usually comes with a more modern equipment, and specially ...

spark Driver进程不退出导致的临时文件爆盘问题

在做的项目里面已经开始用到spark,其中一个项目的场景是这样的: activeMq

Spark问题3之SparkException:Error notifying standalone scheduler's driver endpoint

更多代码请见:https://github.com/xubo245/SparkLearningSpark生态之Alluxio学习 版本:alluxio(tachyon) 0.7.1,spark-1.5...

mongodb设置数据库用户,权限,java mongodb driver3.0驱动用户验证

一.设置mongodb超级管理员,数据库管理者 1.设置mongodb超级管理员:> use admin switched to db admin > db.createUser({user:'su...

使用INNER JOIN ON 多表关联查询,获取指定用户下指定权限的资源SQL:

摘要:最近在看一个开源框架,其中用户,角色,资源,这块我感觉比较重要,所以就自己也模仿着写了下,其中在获取指定用户下的权限资源的时候遇到问题了,开始时,我首先想到的方法就是通过用户->角色->资源,然...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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