开发者社区> 问答> 正文

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

我在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(...)

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

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

展开
收起
社区小助手 2019-01-02 14:49:14 3628 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

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

    修复

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

    2019-07-17 23:24:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载