> For the complete documentation index, see [llms.txt](https://documentation.alluxio.io/ee-ai-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.alluxio.io/ee-ai-cn/ufs/azure-blob-store.md).

# Azure Blob Storage

本指南介绍了如何将 Alluxio 配置为使用 [Azure Blob 存储](https://azure.microsoft.com/en-in/services/storage/blobs/) 作为底层存储系统。

## 先决条件

在使用 Azure Blob 存储和 Alluxio 之前，请在您的 Azure 存储帐户中创建一个新容器或使用现有容器。您还应该注意您想在该容器中使用的目录，可以通过在容器中创建新目录或使用现有目录来实现。在本指南中，Azure 存储帐户名称为 `<AZURE_ACCOUNT>`，该存储帐户中的容器为 `<AZURE_CONTAINER>`，该容器中的目录为 `<AZURE_DIRECTORY>`。有关 Azure 存储帐户的更多信息，请参阅[此处](https://docs.microsoft.com/en-us/azure/storage/storage-create-storage-account)。

## 基本设置

通用挂载机制和 `UnderFileSystem` CR 字段参考，请参阅[底层存储](/ee-ai-cn/ufs.md#ji-ben-gua-zai-pei-zhi)。

请通过 `abfs` scheme 挂载容器，该 scheme 由 ABFS driver 提供。容器是 authority 的一部分，用 `@` 与帐户主机名分隔：

```
abfs://<AZURE_CONTAINER>@<AZURE_ACCOUNT>.dfs.core.windows.net/<AZURE_DIRECTORY>/
```

{% tabs %}
{% tab title="Kubernetes (Operator)" %}
使用 operator 创建 Azure Blob Storage 挂载点的 `ufs.yaml` 示例：

```yaml
apiVersion: k8s-operator.alluxio.com/v1
kind: UnderFileSystem
metadata:
  name: alluxio-abfs
  namespace: alx-ns
spec:
  alluxioCluster: alluxio-cluster
  path: abfs://<AZURE_CONTAINER>@<AZURE_ACCOUNT>.dfs.core.windows.net/<AZURE_DIRECTORY>/
  mountPath: /abfs
  mountOptions:
    fs.azure.account.key.<AZURE_ACCOUNT>.dfs.core.windows.net: <YOUR ACCESS KEY>
```

{% endtab %}

{% tab title="Docker / 裸机" %}
如果不使用 operator，将 `abfs://<AZURE_CONTAINER>@<AZURE_ACCOUNT>.dfs.core.windows.net/<AZURE_DIRECTORY>/` 挂载到 `/abfs` 的示例命令：

```shell
bin/alluxio mount add --path /abfs/ --ufs-uri abfs://<AZURE_CONTAINER>@<AZURE_ACCOUNT>.dfs.core.windows.net/<AZURE_DIRECTORY>/ \
  --option fs.azure.account.key.<AZURE_ACCOUNT>.dfs.core.windows.net=<YOUR ACCESS KEY>
```

此属性键 `fs.azure.account.key.<AZURE_ACCOUNT>.dfs.core.windows.net` 将让 Alluxio 使用 AccountKey 访问 Azure Blob 存储。
{% endtab %}
{% endtabs %}

`abfs://` 与 `abfss://` 都会走到该 driver。`abfss://` 始终使用 HTTPS；`abfs://` 也一样，除非关闭了 Hadoop 的 `fs.azure.always.use.https`。挂载用哪个都可以。

{% hint style="warning" %}
属性键里的 endpoint 必须是 `dfs`，与 URI 保持一致。Alluxio 只识别 `fs.azure.account.key.<AZURE_ACCOUNT>.dfs.core.windows.net` 形式的帐户密钥；写成 blob endpoint 的那个不会被当作密钥，挂载会退回到托管标识认证，随后以 token 相关的报错失败，而不是任何指向凭据的提示。
{% endhint %}

## WASB 挂载

{% hint style="warning" %}
WASB 已不再是访问 Azure Storage 的推荐方式。它依赖的 [`com.microsoft.azure.storage`](https://github.com/Azure/azure-storage-java) 属于 Azure Storage Java Track 1 SDK，Microsoft 已于 2024 年 9 月 13 日结束对该 SDK 的支持。现有 WASB 挂载可能仍可继续使用，但新建挂载建议采用 `abfs://`。
{% endhint %}

`wasb://` 与 `wasbs://` 由 WASB driver 提供，它通过帐户的 blob endpoint 访问，帐户密钥也用另一个属性名：

```
wasbs://<AZURE_CONTAINER>@<AZURE_ACCOUNT>.blob.core.windows.net/<AZURE_DIRECTORY>/
fs.azure.account.key.<AZURE_ACCOUNT>.blob.core.windows.net=<YOUR ACCESS KEY>
```

如果挂载使用的是 `wasb://` 而不是 `wasbs://`，要求 HTTPS 的帐户会报告：

```
alluxio.exception.AlluxioException: com.microsoft.azure.storage.StorageException: The account being accessed does not support http.
```

请将路径改为以 `wasbs://` 开头。
