您的位置:首页 > 运维架构

Hadoop-2.4.1学习之配置管理HDFS联盟

2014-10-13 16:53 260 查看
       Hadoop-1.x版本中的HDFS架构在整个集群中只允许一个命名空间,由一个NameNode管理整个命名空间,Hadoop-2.x版本中的HDFS联盟通过支持多个NameNode和命名空间解决了之前架构的局限性。HDFS联盟的配置管理是向后兼容的,允许现存的单节点NameNode配置在不需要任何修改的情况下工作正常。新的配置管理允许集群中的所有节点使用相同的配置而不需要根据节点的不同类型部署不同的配置文件。

      伴随HDFS联盟还产生了称为NameServiceID的新的抽象概念,NameNode及其对应的secondary、backup、checkpointer节点都属于同一NameServiceID。为了支持上述一个配置文件的机制,NameNode及secondary、backup、checkpointer节点的配置参数以NameServiceID为后缀并增加到相同的配置文件中。

      在hdfs-site.xml中,dfs.nameservices定义了用逗号分隔的不同的NameServiceID,DateNodes将使用这些信息确定集群中的NameNodes。NameNode需要根据dfs.nameservices配置下表中的参数:

dfs.namenode.rpc-address

处理所有客户端请求的RPC地址,格式为nn-host1:rpc-port

dfs.namenode.servicerpc-address

HDFS服务的通信地址。如果配置了该参数,BackupNode、Datanodes 和其它服务会连接该地址,如果没有配置该参数,默认将使用dfs.namenode.rpc-address的值

dfs.namenode.http-address

NameNode的web接口监听的地址

dfs.namenode.https-address

NameNode的https服务器地址

dfs.namenode.keytab.file

Keytab文件的路径

dfs.namenode.name.dir

NameNode存储名称表(fsimage)的本地文件系统目录

dfs.namenode.edits.dir

NameNode存储事务文件(edits)的本地文件系统目录,默认使用dfs.namenode.name.dir的值

      SecondaryNameNode需要配置下表中的参数:

dfs.namenode.secondary.http-address

SecondaryNameNode的http服务器地址

dfs.secondary.namenode.keytab.file

Keytab文件的路径

dfs.namenode.checkpoint.dir

SecondaryNameNode在本地文件系统中存储用于合并的临时fsimage文件的目录

dfs.namenode.checkpoint.edits.dir

SecondaryNameNode在本地文件系统中存储用于合并的临时edits文件的目录,默认使用dfs.namenode.checkpoint.dir的值

      由于BackupNode和CheckpointerNode使用的是一样的参数名(二者使用的是相同的配置参数且NameNode只支持一种类型),所以下面的参数对于BackupNode和CheckpointerNode是通用的:

dfs.namenode.backup.address

BackupNode服务器的地址和端口号

dfs.namenode.backup.http-address

BackupNode的http服务器的地址和端口号

dfs.secondary.namenode.keytab.file

Keytab文件的路径

      如果不使用BackupNode或者CheckpointerNode,则不需要配置与之对应的参数。下面是有两个NameNode集群的hdfs-site.xml配置文件示例:

<configuration>
<property>
<name>dfs.nameservices</name>
<value>ns1,ns2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>nn-host1:rpc-port</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name>
<value>nn-host1:http-port</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.ns1</name>
<value>snn-host1:http-port</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2</name>
<value>nn-host2:rpc-port</value>
</property>
<property>
<name>dfs.namenode.http-address.ns2</name>
<value>nn-host2:http-port</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.ns2</name>
<value>snn-host2:http-port</value>
</property>

.... Other common configuration ...
</configuration>


      在HDFS联盟中,使用下面的命令对NameNode进行格式化:

hdfs namenode –format [-clusterId <cluster_id>]

      其中cluster_id具有唯一性,不能与其它集群所使用的cluster_id冲突,如果未使用-clusterId选项,hadoop将会自动生成唯一的ClusterID。使用下面的命令格式化额外的NameNode:

hdfs namenode –format -clusterId <cluster_id>

      在格式化额外的NameNode时必须使用-clusterId选项,并且cluster_id必须与格式化第一个NameNode时的cluster_id一致,否则额外的NameNode将不会成为集群中的一部分。如果在第一次格式化NameNode时未使用-clusterId,那么第二次格式化时就需要查看VERSION文件,其中记录了ClusterID的值。

      当向现存的HDFS集群中新增NameNode时,需要先在hdfs-site.xml中增加该NameNode的配置,并将修改后的hdfs-site.xml文件分发到集群中的所有节点上,然后启动新的NameNode、SecondaryNameNode或者BackupNode,最后针对集群中的所有DataNodes使用下面的命令刷新新增的NameNode:

hdfs dfadmin -refreshNameNode <datanode_host_name>:<datanode_rpc_port>

      删减DataNodes与Hadoop-1.x类似,首先在所有的NameNodes上将不再使用的DataNodes添加到排除文件中,然后每个NameNode退役它的Block池,当所有的NameNode完成DataNode的退役后,该DataNode被认为是在集群中不再使用的。使用下面的命令将排除文件分不到所有的NameNode上:

sbin/distributed-exclude.sh <exclude_file>

      然后使用下面的命令刷新所有的NameNodes使用新的排除文件:

sbin/refresh-namenodes.sh

      可以使用下面的URL访问整个集群,其中的主机名和端口号可以是集群中的任何NameNode:

http://<any_nn_host:port>/dfsclusterhealth.jsp

      通过该web页面,用户可以获得下面的信息:

集群中的文件数量,块数量,总的存储容量,可用存储和已用存储。
所有NameNode的列表,每个NameNode的文件数量、块数量、丢失的块数量,有效的和无效的DataNode。还有访问每个NameNodeweb页面的链接。
正在退役的DataNode的状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息