首页 文章

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

提问于
浏览
0

是否可以从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 回答

  • 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 ...”),您将看到该应用程序的详细信息,包括一个执行程序(worker) . 您为Spark提供的任何命令都将在此worker上运行 .

    默认配置是将Spark主控制器限制为仅允许每个应用程序使用1个内核,因此只能将工作提供给单个节点 .

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

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

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

相关问题