Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 通过SparkLauncher传入Kerberos密钥表/主体_Apache Spark_Kerberos - Fatal编程技术网

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)
  • 因此,您只能使用(a)或(b),但不能同时使用(a)或(b)-参见
  • 换句话说,要么启动的进程使用其Kerberos凭据在自身上触发Spark作业,要么启动的进程模拟最终用户在没有Kerberos的集群上触发Spark作业。在纱线上,对于前者,作业归自己所有,而对于前者,作业归代理用户所有

  • 其中一些参数用于“摘要”将运行驱动程序的实际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服务上启用用户模拟,请参阅。