【Hadoop】HDFS NameNode Federation联盟架构

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/80008370

1、当前HDFS的局限性 当前HDFS包含两层结构: (1)Namespace 管理目录,文件和数据块。它支持常见的文件系统操作,如创建文件,修改文件,删除文件等。 (2) Block Storage有两部分组成: Block Management维护集群中datanode的基本关系,它支持数据块相关的操作,如:创建数据块,删除数据块等,同时,它也会管理副本的复制和存放。 (3) Physical Storage存储实际的数据块并提供针对数据块的读写服务。 (4)Block Storage的这两部分分别在namenode和datanode上实现,所以该模块由namenode和datanode分工完成。 2、单个NameNode的局限性 (1)Namespace(命名空间)的限制 由于NameNode在内存中存储所有的元数据(metadata),因此单个NameNode所能存储的对象(文件+块)数目受到NameNode所在JVM的heap size的限制。50G的heap能够存储20亿(200 million)个对象,这20亿个对象支持4000个DataNode,12PB的存储(假设文件平均大小为40MB)。随着数据的飞速增长,存储的需求也随之增长。单个DataNode从4T增长到36T,集群的尺寸增长到8000个DateNode。存储的需求从12PB增长到大于100PB。 (2)namenode扩展性 HDFS的底层存储是可以水平扩展的(解释:底层存储指的是datanode,当集群存储空间不够时,可简单的添加机器已进行水平扩展),但namespace不可以。当前的namespace只能存放在单个namenode上,而namenode在内存中存储了整个分布式文件系统中的元数据信息,这限制了集群中数据块,文件和目录的数目。 (3)性能 文件操作的性能制约于单个namenode的吞吐量,单个namenode当前仅支持约60K的task,而下一代ApacheMapReduce将支持多余100K的并发任务,这隐含着要支持多个namenode。 (4)隔离性 现在大部分公司的集群都是共享的,每天有来自不同group的不同用户提交作业。单个namenode难以提供隔离性,即:某个用户提交的负载很大的job会减慢其他用户的job,单一的namenode难以像HBase按照应用类别将不同作业分派到不同namenode上。 3、联盟架构特点 (1)与HA的区别:HA中的两个namenode管理的是同一个文件系统,两个namenode是一样的;HDFS Federation中的多个namenode各自管理属于自己的一部分数据,多个namenode都是不一样的,但是他们公用一块datanode的存储空间,就是说一个datanode上哪个namenode也可以存,在datanode上用不同的目录区分不同的namenode。这样可以减缓单个namenode造成的压力。联盟架构可以嵌入HA,设置standby namenode,进行主备的切换。 (2)内存的限制:每存储100万个文件,消耗1G内存。 (3)隔离性:不同namenode上运行的任务不会互相影响,一个namenode的任务出现问题不会影响其他的namenode。 (4)适用场合:适用于数据量特别大的场合中使用联盟架构。 4、HDFS Federation架构图

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

<configuration>

	 <property>
	        <name>dfs.permissions.enabled</name>
	        <value>false</value>
	 </property>

	 <property>
	        <name>dfs.namenode.secondary.http-address</name>
	        <value>hadoop-senior03.ibeifeng.com:50090</value>
	 </property>
	
	 <property>
			<name>dfs.nameservices</name>
			<value>ns1,ns2,ns3</value>
	 </property>
	 
	 <property>
			<name>dfs.namenode.rpc-address.ns1</name>
			<value>hadoop-senior01.ibeifeng.com:8020</value>
	 </property>
	 <property>
			<name>dfs.namenode.servicerpc-address.ns1</name>
			<value>hadoop-senior01.ibeifeng.com:8022</value>
	 </property>
	 <property>
			<name>dfs.namenode.http-address.ns1</name>
			<value>hadoop-senior01.ibeifeng.com:50070</value>
	 </property>
	 <property>
			<name>dfs.namenode.https-address.ns1</name>
			<value>hadoop-senior01.ibeifeng.com:50470</value>
	 </property>
	 
	 <property>
			<name>dfs.namenode.rpc-address.ns2</name>
			<value>hadoop-senior02.ibeifeng.com:8020</value>
	 </property>
	 <property>
			<name>dfs.namenode.servicerpc-address.ns2</name>
			<value>hadoop-senior02.ibeifeng.com:8022</value>
	 </property>
	 <property>
			<name>dfs.namenode.http-address.ns2</name>
			<value>hadoop-senior02.ibeifeng.com:50070</value>
	 </property>
	 <property>
			<name>dfs.namenode.https-address.ns2</name>
			<value>hadoop-senior02.ibeifeng.com:50470</value>
	 </property>
	 
	 <property>
			<name>dfs.namenode.rpc-address.ns3</name>
			<value>hadoop-senior03.ibeifeng.com:8020</value>
	 </property>
	 <property>
			<name>dfs.namenode.servicerpc-address.ns3</name>
			<value>hadoop-senior03.ibeifeng.com:8022</value>
	 </property>
	 <property>
			<name>dfs.namenode.http-address.ns3</name>
			<value>hadoop-senior03.ibeifeng.com:50070</value>
	 </property>
	 <property>
			<name>dfs.namenode.https-address.ns3</name>
			<value>hadoop-senior03.ibeifeng.com:50470</value>
	 </property>
	
</configuration>

也可以配置dfs.namenode.name.dirdfs.namenode.edits.dir属性,这两个属性分别是fsimage文件的存放路径和edits文件的存放路径。 6、NameNode格式化及启动 分发到各个节点 格式化namenode,每个namenode都需要格式化一次,这些namenode在一个集群里,有相同的clusterId(即我指定的hadoop-cluster)。 $ bin/hdfs namenode -format -clusterId hadoop-cluster core-site.xml中指定的fs.defaultFS属性是哪个节点,就是用的哪个节点的namenode和datanode,而不管创建删除上传文件的命令是在哪台机器上敲的。

	<property>
            <name>fs.defaultFS</name>
            <value>hdfs://hadoop-senior02.ibeifeng.com:8020</value>
    </property>

启动每个NameNode即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券