本指南概述了HDFS联合身份验证功能以及如何配置和管理联合群集。
HDFS有两个主要层:
先前的HDFS体系结构仅允许整个集群使用单个名称空间。在该配置中,单个Namenode管理名称空间。HDFS联合会通过向HDFS添加对多个Namenode /命名空间的支持来解决此限制。
为了水平扩展名称服务,联合会使用多个独立的Namenodes /命名空间。名称节点是联合的;Namenode是独立的,不需要相互协调。数据节点被所有名称节点用作块的公共存储。每个Datanode向集群中的所有Namenode注册。数据节点定期发送心跳并阻止报告。他们还处理来自Namenodes的命令。
用户可以使用ViewF创建个性化的名称空间视图。ViewFs类似于某些Unix / Linux系统中的客户端挂载表。
区块池
块池是一组属于单个名称空间的块。数据节点存储集群中所有块池的块。每个块池都是独立管理的。这允许命名空间为新块生成块ID,而无需与其他命名空间进行协调。Namenode故障不会阻止Datanode服务群集中的其他Namenode。
命名空间及其块池一起称为“命名空间卷”。它是一个独立的管理部门。删除名称节点/名称空间后,将删除数据节点上的相应块池。在群集升级期间,每个名称空间卷都作为一个单元升级。
集群ID
甲丛集编号标识用于识别该集群中的所有节点。格式化Namenode时,将提供此标识符或自动生成该标识符。该ID应该用于将其他Namenode格式化为集群。
联合配置是向后兼容的,并允许现有的单个Namenode配置无需任何更改即可工作。设计新配置时,群集中的所有节点都具有相同的配置,而无需根据群集中节点的类型部署不同的配置。
联合会添加新的NameServiceID抽象。Namenode及其对应的辅助/备份/检查指针节点均属于NameServiceId。为了支持单个配置文件,Namenode和secondary / backup / checkpointer配置参数以NameServiceID为后缀。
步骤1:将dfs.nameservices参数添加到您的配置中,并用逗号分隔的NameServiceID列表进行配置。Datanode将使用它来确定集群中的Namenode。
步骤2:对于每个Namenode和Secondary Namenode / BackupNode / Checkpointer,将以下带有相应NameServiceID后缀的配置参数添加到公共配置文件中:
守护进程 | 配置参数 |
---|---|
命名节点 | dfs.namenode.rpc地址 dfs.namenode.servicerpc地址 dfs.namenode.http地址 dfs.namenode.https地址 dfs.namenode.keytab.file dfs.namenode.name.dir dfs.namenode.edits.dir dfs .namenode.checkpoint.dir dfs.namenode.checkpoint.edits.dir |
次要名称节点 | dfs.namenode.secondary.http地址 dfs.secondary.namenode.keytab.file |
备份节点 | dfs.namenode.backup.address dfs.secondary.namenode.keytab.file |
这是带有两个Namenodes的示例配置:
<配置> <属性> <name> dfs.nameservices </ name> <value> ns1,ns2 </ value> </ property> <属性> <name> dfs.namenode.rpc-address.ns1 </ name> <value> nn-host1:rpc-port </ value> </ property> <属性> <name> dfs.namenode.http-address.ns1 </ name> <value> nn-host1:http端口</ value> </ property> <属性> <name> dfs.namenode.secondary.http-address.ns1 </ name> <value> snn-host1:http端口</ value> </ property> <属性> <name> dfs.namenode.rpc-address.ns2 </ name> <value> nn-host2:rpc-port </ value> </ property> <属性> <name> dfs.namenode.http-address.ns2 </ name> <value> nn-host2:http端口</ value> </ property> <属性> <name> dfs.namenode.secondary.http-address.ns2 </ name> <value> snn-host2:http端口</ value> </ property> ....其他常见配置... </ configuration>
步骤1:使用以下命令格式化Namenode:
[hdfs] $ $ HADOOP_HOME / bin / hdfs namenode -format [-clusterId <cluster_id>]
选择一个唯一的cluster_id,它不会与您环境中的其他集群冲突。如果未提供cluster_id,则会自动生成一个唯一的cluster_id。
步骤2:使用以下命令格式化其他Namenode:
[hdfs] $ $ HADOOP_HOME / bin / hdfs namenode -format -clusterId <cluster_id>
请注意,第2步中的cluster_id必须与第1步中的cluster_id相同。如果它们不同,则其他Namenode将不会成为联合集群的一部分。
较早的版本仅支持单个Namenode。将集群升级到较新版本以启用联盟,在升级过程中,您可以按以下方式提供ClusterID:
[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon启动名称节点-upgrade -clusterId <cluster_ID>
如果未提供cluster_id,则会自动生成。
执行以下步骤:
将dfs.nameservices添加到配置中。
使用NameServiceID后缀更新配置。在发布0.20之后,配置密钥名称已更改。您必须使用新的配置参数名称才能使用联合身份验证。
将新的与Namenode相关的配置添加到配置文件。
将配置文件传播到集群中的所有节点。
启动新的Namenode和Secondary / Backup。
通过对集群中的所有数据节点运行以下命令,刷新数据节点以拾取新添加的名称节点:
[hdfs] $ $ HADOOP_HOME / bin / hdfs dfsadmin -refreshNamenodes <datanode_host_name>:<datanode_rpc_port>
要启动集群,请运行以下命令:
[hdfs] $ $ HADOOP_HOME / sbin / start-dfs.sh
要停止集群,请运行以下命令:
[hdfs] $ $ HADOOP_HOME / sbin / stop-dfs.sh
这些命令可以从任何可用HDFS配置的节点上运行。该命令使用配置来确定集群中的Namenode,然后在这些节点上启动Namenode进程。数据节点在worker文件中指定的节点上启动。该脚本可用作构建您自己的脚本以启动和停止集群的参考。
平衡器已更改为可与多个Namenodes一起使用。可以使用以下命令运行Balancer:
[hdfs] $ $ HADOOP_HOME / bin / hdfs --daemon启动平衡器[-policy <policy>]
策略参数可以是以下任意一个:
datanode-这是默认策略。这样可以在Datanode级别平衡存储。这类似于平衡先前版本中的策略。
blockpool -这个余额存储在块池级别也平衡在Datanode的水平。
请注意,Balancer仅平衡数据,不平衡名称空间。有关完整的命令用法,请参见balancer。
退役与先前版本相似。需要停用的节点将添加到所有Namenode的排除文件中。每个Namenode停用其块池。当所有Namenode都停止使用Datanode时,该Datanode被视为已停止使用。
步骤1:要将排除文件分发到所有Namenode,请使用以下命令:
[hdfs] $ $ HADOOP_HOME / sbin / distribute-exclude.sh <exclude_file>
第2步:刷新所有Namenode以拾取新的排除文件:
[hdfs] $ $ HADOOP_HOME / sbin / refresh-namenodes.sh
上面的命令使用HDFS配置来确定集群中已配置的Namenode,并刷新它们以获取新的排除文件。