scala – Apache Spark:驱动程序(而不仅仅是执行程序)尝试连接
我想我还没有完全理解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 Master尝试与Cassandra交谈(并且失败了,因为Machine 1主机上没有Cassandra节点). 我误解了什么?它的工作方式不同吗?事实上,驱动程序是否从Cassandra读取数据,并将数据分发给Executors?但是,即使我的集群的总内存足够,我也永远无法读取大于机器1内存的数据. 或者,驱动程序是否与Cassandra联系不读取数据,而是查找如何对数据进行分区,并指示执行者读取数据中的“他们”部分? 如果有人能够引起我的兴趣,那将非常感激. 解决方法
驱动程序负责在工作节点上创建SparkContext,SQLContext和调度任务.它包括创建逻辑和物理计划以及应用优化.为了能够做到这一点,它必须能够访问数据源模式和可能的其他信息,如模式或不同的统计信息.实现细节因源而异,但一般来说,这意味着数据应该可以在包括应用程序主机在内的所有节点上访问.
在一天结束时,您的期望几乎是正确的.在不通过驱动程序的情况下,每个工作人员单独获取数据块,但驱动程序必须能够连接到Cassandra以获取所需的元数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 【寒假测试(网络课)】【数据结构】-->20150210
- 《数据结构》学习-- Hash(3) --Open Addressing
- docker-compose运行Rails
- 使用PhpStorm和Xdebug在Docker中调试Symfony2
- Bootstrap简单认识之Dropdown组件
- scala编译错误:类型不匹配; found:需要IndexedSeq [Int]:
- twitter-bootstrap – 配置KnpPaginator以使用Twitter Boot
- 有没有办法将管道的结果保存在Angular 2中的模板输入变量中
- 延迟加载Angular 5错误:$$_ lazy_route_resource懒惰递归
- 5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践