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.xml
和core-site.xml
从您的 Hadoop 安装复制或创建符号链接到${ALLUXIO_HOME}/conf
。 确保在所有运行 Alluxio 的服务器上都进行了此设置。或者,您可以在
conf/alluxio-site.properties
中将属性alluxio.underfs.hdfs.configuration
设置为指向您的hdfs-site.xml
和core-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 进程的用户必须是:
HDFS 超级用户 即,使用启动 HDFS namenode 进程的同一用户也启动 Alluxio 协调器和 worker 进程。
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.realm
和 java.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