背景
HDFS包含两个层,上面是NameSpace层,下面是Block Storage层
NameSpace:
- 包含一组目录,文件,和块
- 支持文件系统操作,比如创建,删除,修改和list files以及目录
Block Storage Service:
Block Management(在NameNode执行)
- 提供Datanode关系,周期性的心跳
- Block reports,Block的位置信息
- 支持块相关的操作
- 管理副本位置
存储
- datanode提供块的读写
多个NameNode/Namespaces
datanode向所有独立的NameNode注册,提交心跳信息。
dn向hdfs-site.xml中配置的所有的ns注册,提交信息。同一个clusterid生成一个current目录。
Pool
Pool是属于单个NameNode的一组块的的集和。一个Namespace和它的Block pool合在一起称为Namespace volume.它可以独立升级。pool是一个逻辑概念~
ClusterId
标识集群中的所有节点
联邦配置
配置NameServie
配置的时候key值后面增加NS,表示对NS的配置
<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>
格式化namenode
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
可以通过升级时指定cluster_id
bin/hdfs --daemon start namenode -upgrade -clusterId <cluster_ID>
增加新的Namenode
- 更新配置
增加nameservice,广播到各个namenode节点 - 启动namenode
- 所有的datanode刷新
[hdfs]$ $HADOOP_HOME/bin/hdfs dfsadmin -refreshNamenodes <datanode_host_name>:<datanode_ipc_port>
管理集群
balancer
默认策略是基于datanode进行平衡,可以选择blockpool
/bin/hdfs --daemon start balancer [-policy <policy>]
下线
指定exclude文件
$HADOOP_HOME/sbin/distribute-exclude.sh <exclude_file>
刷新namenode
$HADOOP_HOME/sbin/refresh-namenodes.sh