首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当火花执行者的结果是“通过BlockManager发送”时,这意味着什么?

当火花执行者的结果是“通过BlockManager发送”时,这意味着什么?
EN

Stack Overflow用户
提问于 2019-07-23 22:38:12
回答 1查看 1.4K关注 0票数 0

我有一个主机运行一个火花大师和3个火花工人,所有在码头集装箱。我有另一个主机充当星火驱动程序,从第一个主机读取数据。

只要返回的数据很小(<6000行),我就能够成功地从第一个主机检索数据,但是当我试图读取大块(100k+行)时,它失败了。

我检查了executor日志,当读取成功时,我得到以下日志消息:

代码语言:javascript
复制
19/07/23 21:54:17 INFO CassandraConnector: Connected to Cassandra cluster: DataMonitor
19/07/23 21:54:17 INFO Executor: Finished task 0.0 in stage 1.0 (TID 4). 1014673 bytes result sent to driver
19/07/23 21:54:24 INFO CassandraConnector: Disconnected from Cassandra cluster: DataMonitor 

但是,当读取失败时,我将收到以下日志消息:

代码语言:javascript
复制
19/07/23 22:21:55 INFO CassandraConnector: Connected to Cassandra cluster: DataMonitor
19/07/23 22:22:03 INFO MemoryStore: Block taskresult_13 stored as bytes in memory (estimated size 119.2 MB, free 2.4 GB)
19/07/23 22:22:03 INFO Executor: Finished task 0.3 in stage 4.0 (TID 13). 124969484 bytes result sent via BlockManager)
19/07/23 22:22:10 INFO CassandraConnector: Disconnected from Cassandra cluster: DataMonitor

看起来,当结果足够大时,它会被“通过BlockManager发送”,但是当它足够小的时候,它就会被“发送到驱动程序”。

那么,我如何得到它,以便每个结果都发送给司机?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-24 08:23:12

每个执行器运行任务并将任务的结果发送回驱动程序。如果任务结果很小,它将直接发送任务状态,但如果结果大小很大,则由以下公式计算:

代码语言:javascript
复制
taskResultSize > conf.getSizeAsBytes("spark.task.maxDirectResultSize", 1L << 20)

代码语言:javascript
复制
taskResultSize > conf.get("spark.driver.maxResultSize")

源代码

Executor将结果本地存储在磁盘上,并将IndirectTaskResultblockId一起发送回驱动程序。

然后驱动程序通过BlockManager使用netty下载远程结果。

看看这里。

如果不够详细,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57173070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档