【问题标题】:Is there a way to parallelize spark.read.load(string*) when reading many files?有没有办法在读取多个文件时并行化 spark.read.load(string*) ?
【发布时间】:2020-09-05 03:39:18
【问题描述】:

我注意到在 spark-shell (spark 2.4.4) 中,当我执行简单的spark.read.format(xyz).load("a","b","c",...) 时,看起来 spark 使用单个 ipc 客户端(或“线程”)来加载文件 a、b、c , ... 依次(它们是 hdfs 的路径)。

这是预期的吗?

我问的原因是,就我而言,我正在尝试加载 50K 文件,而顺序加载需要很长时间。

谢谢

PS,我试图在源代码中看到它,但不确定这是不是这个: https://github.com/apache/spark/blob/branch-2.4/sql/core/src/main/scala/org/apache/spark/sql/DataFrameReader.scala#L180

【问题讨论】:

  • 如果您使用 spark-shell - 默认情况下 spark-shell 使用单线程 & 因此它将仅通过单线程处理所有文件。 & 尝试运行 spark-shell --master yarn pass some executors & 检查它是加载顺序还是并行。
  • 我记得 spark-shell 默认使用所有本地 cpu(在我的情况下为 48)。我还尝试了 --master yarn 多个执行器编号,它仍然是单线程。我的理解是,由于“加载”只是加载文件信息(而不是文件内容),所以 spark 只是使用一个线程。

标签: performance apache-spark file-io spark-shell


【解决方案1】:

可能不是我最初问题的确切“答案”,但我发现了我的特殊情况的原因:从名称节点的审核日志中,发现有一些与名称节点挂钩的失控作业,这大大减慢了速度RPC调用。杀掉这些坏工作后,火花的加载速度有了很大的提升。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多