HDFS

本指南介绍了将 HDFS 配置为 Alluxio 的底层存储系统的说明。 HDFS,即 Hadoop 分布式文件系统,是 Hadoop 应用程序使用的主要分布式存储,为 Hadoop 生态系统中的大数据处理提供可靠且可扩展的存储。 有关 HDFS 的更多信息,请阅读其文档

先决条件

在开始之前,请确保您已具备下列所需信息:

在使用 HDFS 和 Alluxio 之前:

<HDFS_NAMENODE>

处理到集群的客户端连接的 NameNode 的 IP 地址。NameNode 是 Apache Hadoop HDFS 体系结构中的主节点,负责维护和管理 DataNode(从节点)上存在的块。

<HDFS_PORT>

NameNode 接受客户端连接的端口。

<HADOOP_VERSION>

Hadoop 的版本

基本设置

使用挂载表示例 添加新的挂载点,指定创建挂载的 Alluxio 路径和作为 UFS URI 的 HDFS 地址。 凭据和配置选项也可以作为挂载操作的一部分指定,如配置挂载点中所述。

使用 operator 创建挂载点的 ufs.yaml 示例:

apiVersion: k8s-operator.alluxio.com/v1
kind: UnderFileSystem
metadata:
  name: alluxio-hdfs
  namespace: alx-ns
spec:
  alluxioCluster: alluxio-cluster
  path: hdfs://<HDFS_NAMENODE>:<HDFS_PORT>
  mountPath: /hdfs
  mountOptions:
    alluxio.underfs.version: <HADOOP_VERSION>

如果不使用 operator,将 hdfs://<HDFS_NAMENODE>:<HDFS_PORT> 挂载到 /hdfs 的示例命令:

bin/alluxio mount add --path /hdfs/ --ufs-uri hdfs://<HDFS_NAMENODE>:<HDFS_PORT> \
  --option alluxio.underfs.version=<HADOOP_VERSION>

如果您在本地运行 HDFS namenode 并使用默认端口并将 HDFS 根目录映射到 Alluxio,则 UFS URI 可以是 hdfs://localhost:8020, 如果仅将 HDFS 目录 /alluxio/data 映射到 Alluxio,则为 hdfs://localhost:8020/alluxio/data。 要找出 HDFS 正在运行的位置,请使用 hdfs getconf -confKey fs.defaultFS 获取 HDFS 正在侦听的默认主机名和端口。

此外,您应将属性 alluxio.underfs.version 指定为您的 HDFS 版本。 请参阅使用特定版本挂载 HDFS

高级设置

请注意,配置选项可以指定为挂载选项或 conf/alluxio-site.properties 中的配置属性。 以下部分将介绍如何将配置设置为属性,但它们也可以通过 --option <key>=<value> 设置为挂载选项。

指定 HDFS 配置位置

当 HDFS 具有非默认配置时,您需要配置 Alluxio 服务器以使用正确的配置文件访问 HDFS。 请注意,一旦设置了此项,使用 Alluxio 客户端的应用程序就不需要任何特殊配置。

有两种可能的方法:

  • hdfs-site.xmlcore-site.xml 从您的 Hadoop 安装复制或创建符号链接到 ${ALLUXIO_HOME}/conf。 确保在所有运行 Alluxio 的服务器上都进行了此设置。

  • 或者,您可以在 conf/alluxio-site.properties 中将属性 alluxio.underfs.hdfs.configuration 设置为指向您的 hdfs-site.xmlcore-site.xml。 确保在所有运行 Alluxio 的服务器上都配置了此配置。

alluxio.underfs.hdfs.configuration=/path/to/hdfs/conf/core-site.xml:/path/to/hdfs/conf/hdfs-site.xml

HDFS Namenode HA 模式

要将 Alluxio 配置为与 HA 模式下的 HDFS namenode 一起使用,请首先配置 Alluxio 服务器以使用正确的配置文件访问 HDFS

此外,将底层存储地址设置为 hdfs://nameservice/nameservice 是 已在 hdfs-site.xml 中配置的 HDFS 名称服务)。 要将 HDFS 子目录挂载到 Alluxio 而不是整个 HDFS 命名空间,请将底层存储地址更改为类似 hdfs://nameservice/alluxio/data 的内容。

$ bin/alluxio mount add --path /hdfs/ --ufs-uri hdfs://nameservice/

用户/权限映射

为确保 HDFS 中文件/目录的权限信息(包括用户、组和模式)与 Alluxio 一致 (例如,由用户 Foo 在 Alluxio 中创建的文件在持久化到 HDFS 时也以用户 Foo 为所有者), 启动 Alluxio 协调器和 worker 进程的用户必须是:

  1. HDFS 超级用户 即,使用启动 HDFS namenode 进程的同一用户也启动 Alluxio 协调器和 worker 进程。

  2. HDFS 超级用户组的成员。 编辑 HDFS 配置文件 hdfs-site.xml 并检查配置属性 dfs.permissions.superusergroup 的值。 如果此属性设置为一个组(例如,“hdfs”),则将启动 Alluxio 进程的用户(例如,“alluxio”)添加到此组(“hdfs”); 如果未设置此属性,则向此属性添加一个组,其中您的 Alluxio 运行用户是此新添加组的成员。

