Namenode 联盟 联邦环境的搭建

来源:互联网 发布:女生半袖图片淘宝 编辑:程序博客网 时间:2024/05/17 08:34

为什么引入联盟框架 ?


首先了解下hdfs的局限性

@Namespace(命名空间)的限制

由于Namenode在内存中存储所有的元数据(metadata),因此单个Namenode所能存储的对象(文件+块)数目受到Namenode所在JVM的heap size的限制。50G的heap能够存储20亿(200 million)个对象,这20亿个对象支持4000个datanode,12PB的存储(假设文件平均大小为40MB)。
随着数据的飞速增长,存储的需求也随之增长。单个datanode从4T增长到36T,集群的尺寸增长到8000个datanode。存储的需求从12PB增长到大于100PB
  @性能的瓶颈
由于是单个Namenode的HDFS架构,因此整个HDFS文件系统的吞吐量受限于单个Namenode的吞吐量。毫无疑问,这将成为下一个MapReduce的瓶颈

  @隔离问题
由于HDFS仅有一个Namenode,无法隔离各个程序,因此HDFS上的一个实验程序就很有可能影响整个HDFS上运行的程序。那么在HDFSFederation中,可以用不同的Namespace来隔离不同的用户应用程序,使得不同Namespace Volume中的程序相互不影响。
@集群的可用性
在只有一个Namenode的HDFS中,此Namenode的宕机无疑会导致整个集群不可用。

 @Namespace和Block Management的紧密耦合
当前在Namenode中的Namespace和Block Management组合的紧密耦合关系会导致如果想要实现另外一套Namenode方案比较困难,而且也限制了其他想要直接使用块存储的应用。

 @为什么纵向扩展目前的Namenode不可行?比如将Namenode的Heap空间扩大到512GB。
这样纵向扩展带来的第一个问题就是启动问题,启动花费的时间太长。当前具有50GB Heap Namenode的HDFS启动一次大概需要30分钟到2小时,那512GB的需要多久?
第二个潜在的问题就是Namenode在Full GC时,如果发生错误将会导致整个集群宕机。

第三个问题是对大JVM Heap进行调试比较困难。优化Namenode的内存使用性价比比较低。


为了解决大部分单Namenode HDFS的问题,引入HDFS Federation

HDFS Federation使用了多个独立的Namenode/namespace来使得HDFS的命名服务能够水平扩展。在HDFS Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的Namenode提供了提供了命名空间和块管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存储块的地方。每一个datanode都会向所在集群中所有的Namenode注册,并且会周期性的发送心跳和块信息报告,同时处理来自Namenode的指令.



每个Namenode 相当于一个州(51个,每一个都比较自治),组合起来就是一个美联邦政府相当于硬盘分区 每一个分区(C D E F 盘),独立访问,业务隔离,方便管理.


Federation即为“联邦”,该特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源.




配置NameNode联盟

一)、集群规划

PC01
PC02
PC03
hadoop-senior01
hadoop-senior02
hadoop-senior03
namenode
namenode

datanode
datanode
datanode



二)、修改配置文件

======core-site.xml=======
[PC1]
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.senior01:8020</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/data</value>
</property>


***********需要单独修改
[PC2]
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.senior02:8020</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/data</value>
</property>
**************


=========hdfs-site.xml===========
<!-- 分布式副本数设置为3 -->
<property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

<property>
<name>dfs.nameservices</name>
<value>ns1,ns2</value>
</property>


<!-- ns1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>hadoop.senior01:8020</value>
</property>

<!-- ns1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1</name>
<value>hadoop.senior01:50070</value>
</property>

<!-- ns2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns2</name>
<value>hadoop.senior02:8020</value>
</property>
<!-- ns2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns2</name>
<value>hadoop.senior02:50070</value>
</property>


==========mapred-site.xml=========
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop.senior01:10020</value>
    </property>
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop.senior01:19888</value>
    </property>

===========yarn-site.xml=========
  <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>

<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop.senior03</value>
</property>


三)、分发配置文件
   scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml etc/hadoop/mapred-site.xml etc/hadoop/yarn-site.xml hadoop.senior02:/opt/modules/hadoop-2.5.0/etc/hadoop/


   scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml etc/hadoop/mapred-site.xml etc/hadoop/yarn-site.xml hadoop.senior03:/opt/modules/hadoop-2.5.0/etc/hadoop/


四)、在ns1(PC1)和ns2(PC2)上执行
bin/hdfs namenode -format -clusterId hdfs-cluster
$ sbin/hadoop-daemon.sh start namenode


五)、启动所有节点的datanode

sbin/hadoop-daemon.sh start datanode



[PC1]

[hadoop@hadoop hadoop-2.5.0]$ jps
2761 DataNode
4478 Jps
2686 NameNode
[PC2]
[hadoop@hadoop hadoop-2.5.0]$ jps
4851 Jps
2769 DataNode
2694 NameNode[PC3]
[hadoop@hadoop hadoop-2.5.0]$ jps
4682 Jps
2654 DataNode








原创粉丝点击