通过 SparkLauncher 传入 Kerberos keytab/principal

Passing in Kerberos keytab/principal via SparkLauncher

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

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

--principal arg 被描述为 "Principal to be used to login to KDC, while running on secure HDFS".

因此它特定于 Hadoop 集成。我不确定您是否知道这一点,因为您的 post 没有提到 Hadoop、YARN 或 HDFS。

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

底线:--blahblah 命令行参数只是 快捷方式 您可以在代码中或 "spark-defaults" 中设置的属性配置文件。

自 Samson 的回答以来,我想我应该添加我在 Spark 1.6.1 中的经验:

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