关于spark

时间:2017-03-27 13:50:51

标签: apache-spark

我们是一群使用spark的人(火花2.1.0独立 有2名工人;编程是在scala中完成的,一切都是 在几个码头工人里面奔跑)。我们遇到了一个问题 当收集的数据点击时,“collect”或“take(n)”变得非常慢 一些大小的上限。

我们曾多次遇到这个问题,但我们已经煮沸了 将问题简化为一个简单的例子:它读取一个文件(来自 本地文件系统或来自hdfs;我们测试了两个)然后收集 结果。它工作正常,直到一定大小的文件(约2 MB)和 然后它非常慢(大约3 MB它完全断开)。如果它 不收集(例如它只是一个saveAsTextFile)设置可以 处理大到200 GB的文件。我们测试过增加了 驱动程序内存十倍(从2GB的RAM到20GB的RAM)但它没有 解决问题;事实上我们的测试表明我们的小实验 无论我们提供多少RAM,文件大小都会相同 给司机或工人。

我在这里总结了我的实验:https://pastebin.com/raw/6yXztq0H

在这个实验中程序读取文件“s”和“take(n)”和“n” 逐渐增加。正如时间戳输出所示,它几乎可以工作 即刻为“n≤104145”(尽管设置有很大的变化,它实际上只是变化了一点)然后它很慢。对于大“n”(见 第二次运行)驱动程序崩溃,出现“TaskResultLost”错误。最后 实验(第三次运行)表明这似乎不是一个记忆 问题(这似乎是合乎逻辑的,因为文件相对较小, 约2 MB)。

(实验中没有显示,但我们也玩过 SPARK_DAEMON_MEM但它似乎没有任何改变。)

有没有人遇到过同样的问题?有没有人想帮我们进一步搜索?

2 个答案:

答案 0 :(得分:0)

如果您已尝试增加spark.driver.memory,请尝试增加spark.driver.maxResultSize

答案 1 :(得分:0)

好的,我们设法掌握了正在发生的事情。以下是对未来参考问题的描述:

  1. 当收集的数据量足够大时,驱动程序将直接与执行程序交互,而不是通过主程序;这就是为什么我们的问题只出现在一定规模之后。

  2. 在我们的设置中,某些执行程序与驱动程序之间存在网络问题,导致某些连接失败。