Spark 在驱动程序中而不是在执行程序中读取 orc 文件
Spark reading orc file in driver not in executors
我在 s3 中有 30GB 的 ORC 文件 (24 部分 * 1.3G)。我正在使用 spark 来读取这个 orc 并进行一些操作。但是根据我观察到的日志,甚至在执行任何操作之前,spark 正在打开并从 s3 读取所有 24 个部分 (仅读取文件需要 12 分钟)。但我在这里担心的是,所有这些读取操作都在发生 only in driver and executors are all idle 此时。
谁能解释一下为什么会这样?有什么方法可以让所有的执行者也能阅读吗?
这同样适用于镶木地板吗?
提前致谢。
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"
)
您是否提供了数据架构?
如果没有,Spark 会尝试获取所有文件的架构,然后继续执行。
我在 s3 中有 30GB 的 ORC 文件 (24 部分 * 1.3G)。我正在使用 spark 来读取这个 orc 并进行一些操作。但是根据我观察到的日志,甚至在执行任何操作之前,spark 正在打开并从 s3 读取所有 24 个部分 (仅读取文件需要 12 分钟)。但我在这里担心的是,所有这些读取操作都在发生 only in driver and executors are all idle 此时。
谁能解释一下为什么会这样?有什么方法可以让所有的执行者也能阅读吗?
这同样适用于镶木地板吗?
提前致谢。
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"
)
您是否提供了数据架构?
如果没有,Spark 会尝试获取所有文件的架构,然后继续执行。