在Spark

时间:2017-04-19 20:24:07

标签: apache-spark

更新: 文件夹大小是2T !!!现在我的问题是如何用Spark处理这么大的文件?

我有一个文件夹大小的在线存储空间(至少200 GB,我不知道确切的大小)。 我正在计算巨大文件夹中所有文件的行号。

spark.sparkContext.textFile("online/path").filter(x => x.contains("keyword")).count

但它总是失败。我检查了Spark UI,它显示总任务数为1,546,000,并且我的程序在完成110,000个任务后失败。

我尝试检查日志文件,但日志文件本身很大,并且卡在我的浏览器中。

我也试过mapParititions:

spark.sparkContext.textFile.mapPartitions(p => p.filter(x => x.contains("keyword"))).count()

没有运气。

我的配置:

Driver Memory: 16G
Executor memory: 16G
Executor Number: 12
Executor Core number :10

我的火花星团有138个核心和800G内存。

2 个答案:

答案 0 :(得分:0)

将每个任务分配到~128MB分区,每个执行程序分配10个核心,我希望在您的群集上完成此任务。可能是您有太多任务的情况,因为每个任务都带有非平凡的开销。要测试此假设,请尝试使用coalesce减少分区数。 e.g:

spark.sparkContext.textFile("online/path").coalesce(1000).filter(x => x.contains("keyword")).count

答案 1 :(得分:0)

“textFile”有第二个参数 - “minPartitions”,也许你可以尝试一下。

如果文件大小很小,文件数量很大,其他读取方法可以使用“wholeTextFiles”