我有一个主机运行一个火花大师和3个火花工人,所有在码头集装箱。我有另一个主机充当星火驱动程序,从第一个主机读取数据。
只要返回的数据很小(<6000行),我就能够成功地从第一个主机检索数据,但是当我试图读取大块(100k+行)时,它失败了。
我检查了executor日志,当读取成功时,我得到以下日志消息:
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 但是,当读取失败时,我将收到以下日志消息:
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发送”,但是当它足够小的时候,它就会被“发送到驱动程序”。
那么,我如何得到它,以便每个结果都发送给司机?
发布于 2019-07-24 08:23:12
每个执行器运行任务并将任务的结果发送回驱动程序。如果任务结果很小,它将直接发送任务状态,但如果结果大小很大,则由以下公式计算:
taskResultSize > conf.getSizeAsBytes("spark.task.maxDirectResultSize", 1L << 20)或
taskResultSize > conf.get("spark.driver.maxResultSize")Executor将结果本地存储在磁盘上,并将IndirectTaskResult和blockId一起发送回驱动程序。
然后驱动程序通过BlockManager使用netty下载远程结果。
如果不够详细,请告诉我。
https://stackoverflow.com/questions/57173070
复制相似问题