通过SparkLauncher传入Kerberos keytab / principal

时间:2016-02-19 19:50:56

标签: apache-spark

spark-submit允许我们通过--keytab--principal选项传入Kerberos凭据。如果我尝试通过addSparkArg("--keytab",keytab)添加这些,我会收到'--keytab' does not expect a value错误 - 我认为这是因为v1.6.0缺乏支持。

我是否有另一种方法可以使用此SparkLauncher类提交我的Spark作业,并使用Kerberos凭据? - 我使用带有安全HDFS的Yarn。

2 个答案:

答案 0 :(得分:9)

--principal arg被描述为&#34; Principal用于登录KDC,同时在安全HDFS &#34; 上运行。< / p>

因此它特定于Hadoop集成。我不确定你是否意识到这一点,因为你的帖子没有提到Hadoop,YARN或HDFS。

现在,手册页Running on YARN中描述了特定于Hadoop的Spark属性。惊喜!其中一些属性听起来很熟悉,例如spark.yarn.principalspark.yarn.keytab

底线:--blahblah命令行参数只是快捷方式到您可以在代码中设置的属性,或者在&#34; spark-defaults&#34; conf文件。

答案 1 :(得分:3)

自Samson回答以来,我认为我添加了我在Spark 1.6.1中所经历的一切:

  1. 您可以使用SparkLauncher.addSparkArg("--proxy-user", userName)发送代理用户信息。
  2. 您可以使用SparkLauncher.addSparkArg("--principal", kerbPrincipal)SparkLauncher.addSparkArg("--keytab", kerbKeytab)
  3. 所以,您只能使用(a)OR(b)但不能同时使用两者 - 请参阅https://github.com/apache/spark/pull/11358/commits/0159499a55591f25c690bfdfeecfa406142be02b
  4. 换句话说,启动的进程要么在YARN上触发Spark作业,要么使用其Kerberos凭据(OR),启动的进程会模拟最终用户在没有Kerberos的群集上触发Spark作业。在YARN上,如果是前者,则作业由self拥有,而在前者的情况下,作业由代理用户拥有。