加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Apache Spark:驱动程序(而不仅仅是执行程序)尝试连接

发布时间:2020-12-16 18:56:29 所属栏目:安全 来源:网络整理
导读:我想我还没有完全理解Spark是如何工作的. 这是我的设置: 我在独立模式下运行Spark集群.我正在使用4台机器:一台是大师,另外三台是工人. 我编写了一个从Cassandra集群读取数据的应用程序(参见https://github.com/journeymonitor/analyze/blob/master/spark/s
我想我还没有完全理解Spark是如何工作的.

这是我的设置:

我在独立模式下运行Spark集群.我正在使用4台机器:一台是大师,另外三台是工人.

我编写了一个从Cassandra集群读取数据的应用程序(参见https://github.com/journeymonitor/analyze/blob/master/spark/src/main/scala/SparkApp.scala#L118).

3节点Cassandra集群在同样承载Spark Worker节点的机器上运行. Spark Master节点不运行Cassandra节点:

Machine 1      Machine 2        Machine 3        Machine 4
Spark Master   Spark Worker     Spark Worker     Spark Worker
               Cassandra node   Cassandra node   Cassandra node

这背后的原因是我想优化数据局部性 – 当在集群上运行我的Spark应用程序时,每个Worker只需要与其本地Cassandra节点通信.

现在,当通过从Machine 1(Spark Master)运行spark-submit –deploy-mode client –master spark:// machine-1将我的Spark应用程序提交到集群时,我期望以下内容:

>在Spark Master上启动驱动程序实例
>驱动程序在每个Spark Worker上启动一个Executor
>驱动程序将我的应用程序分发给每个Executor
>我的应用程序在每个执行程序上运行,并从那里通过127.0.0.1:9042与Cassandra交谈

但是,情况似乎并非如此.相反,Spark Master尝试与Cassandra交谈(并且失败了,因为Machine 1主机上没有Cassandra节点).

我误解了什么?它的工作方式不同吗?事实上,驱动程序是否从Cassandra读取数据,并将数据分发给Executors?但是,即使我的集群的总内存足够,我也永远无法读取大于机器1内存的数据.

或者,驱动程序是否与Cassandra联系不读取数据,而是查找如何对数据进行分区,并指示执行者读取数据中的“他们”部分?

如果有人能够引起我的兴趣,那将非常感激.

解决方法

驱动程序负责在工作节点上创建SparkContext,SQLContext和调度任务.它包括创建逻辑和物理计划以及应用优化.为了能够做到这一点,它必须能够访问数据源模式和可能的其他信息,如模式或不同的统计信息.实现细节因源而异,但一般来说,这意味着数据应该可以在包括应用程序主机在内的所有节点上访问.

在一天结束时,您的期望几乎是正确的.在不通过驱动程序的情况下,每个工作人员单独获取数据块,但驱动程序必须能够连接到Cassandra以获取所需的元数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读