首页 文章

驱动程序中的Spark读取orc文件不在执行程序中

提问于
浏览
2

我在s3中有30GB的ORC文件 ( 24 parts * 1.3G) . 我正在使用spark来阅读这个兽人并做一些操作 . 但是从日志中我观察到的甚至是在进行任何操作之前,火花正在打开并从s3 (Taking 12 min just to read files ) 读取所有24个零件 . 但我在这里担心的是,此时所有这些读取操作都在发生 only in driver and executors are all idle .

有人能解释我为什么会这样吗?有什么方法可以利用所有执行者进行阅读吗?

同样适用于镶木地板吗?

提前致谢 .

2 回答

  • 3

    您是否提供了数据架构?

    如果没有,Spark会尝试获取所有文件的模式,然后继续执行 .

  • 3

    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" )

相关问题