Ubuntu上使用Hadoop 2.x + HDFS Federation

为什么需要Federation

HDFS Federation能解决一下问题:

1. 支持多个namespace, 为什么需要多个namespace呢,因为一个namespace由于JVM内存的限制,存放的元数据有限,因此支持的datanode数目也有限制。

下面的分析来自另一篇博客,这里转一下:

由于Namenode在内存中存储所有的元数据(metadata),因此单个Namenode所能存储的对象(文件+块)数目受到Namenode所在JVM的heap size的限制。50G的 heap能够存储20亿(200 million)个对象,这20亿个对象支持4000个datanode,12PB的存储(假设文件平均大小为40MB)。 随着数据的飞速增长,存储的需求也随之增长。单个datanode从4T增长到36T,集群的尺寸增长到8000个datanode。存储的需求从12PB增长到大于100PB。

2. 水平扩展出多个namenode后,就可以避免网络架构上的性能瓶颈问题

3. 多个应用可以使用各自的namenode,从而相互隔离。

不过还是没有解决单点故障问题。 

相关阅读

Ubuntu 13.04上搭建Hadoop环境

Ubuntu 12.10 +Hadoop 1.2.1版本集群配置

Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)

Ubuntu下Hadoop环境的配置

单机版搭建Hadoop环境图文教程详解

搭建Hadoop环境(在Winodws环境下用虚拟机虚拟两个Ubuntu系统进行搭建)

更多Hadoop相关信息见Hadoop 专题页面 ?tid=13

架构图

官方文档:

架构图如下:

Ubuntu上使用Hadoop 2.x + HDFS Federation

测试环境

现在准备两个namenode server: namenode1和namenode2, /etc/hosts里面的配置如下:

#hdfs cluster 192.168.1.71 namenode1 192.168.1.72 namenode2 192.168.1.73 datanode1 192.168.1.74 datanode2 192.168.1.75 datanode3 现在来看看上面5台server的配置: namenode1和namenode2的配置 core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://namenode1:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>net.topology.node.switch.mapping.impl</name> <value>org.apache.hadoop.net.ScriptBasedMapping</value> <description> The default implementation of the DNSToSwitchMapping. It invokes a script specified in net.topology.script.file.name to resolve node names. If the value for net.topology.script.file.name is not set, the default value of DEFAULT_RACK is returned for all node names. </description> </property> <property> <name>net.topology.script.file.name</name> <value>/opt/rack.lsp</value> </property> <property> <name>net.topology.script.number.args</name> <value>100</value> <description> The max number of args that the script configured with net.topology.script.file.name should be run with. Each arg is an IP address. </description> </property> </configuration>

注意,hdfs://namenode1:9000在另一个namenode2上配置为hdfs://namenode2:9000刷新namenode的方法是:

hduser@namenode1:~$ refresh-namenodes.sh Refreshing namenode [namenode1:9000] Refreshing namenode [namenode2:9000]


拓扑查询仍然可以使用:

hdfs dfsadmin -printTopology



hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hduser/mydata/hdfs/namenode</value> </property> <property> <name>dfs.namenode.hosts</name> <value>datanode1,datanode2,datanode3</value> </property> <property> <name>dfs.blocksize</name> <value>268435456</value> </property> <property> <name>dfs.namenode.handler.count</name> <value>100</value> </property> <!--hdfs federation begin--> <property> <name>dfs.federation.nameservices</name> <value>ns1,ns2</value> </property> <property> <name>dfs.namenode.rpc-address.ns1</name> <value>namenode1:9000</value> </property> <property> <name>dfs.namenode.rpc-address.ns2</name> <value>namenode2:9000</value> </property> <!--hdfs federation end--> </configuration>

注意添加了hdfs federation的配置,里面有两个namespaces: ns1和ns2,分别位于namenode1和namenode2上。

slaves文件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/501c8410799de6b5116f9a42b33bd6a0.html