【问题标题】:Loading millions of small files from Azure Data Lake Store to Data Bricks将数百万个小文件从 Azure Data Lake Storage 加载到 Databricks
【发布时间】:2018-04-10 12:17:47
【问题描述】:

我在 Azure Data Lake Store 中有一个分区文件夹结构,其中包含大约 600 万个 json 文件(大小为几 kb 到 2 mb)。我正在尝试使用 Data Bricks 中的 Python 代码从这些文件中提取一些字段。

目前我正在尝试以下方法:

spark.conf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("dfs.adls.oauth2.client.id", "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx")
spark.conf.set("dfs.adls.oauth2.credential", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
spark.conf.set("dfs.adls.oauth2.refresh.url", "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/oauth2/token")

df = spark.read.json("adl://xxxxxxx.azuredatalakestore.net/staging/filetype/category/2017/*/")

这个例子甚至只读取了部分文件,因为它指向“staging/filetype/category/2017/”。它似乎可以工作,并且当我运行这些命令时会开始一些工作。它只是非常缓慢。

Job 40 索引所有子文件夹并且速度相对较快

Job 41 检查了一组文件,似乎有点太快了

然后是作业 42,这就是缓慢开始的地方。它似乎和工作 41 做同样的活动,只是……慢

感觉和this thread有类似的问题。但是41工作的速度让我怀疑。有更快的方法吗?

【问题讨论】:

  • 我在 spark 路由中使用通配符时遇到了一些问题/性能问题。我尽量避免它们,之前扩展所需的路线并使用spark.read.json("adl://xxxxxxx.azuredatalakestore.net/staging/filetype/category/2017/whatever/*.json")。总之,使用通配符读取叶节点中的一组文件。考虑到 spark 内部会递归调用 list() 操作,这是相当昂贵的。

标签: apache-spark azure-data-lake databricks


【解决方案1】:

添加到杰森的答案:

我们已经在 Azure Data Lake 中使用 U-SQL 对大约 170 万个文件运行了一些测试作业,并且能够在大约 20 小时内使用 10 个 AU 完成处理。这项工作正在生成数千个提取顶点,因此如果有更多的 AU,它可能会在很短的时间内完成。

我们还没有测试过 6m 文件,但如果您愿意尝试,请告诉我们。

无论如何,我都同意 Jason 的建议,即减少数量并使文件更大。

【讨论】:

    【解决方案2】:

    我们使用 Azure 功能每小时合并文件,这会显着降低文件处理。因此,在将文件发送到 ADB 集群进行处理之前,请尝试合并文件。如果不是 - 要么你有非常多的工作节点,这可能会增加你的成本。

    【讨论】:

      【解决方案3】:

      我认为您需要在处理之前考虑合并文件。既增加大小又减少文件数量。最佳文件大小约为 250mb。有很多方法可以做到这一点,也许最简单的方法是使用 azure 数据湖分析作业,甚至使用 spark 迭代文件的子集

      【讨论】:

      • 您对如何使用 databricks/spark 合并文件有一些建议吗?有些文件太大了,无法放入 c# 字符串数据类型,这使得通过数据湖分析作业很难做到这一点
      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2021-03-02
      • 1970-01-01
      • 2020-07-21
      • 2020-05-12
      相关资源
      最近更新 更多