1、在Federation之前
一个集群拥有一个namenode,它为集群提供一个单一的文件系统NameSpace。假设有很多集群,那么它们的NameSpace是彼此独立的。更重要的是,物理存储也没有在集群之间进行共享。
单namenode集群
每个集群的core-site.xml有一个配置参数设置默认文件系统的namenode:
<property>
<name>fs.default.name</name>
<value>hdfs://namenodeOfClusterX:port</value>
</property>
路径名使用格式
如果集群配置了上述的集群名,典型的路径名会是
1、/foo/bar
等价于hdfs://namenodeOfClusterX:port/foo/bar。
2、hdfs://namenodeOfClusterX:port/foo/bar
最好使用/foo/bar。
3、hdfs://namenodeOfClusterY:port/foo/bar
这个URI指向另一个集群的路径。特别地,下面的命令将Cluster Y的文件复制到Cluster Z。
distcp hdfs://namenodeClusterY:port/pathSrc hdfs://namenodeClusterZ:port/pathDest4、webhdfs://namenodeClusterX:http_port/foo/bar和hftp://namenodeClusterX:http_port/foo/bar
使用webHDFS文件系统和HFTP文件系统来访问文件。WebHDFS和HFTP使用namenode的HTTP端口,但不适用RPC端口。
5、http://namenodeClusterX:http_port/webhdfs/vi/foo/bar和http://proxyClusterX:http_port/foo/bar
使用WebHDFS REST API和HDFS代理访问文件。
2、Federation和ViewFs
存在多个集群,每个集群又有一个或多个namenodes。每个namenodes有自己的NameSpace。一个namenode只属于一个集群。同一个集群中的namenode共享该集群的物理存储。同时不同集群的NameSpaces依旧保持其独立性。
使用ViewFs得到集群的全局NameSpace
ViewFs用于为每个集群创建一个独立的集群NameSpace视图,它等价于Federation出现以前的NameSpace。
下图展示了Unix挂载NameSpace容器的情况:
和HDFS、本地文件系统一样,ViewFS实现了hadoop文件系统接口。
ViewFS的挂载点在配置文件中指定。每个集群的配置如下
<property>
<name>fs.default.name</name>
<value>viewfs://clusterX</value>
</property>
其中clusterX是挂载点的名字。
路径名使用格式
1、/foo/bar
等价于viewfs://clusterX/foo/bar。
2、viewfs://clusterX/foo/bar
最好使用/foo/bar。
3、viewfs://clusterY/foo/bar
指向clusterY的路径,可以使用下面的命令将集群Y的文件复制到集群Z。
distcp viewfs://clusterY:/pathSrc viewfs://clusterZ/pathDest4、viewfs://clusterX-webhdfs/foo/bar和viewfs://clusterX-hftp/foo/bar
通过webHDFS和HFTP文件系统来访问文件。
5、http://namenodeClusterX:http_port/webhdfs/v1/foo/bar和http://proxyClusterX:http_port/foo/bar
通过webHDFS REST API和HDFS代理访问文件。
跨NameSpace重命名路径名
这样的操作是无效的操作。