HDFS(NameNode)联盟的搭建及原理的浅析

本文介绍了HDFS联盟的概念及其引入原因,并详细展示了如何通过配置多个NameNode实现HDFS的水平扩展,包括具体步骤和注意事项。

一、搭建HDFS联盟

1、为什么引入HDFS(NameNode)联盟?

引入Federation的最主要原因是简单,其简单性是与真正的分布式Namenode相比而言的。Federation能够快速的解决了大部分单Namenode HDFS的问题。

Federation是简单鲁棒的设计,由于联盟中各个Namenode之间是相互独立的。Federation整个核心设计实现大概用了3.5个月。大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样Namenode原先的鲁棒性不会受到影响。比分布式的Namenode简单,虽然这种实现的扩展性比起真正的分布式的Namenode要小些,但是可以迅速满足需求。另外一个原因是Federation良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作。

2、什么是HDFS联盟

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

作用:(1)实现Load Balance:根据路由规则

           (2)缓存更多的元信息(默认情况是存储1000M,可以修改配置文件增加),引入联盟可以存储无穷大的元信息。

  

3、搭建HDFS的联盟

(*)规划

      NameNode: bigdata12   bigdata13

  DataNode:   bigdata14   bigdata15

  

(*)准备工作:清除之前的环境

(*)在bigdata12上进行配置

     hadoop-env.sh JAVA_HOME /root/training/jdk1.8.0_144

 core-site.xml

<property>

  <name>hadoop.tmp.dir</name>

  <value>/root/training/hadoop-2.7.3/tmp</value>

</property>

mapred-site.xml

<property>

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

</property>

yarn-site.xml

<property>

  <name>yarn.resourcemanager.hostname</name>

  <value>bigdata12</value>

</property>

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

slaves

bigdata14

bigdata15

hdfs-site.xml

<property>

  <name>dfs.nameservices</name>

  <value>ns1,ns2</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.ns1</name>

  <value>192.168.100.12:9000</value>

</property>

<property>

  <name>dfs.namenode.http-address.ns1</name>

  <value>192.168.100.12:50070</value>

</property>

<property>

  <name>dfs.namenode.secondaryhttp-address.ns1</name>

  <value>192.168.100.12:50090</value>

</property>

<property>

  <name>dfs.namenode.rpc-address.ns2</name>

  <value>192.168.100.13:9000</value>

</property>

<property>

  <name>dfs.namenode.http-address.ns2</name>

  <value>192.168.100.13:50070</value>

</property>

<property>

  <name>dfs.namenode.secondaryhttp-address.ns2</name>

  <value>192.168.100.13:50090</value>

</property>

<property>

  <name>dfs.replication</name>

  <value>2</value>

</property>

<property>

  <name>dfs.permissions</name>

  <value>false</value>

</property>

增加路由规则-----> core-site.xml中

<property>

<name>fs.viewfs.mounttable.abc.homedir</name>

<value>/home</value>

</property>

<property>

<name>fs.viewfs.mounttable.abc.link./hahaha</name>

<value>hdfs://192.168.100.12:9000/hahaha</value>

</property>

<property>

<name>fs.viewfs.mounttable.abc.link./logs</name>

<value>hdfs://192.168.100.13:9000/logs</value>

</property>

<property>

<name>fs.default.name</name>

<value>viewfs://abc</value>

</property>

注意:如果路由规则太多了,不方便维护 ----> 单独创建一个xml文件(mountTable.xml)

 参考官方的文档:http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/Federation.html

                 http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/ViewFs.html

复制到其他节点

  scp -r /root/training/hadoop-2.7.3/ root@bigdata13:/root/training

  scp -r /root/training/hadoop-2.7.3/ root@bigdata14:/root/training

  scp -r /root/training/hadoop-2.7.3/ root@bigdata15:/root/training

  

对每个NameNode(bigdata12  bigdata13)进行格式化

     注意ID号

     hdfs namenode -format -clusterId abc

在启动Hadoop之前,应该在对应的NameNode上,创建好目录。

hadoop fs -mkdir hdfs://192.168.100.12:9000/hahaha

hadoop fs -mkdir hdfs://192.168.100.13:9000/logs

一定要注意

[root@bigdata12 training]# hdfs dfs -ls /  查看到的是路由规则,不是目录

4、通过网页验证是否搭建成功

欢迎大佬们扫下面二维码关注我个人微信公众号(Java大数据架构师成长之路)

 

在提供的引用中未提及 `bin/hdfs namenode -bootstrapStandby` 命令的相关内容。以下是基于通用的 Hadoop 知识对该命令的介绍。 ### 命令作用 `bin/hdfs namenode -bootstrapStandby` 命令主要用于将一个新的或已存在的 NameNode 节点引导为备用(Standby)状态。在 Hadoop 的高可用(HA)集群中,通常会有一个活跃(Active)的 NameNode 和一个或多个备用(Standby)的 NameNode。备用 NameNode 的作用是在活跃 NameNode 出现故障时能够快速接管服务,保证 HDFS 的高可用性。该命令会从活跃 NameNode 复制元数据到目标 NameNode,使其与活跃 NameNode 的元数据保持一致,从而可以安全地切换为活跃状态。 ### 使用指南 以下是使用该命令的一般步骤: 1. **停止目标 NameNode 服务**:在运行 `bin/hdfs namenode -bootstrapStandby` 命令之前,需要确保目标 NameNode 服务处于停止状态。 ```bash bin/hdfs --daemon stop namenode ``` 2. **运行引导命令**:在目标 NameNode 所在节点上运行 `bin/hdfs namenode -bootstrapStandby` 命令。 ```bash bin/hdfs namenode -bootstrapStandby ``` 3. **启动目标 NameNode 服务**:引导完成后,启动目标 NameNode 服务,使其进入备用状态。 ```bash bin/hdfs --daemon start namenode ``` ### 常见问题解决方案 1. **权限问题**:如果在运行命令时遇到权限不足的错误,需要确保执行命令的用户具有足够的权限。通常可以使用 `root` 用户或具有 Hadoop 管理权限的用户来执行命令。 2. **网络问题**:如果在复制元数据过程中出现网络连接问题,需要检查网络配置,确保目标 NameNode 节点与活跃 NameNode 节点之间可以正常通信。可以使用 `ping` 命令和 `telnet` 命令来测试网络连通性。 3. **元数据不一致问题**:如果在引导过程中出现元数据不一致的问题,可能需要手动清理目标 NameNode 的元数据目录,并重新运行引导命令。在清理元数据目录之前,需要备份重要数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值