【问题标题】:Why is an empty file with the name of folder inside a Azure Blob storage container is created?为什么会创建一个名为 Azure Blob 存储容器内文件夹名称的空文件?
【发布时间】:2019-03-23 04:22:23
【问题描述】:

我正在通过 HD Insight 按需集群运行 Hive QL,该集群执行以下操作

  1. 从 Hive 视图假脱机数据
  2. 在 Blob 存储容器中按名称 abcd 创建一个文件夹 命名为 XYZ
  3. 将视图数据存储在 abcd 文件夹内的文件中

但是,当运行 hive QL 时,会在 abcd 文件夹之外创建一个名为 abcd 的空文件

知道为什么会发生这种情况以及我们如何阻止它发生。请推荐

谢谢,

苏利亚

【问题讨论】:

  • 我在安装到 spark 集群数据块上的 blob 存储时遇到了同样的问题。它似乎是通过通过 sh 或 shutil 而不是通过 dbutils 访问(或写入,两者都发生)dbfs 来触发的。有谁知道他为什么会发生?以及如何预防?通过 sh 看不到空文件,因此可能与内核处理文件系统操作的方式有关?
  • 我也被这个问题困扰,我们在spark中使用它,这个问题破坏了我们的spark历史服务器,文件夹中的文件名为空。

标签: azure-blob-storage hiveql azure-hdinsight


【解决方案1】:

您得到这个是因为您正在装载的 Azure 存储没有分层文件系统。例如,挂载是 StorageV2 类型的 blob 存储,但您在创建时没有勾选使用分层文件系统。具有分层文件系统的第 2 版 blob 称为 Azure Data Lake Storage 第 2 代 (ADLS Gen2),它们基本上消除了 ADLS 第 1 代与旧 blob 代的 blob - 湖差异。

根据您使用的 blob API,即使您没有分层 FS,也会使用许多技巧来给您一种分层 FS 的错觉。就像创建空文件或隐藏文件一样。主要是层次结构是扁平的(即没有),所以你不能只创建一个空文件夹,你必须在那里放一些东西。

例如,如果您在 Databricks 中使用 wasbs:// 驱动程序挂载 v2 blob,然后从 %sh 单元格执行 mkdir -p /dbfs/mnt/mymount/this/is/a/path,您将看到如下内容:

  • this 文件夹,this 空文件
  • this/is 文件夹,this/is 空文件

最后,虽然这是 Azure blob 本身的完美文件,但它可能会给其他任何意想不到的东西带来麻烦,甚至是 %sh ls

只需将存储重新创建为 ADLS Gen2,或实时更新它以启用分层 FS。

谢谢,

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 2016-04-03
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2018-09-24
    • 2019-06-12
    相关资源
    最近更新 更多