首先,我想说的是我看到的解决这个问题的唯一方法是:Spark 1.6.1 SASL。但是,在为spark和yarn认证添加配置时,仍然不起作用。下面是我在Amazon's EMR的一个yarn集群上使用spark-submit对spark的配置:
SparkConf sparkConf = new SparkConf().setAppName("secure-test");
sparkConf.set("spark.authenticate.enableSaslEncryption", "true");
sparkConf.set("spark.network.sasl.serverAlwaysEncrypt", "true");
sparkConf.set("spark.authenticate", "true");
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
sparkConf.set("spark.kryo.registrator", "org.nd4j.Nd4jRegistrator");
try {
sparkConf.registerKryoClasses(new Class<?>[]{
Class.forName("org.apache.hadoop.io.LongWritable"),
Class.forName("org.apache.hadoop.io.Text")
});
} catch (Exception e) {}
sparkContext = new JavaSparkContext(sparkConf);
sparkContext.hadoopConfigurathtml" target="_blank">ion().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem");
sparkContext.hadoopConfiguration().set("fs.s3a.enableServerSideEncryption", "true");
sparkContext.hadoopConfiguration().set("spark.authenticate", "true");
注意,我用代码将spark.authenticate添加到了sparkContext的hadoop配置中,而不是core-site.xml(我假设我可以这样做,因为其他东西也起作用)。
查看此处:https://github.com/apache/spark/blob/master/common/network-yarn/src/main/java/org/apache/spark/network/yarnshuffleservice.java,似乎两个spark.authenticate都是必需的。当我运行这个应用程序时,我得到下面的堆栈跟踪。
Spark的文件上说
For Spark on YARN deployments, configuring spark.authenticate to true will automatically handle generating and distributing the shared secret. Each application will use a unique shared secret.
根据上面的yarn文件中的注释,这似乎是错误的,但是通过故障排除,我仍然不知道应该去哪里让sasl工作?我是不是漏掉了一些有文件记载的明显的东西?
所以我终于想通了。以前的StackOverflow线程在技术上是正确的。我需要将spark.authenticate添加到纱线配置中。也许这样做是有可能的,但是我想不出如何在代码中添加这个配置,这在高级别上是有意义的为什么会是这样。我将在下面发布我的配置,以防将来有人遇到这个问题。
首先,我使用了aws emr配置文件(使用aws cliaws emr create-cluster--configurations file:/youpathhere.json
)
然后,我在文件中添加了以下json:
[{
"Classification": "spark-defaults",
"Properties": {
"spark.authenticate": "true",
"spark.authenticate.enableSaslEncryption": "true",
"spark.network.sasl.serverAlwaysEncrypt": "true"
}
},
{
"Classification": "core-site",
"Properties": {
"spark.authenticate": "true"
}
}]
我正在EMR EMR-4.3.0上运行一个spark应用程序,有1个主机和4个节点 它们每一个都有5GB内存和2个核心。 最后Yarn杀死了应用程序主人 错误ApplicationMaster:接收信号15:SIGTERM 1)我是否可以进一步改进num-executors和executor-core的spark-submit选项。
我试图通过以下命令向CDH纱线集群提交spark作业 我试过几种组合,但都不起作用。。。现在,我的本地/root以及HDFS/user/root/lib中都有所有poi JAR,因此我尝试了以下方法 如何将JAR分发到所有集群节点?因为上面这些都不起作用,作业仍然无法引用该类,因为我一直收到相同的错误: 同样的命令也适用于“--master本地”,但没有指定--jar,因为我已经将我的jar复制到
在配置spark应用程序时,我试图从集群中挤出每一点,但似乎我并没有完全正确地理解每一件事。因此,我正在AWS EMR集群上运行该应用程序,该集群具有1个主节点和2个m3类型的核心节点。xlarge(每个节点15G ram和4个vCPU)。这意味着,默认情况下,每个节点上为纱线调度的应用程序保留11.25 GB。因此,主节点仅由资源管理器(纱线)使用,这意味着剩余的2个核心节点将用于调度应用程序(
然而,我不知道我是否真的需要一个插件,如果需要,是哪一个,以及如何去做它。我尝试使用'build/mvn'和'build/sbt'直接编译github源代码,但是'spark-assembly2.11-2.0.2.jar'文件只有283字节。 我的目标是使用较新版本的fat jar运行pyspark shell,其方式与这里提到的类似。