上面设置的用户只是启动 Alluxio 协调器和 worker 进程的身份。 一旦 Alluxio 服务器启动,不必使用此用户运行您的 Alluxio 客户端应用程序。

连接到安全的 HDFS

如果您的 HDFS 集群已启用 Kerberos,请首先配置 Alluxio 服务器以使用正确的配置文件访问 HDFS

此外,需要安全配置才能使 Alluxio 与 HDFS 集群通信。 在 alluxio-site.properties 中设置以下 Alluxio 属性:

alluxio.security.kerberos.server.keytab.file=<YOUR_HDFS_KEYTAB_FILE_PATH>
alluxio.security.kerberos.server.principal=hdfs/<_HOST>@<REALM>
alluxio.security.kerberos.client.keytab.file=<YOUR_HDFS_KEYTAB_FILE_PATH>
alluxio.security.kerberos.client.principal=hdfs/<_HOST>@<REALM>

如果连接到安全的 HDFS,请在所有 Alluxio 节点上运行 kinit。 使用主体 hdfs 和您之前在 alluxio-site.properties 中配置的 keytab。 一个已知的限制是 Kerberos TGT 可能会在最大续订生命周期后过期。 您可以通过定期续订 TGT 来解决此问题。 否则,在启动 Alluxio 服务时,您可能会看到 No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)。 另一个选项是设置 alluxio.hadoop.kerberos.keytab.login.autorenewal=true,以便自动刷新 TGT。

用户还可以使用 alluxio.hadoop.security.krb5.conf 指定 krb5.conf 文件位置 并使用 alluxio.hadoop.security.authentication 指定身份验证方法。

自定义 Kerberos 领域/KDC

默认情况下,Alluxio 将使用机器级 Kerberos 配置来确定 Kerberos 领域 和 KDC。您可以通过设置 JVM 属性 java.security.krb5.realmjava.security.krb5.kdc 来覆盖这些默认值。

要设置这些,请在 conf/alluxio-env.sh 中设置 ALLUXIO_JAVA_OPTS

ALLUXIO_JAVA_OPTS+=" -Djava.security.krb5.realm=<YOUR_KERBEROS_REALM> -Djava.security.krb5.kdc=<YOUR_KERBEROS_KDC_ADDRESS>"

使用特定版本挂载 HDFS

用户有多种方法可以将具有指定版本的 HDFS 集群作为底层存储挂载到 Alluxio 命名空间中。 在使用特定版本的 HDFS 挂载之前,请确保您已使用该特定版本的 HDFS 构建了客户端。 您可以通过转到 Alluxio 目录下的 lib 目录来检查此客户端是否存在。

使用站点属性

当使用特定 HDFS 版本挂载 Alluxio 根目录的底层存储时,可以在站点属性文件 (conf/alluxio-site.properties) 中添加以下行

alluxio.underfs.version=3.3

支持的 HDFS 版本

Alluxio 支持以下 HDFS 版本作为挂载选项 alluxio.underfs.version 的有效参数:

  • Apache Hadoop:2.10、3.3

如果所需版本不可用,请通过 [email protected] 联系您的 Alluxio 客户代表。

使用 Hadoop 本机库

Hadoop 附带一个本机库,与 Java 实现相比,它提供更好的性能和附加功能。 例如,当使用本机库时,HDFS 客户端可以使用本机校验和函数,这比默认的 Java 实现更有效。 要将 Hadoop 本机库与 Alluxio HDFS 底层文件系统一起使用,请首先按照 此页面上的说明在 Alluxio 节点上安装本机库。 在机器上安装 hadoop 本机库后,通过添加以下行来更新 conf/alluxio-env.sh 中的 Alluxio 启动 Java 参数:

ALLUXIO_JAVA_OPTS+=" -Djava.library.path=<local_path_containing_hadoop_native_library> "

确保重新启动 Alluxio 服务以使更改生效。

[实验性] HDFS 回收站支持

HDFS 默认支持回收站功能。当删除 HDFS 文件时,它将被移动到回收站目录,稍后才被实际删除。 用户可以通过设置 alluxio.underfs.hdfs.trash.enabled=true 来启用 HDFS 回收站功能。

如果启用了该功能,当用户通过 Alluxio 删除存储在 HDFS 中的文件时, Alluxio 将尝试将其移动到 HDFS 回收站目录,而不是直接从 HDFS 中删除它。 请注意,必须在 core-site.xml 中配置 HDFS 以启用回收站功能。 如果 HDFS 中未启用回收站功能,Alluxio 将直接删除文件,而不管此配置如何。

Last updated