Apache spark 通过SparkLauncher传入Kerberos密钥表/主体
Apache spark 通过SparkLauncher传入Kerberos密钥表/主体,apache-spark,kerberos,Apache Spark,Kerberos,spark submit允许我们通过--keytab和--principal选项传入Kerberos凭据。如果我试图通过addSparkArg(“--keytab”,keytab)”添加这些,我会得到一个“--keytab”不期望值错误-我认为这是由于从v1.6.0开始缺乏支持 是否有其他方法可以使用此SparkLauncher类提交Spark作业,并使用Kerberos凭据我正在使用带有安全HDFS的Thread。--principalarg被描述为“在安全HDFS上运行时用于登录KDC的主体
spark submit
允许我们通过--keytab
和--principal
选项传入Kerberos凭据。如果我试图通过addSparkArg(“--keytab”,keytab)
”添加这些,我会得到一个“--keytab”不期望值
错误-我认为这是由于从v1.6.0开始缺乏支持
是否有其他方法可以使用此SparkLauncher类提交Spark作业,并使用Kerberos凭据我正在使用带有安全HDFS的Thread。--principal
arg被描述为“在安全HDFS上运行时用于登录KDC的主体”
因此它是特定于Hadoop集成的。我不确定你是否意识到这一点,因为你的帖子没有提到Hadoop、Thread或HDFS
现在,特定于Hadoop的Spark属性在手册页面上进行了描述。惊喜其中一些属性听起来很熟悉,比如spark.warn.principal
和spark.warn.keytab
一句话:
--blahblah
命令行参数只是属性的快捷方式,您可以在代码或“spark defaults”conf文件中设置这些属性。从Samson的回答开始,我想我应该添加spark 1.6.1的经验:
sparkauncher.addSparkArg(“--proxy user”,userName)
发送代理用户信息sparkauncher.addSparkArg(“--principal”,kerbpprincipal)
和sparkauncher.addSparkArg(--keytab,kerbKeytab)
其中一些参数用于“摘要”将运行驱动程序的实际Java命令行。因此,它们不能在conf文件中设置(由驱动程序读取;太晚了,无法更改某些JVM设置)。我同意-我只希望SparkLauncher以功能对等的方式发布到
spark submit
。另一个选项是使用Process或commons exec在JVM中手动调用spark submit
脚本。有些人还建议使用Oozie,但这会带来额外的依赖性/工作流规范/管理开销。大多数命令行参数只是属性的快捷方式。对于其余部分,您可以尝试跟踪生成的确切Java命令行,分析参数,并重新组装自己的命令行。我试过一次。。。很快就停了下来(相当棘手,当时不是重点)。。是的,这很棘手。由于我必须自己处理流缓冲区和等待,所以使用进程并不十分方便。我想现在我还是直接使用SparkSubmit吧。最糟糕的情况是,我会调查commons exec。关于我对SparkLauncher平价的评论,我的立场是正确的。-据我所知,如果我看到这个PR在运行,我会更新这篇文章。AFAIK Hadoop生态系统中唯一拥有这种“代理”权限的帐户是oozie
(就像CRON daemon在Linux上执行“su”,oozie在Thread上执行)。你认为Spark的“代理用户”属性与Oozie有关,还是与完全不同的东西有关?对-它与Oozie无关,而是与Oozie如何模拟最终用户有关(类似于Linux上的su)。基本上,HDFS服务的设置允许调用SparkLauncher的人员在与集群上的服务(HDFS,用于数据访问,用于作业提交等)交谈时,使用此代理用户属性模拟要模拟的用户。有关如何在HDFS服务上启用用户模拟,请参阅。