是否可以从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)它仍然只在本地模式下运行。
答案 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重复测试。您应该看到它已分配了更多内核,并且它执行的任何作业都将在多个节点上发生。
在生产环境中,您需要更仔细地设置核心数,以便单个作业不会占用所有资源。