【问题标题】:Spark reading orc file in driver not in executorsSpark读取驱动程序中的orc文件而不是执行程序
【发布时间】:2018-04-06 08:41:38
【问题描述】:

我在 s3 中有 30GB ORC 文件(24 个部分 * 1.3G)。我正在使用 spark 来阅读这个兽人并进行一些操作。但从我观察到的日志中,甚至在执行任何操作之前,spark 都在打开并读取 s3 的所有 24 个部分(只需 12 分钟即可读取文件)。但我担心的是,所有这些读取操作只发生在驱动程序和执行程序都处于空闲状态

有人能解释一下为什么会这样吗?有没有什么办法可以让所有的执行者也读起来?

同样适用于镶木地板吗?

提前致谢。

【问题讨论】:

  • 任何数量的事情都可能是问题所在。请张贴代码。

标签: apache-spark amazon-s3 orc


【解决方案1】:

您是否提供了数据架构?

如果没有,Spark 会尝试获取所有文件的架构,然后继续执行。

【讨论】:

    【解决方案2】:

    ORC 和 Parquet 都可以检查文件页脚中的摘要数据,并且根据 s3 客户端及其配置,可能会导致它执行一些非常低效的 IO。这可能是原因。

    如果您正在使用 s3a:// 连接器和 Hadoop 2.8+ 的底层 JAR,那么您可以将其告知在列数据上获得最大性能所需的随机 IO,并调整其他一些东西。

    val OPTIONS = Map( "spark.hadoop.fs.s3a.experimental.fadvise" => "random" "spark.hadoop.orc.splits.include.file.footer" -> "true", "spark.hadoop.orc.cache.stripe.details.size" -> "1000", "spark.hadoop.orc.filterPushdown" -> "true" "spark.sql.parquet.mergeSchema" -> "false", "spark.sql.parquet.filterPushdown" -> "true" )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多