开发者社区> 问答> 正文

当Spark在S3上读取大数据集时,在“停机时间”期间发生了什么?

社区小助手 2019-01-02 14:49:14 383

我在AWS S3中有一堆JSON数据 - 让我们说100k文件,每个大约5MB - 我正在使用Spark 2.2 DataFrameReader来读取和处理它们:

sparkSession.read.json(...)

我发现Spark在开始计算之前只会挂起5分钟左右。对于较大的数据集,这可能需要数小时。当我说“挂起”时,我的意思是终端可视化指示群集正在处理的阶段以及沿着它的距离不会出现 - 据我所知,它在某些阶段之间。

Spark在此期间做了什么,我怎样才能帮助它更快?

我有两个想法,但它们似乎都是错的。

我的第一个想法是Spark试图列出它需要进行计算的所有文件。我通过实际创建脱机文件列表并直接将它们提供给Spark而不是使用glob语法来测试它:

val fileList = loadFiles()
sparkSession.read.json(fileList:_*)

这实际上导致“悬挂”时期持续更长时间!

我的第二个想法是Spark正在利用这段时间为所有数据创建一个模式。但我通过手动指定架构来排除这种情况:

val schema = createSchema()
sparksession.read.schema(schema).json(...)

这里的“悬挂”时期与以前相同,但整体计算要快得多。

所以我不确定发生了什么或如何诊断它。

分享到
取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:24:24

    在S3中列出目录树的成本非常高,“分区”。这就是您所经历的。

    修复

    更少,更大的文件
    较浅的目录树

    0 0
+ 订阅

大数据计算实践乐园,近距离学习前沿技术

推荐文章
相似问题