如何验证DSE Spark Shell是否在群集中分发

时间:2014-09-23 20:38:04

标签: apache-spark datastax-enterprise

是否可以从Spark shell中验证shell是连接到群集还是仅在本地模式下运行的节点?我希望用它来调查以下问题:

我使用DSE设置了一个小型3节点Cassandra Analytics集群。我可以登录到3个服务器中的任何一个并运行dse spark并打开Spark shell。我还验证了所有3台服务器都通过运行dsetool sparkmaster配置了Spark主服务器。

但是,当我使用Spark shell运行任何任务时,它似乎只在本地运行。我跑了一个小测试命令:

val rdd = sc.cassandraTable("test", "test_table")
rdd.count

当我查看Spark Master网页时,我发现只有一台服务器正在运行该作业。

我怀疑当我运行dse spark时,它以本地模式运行shell。我查找了如何为Spark 0.9.1 shell特定一个master,即使我使用MASTER=<sparkmaster> dse spark(来自Programming Guide)它仍然只在本地模式下运行。

1 个答案:

答案 0 :(得分:4)

这是一个演练,一旦你启动了一个包含3个节点的DSE 4.5.1集群,所有节点都设置为Analytics Spark模式。

群集启动并运行后,您可以使用命令dsetool sparkmaster确定哪个节点是Spark Master。此命令只打印当前主控;它不会影响哪个节点是主节点,也不会影响它。

将Web浏览器指向给定IP地址和端口7080的Spark Master Web UI。您应该看到3个处于ALIVE状态的工作程序,并且没有正在运行的应用程序。 (如果此群集上发生过以前的Spark作业,您可能会有一些DEAD工作人员或已完成的应用程序。)

现在在一个节点上调出带有dse spark的Spark shell。如果您检查Spark Master Web UI,您应该会看到一个名为“Spark shell”的正在运行的应用程序。它可能会显示1个已分配的核心(默认值)。

如果您点击应用程序ID链接(“app-2014 ...”),您将看到该应用程序的详细信息,包括一个执行者(工作人员)。您为Spark提供的任何命令都将在此worker上运行。

默认配置是限制Spark主服务器只允许每个应用程序使用1个核心,因此只能将工作提供给单个节点。

要更改此设置,请登录Spark主节点并sudo编辑文件/etc/dse/spark/spark-env.sh。找到设置SPARK_MASTER_OPTS的行并删除部分-Dspark.deploy.defaultCores=1。然后在此节点(sudo service dse restart)上重新启动DSE。

一旦出现,请检查Spark主Web UI并使用Spark shell重复测试。您应该看到它已分配了更多内核,并且它执行的任何作业都将在多个节点上发生。

在生产环境中,您需要更仔细地设置核心数,以便单个作业不会占用所有资源。