更新: 文件夹大小是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内存。
答案 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”