无法读取文件和目录列表WASB文件系统

学习如何解释错误发生在访问WASB附加在砖blob类型。

写的亚当Pavlacka

去年发表在:2022年6月1日

问题

当你试着读一个文件在WASB火花,得到以下异常:

org.apache.spark。SparkException:工作阶段失败而终止:任务0阶段1.0失败了4次,最近的失败:在舞台上失去了任务0.3 1.0 (10.139.64.5 TID 19日,执行人0):shaded.databricks.org.apache.hadoop.fs.azure.AzureException: com.microsoft.azure.storage。StorageException: Blob类型不正确,请使用正确的Blob类型来访问服务器上的一个Blob。预计BLOCK_BLOB,实际APPEND_BLOB。

当你尝试在WASB使用清单文件dbutils.fs.ls或Hadoop API,得到以下异常:

. io .FileNotFoundException:文件/ < some-directory >并不存在。

导致

WASB文件系统支持三种类型的斑点:块,页面,添加。

  • 块斑点是优化上传大的数据块在Hadoop(默认)。
  • 页面blob优化随机读和写操作。
  • 附加blob附加操作的优化。

看到理解块斑点,附加blob和页面blob获取详细信息。

上述错误发生如果你想读一个blob或附加一个目录列表只包含附加blob。砖和Hadoop AzureWASB实现不支持阅读附加blob。同样当清单目录,添加气泡将被忽略。

没有解决方法,使阅读附加blob或清单目录只包含附加blob。不过,您可以使用Azure CLI或存储Azure SDK Python来确定如果一个目录包含blob或附加文件是一个附加的团。

您可以验证是否通过运行以下目录包含附加blob Azure CLI命令:

阿兹存储blob列\——auth-mode关键\帐户名称<帐户名称> \——容器名称<容器名称> \——prefix <路径>

返回的结果是作为一个JSON文档,你可以很容易地找到blob类型为每个文件。

如果目录是大,你可以限制数量的结果与国旗——num-results < num >

您还可以使用Azure存储SDK Python和探索WASB文件系统中的文件列表:

% python iter = service.list_blobs iter (blob“容器”):如果blob.properties。blob_type = =“AppendBlob”:打印(“\ t Blob名称:% s, % s“% (blob.name blob.properties.blob_type))

砖不支持访问附加blob使用Hadoop API,但只有当追加到一个文件。

解决方案

没有解决这个问题。

使用Azure CLI或存储Azure SDK Python来确定如果目录包含附加blob或对象是一个附加的团。

您可以实现一个火花SQL UDF或自定义函数使用抽样API加载,阅读,或将气泡对Python使用Azure存储SDK。

这篇文章有用吗?