如果Hadoop集群已经在运行了,这时可能需要动态的添加新的数据节点到Hadoop系统中去,或者将某个数据节点下线,由于业务的需要,集群是不能重启的,那么具体的DataNode添加、删除步骤是什么样的呢?

下面以DataNode的上线为例详细说明下如何动态的给HDFS集群新增数据节点(Hadoop2.0版本)。

首先简单说下几个相关的配置文件。

(1)由dfs.hosts配置选项指定的白名单文件,当要新上线数据节点的时候,需要把数据节点的名字追加在此文件中;

(2)由dfs.hosts.exclude配置选项指定的黑名单文件,当要下线数据节点的时候,需要把数据节点的名字追加在此文件中;

下面开始步骤(假设所有新增数据节点上的Hadoop环境都已经部署完毕):

Step1:关闭新加入数据节点的防火墙。

Step2:在两个NameNode节点的hosts文件中加入新增数据节点的hostname。

Step3:在每个新增数据节点的hosts文件中加入两个NameNode的hostname。

Step4:在两个NameNode上,打通向新增数据节点无密钥SSH登录的通道。

Step5:在两个NameNode上的dfs.hosts指定的白名单文件中追加上所有新增的数据节点的hostname,注意是追加!并且,保证在dfs.hosts.exclude指定的黑名单文件中不含有新增的数据节点的hostname。

Step6:找一个客户端,配置文件和其他节点一致,执行如下刷新命令:

  hdfs dfsadmin -refreshNodes

      (此步也可以在任何其他节点上进行)

Step7:还是在第6步的客户端上操作,此时需要更改下hdfs-site.xml中的配置选项,将类似于如下的配置选项:

<property><name>dfs.namenode.rpc-address.mcs.nn0</name><value>namenode0:9000</value>
</property>
<property><name>dfs.namenode.rpc-address.mcs.nn1</name><value>namenode1:9000</value>
</property>

改为:

<property><name>dfs.namenode.rpc-address.mcs.nn0</name><value>namenode1:9000</value>
</property>
<property><name>dfs.namenode.rpc-address.mcs.nn1</name><value>namendoe0:9000</value>
</property>

Step8:在第7步操作的客户端上重新执行命令:

  hdfs dfsadmin -refreshNodes

Step9:在数据节点上启动DataNode进程,命令如下:

  hadoop-daemon.sh start datanode

Step10:查看数据节点进程的情况(通过日志),查看NameNode的web界面。

Step11:在两个NameNode节点上,更改slaves文件,将要上线的数据节点hostname追加到slaves文件中。

至于第7步中为什么要更改配置之后在进行第8步的刷新,是因为在Hadoop2.x版本中引入了Federation机制,用户可根据情况定义多组NameNode,每一组有两个NameNode,一个为active,另一个为standby,实现了HA。由于执行刷新命令的节点相当于一个Client,Client将触发当前nameservice中的第一个NameNode执行刷新命令,要使得两个NameNode都刷新,则要更改下配置之后再刷新。具体来说刷新是调用如下方法:

public int refreshNodes() throws IOException {int exitCode = -1; DistributedFileSystem dfs = getDFS();dfs.refreshNodes();exitCode = 0;return exitCode;}

通过获取文件系统对象FileSystem之后,调用FSNamesystem类中的refreshNodes方法:

void refreshNodes() throws IOException {checkOperation(OperationCategory.UNCHECKED);checkSuperuserPrivilege();getBlockManager().getDatanodeManager().refreshNodes(new HdfsConfiguration());}

在检查完相应的操作权限之后,最后由DatanodeManager类来执行具体的刷新实现:

public void refreshNodes(final Configuration conf) throws IOException {refreshHostsReader(conf);namesystem.writeLock();try {refreshDatanodes();} finally {namesystem.writeUnlock();}}

其中,refreshHostsReader是重新读取dfs.hosts指定的配置文件,将其中的内容加载到内存中,更新白名单列表includes。之后,执行最关键的一步,刷新数据节点列表:

private void refreshDatanodes() throws IOException {for(DatanodeDescriptor node : datanodeMap.values()) {// Check if not include.if (!inHostsList(node)) {node.setDisallowed(true); // case 2.
} else {if (inExcludedHostsList(node)) {startDecommission(node); // case 3.
} else {stopDecommission(node); // case 4.
}}}}

此处的inHostsList方法是当数据节点发来心跳进行注册的时候,判断此节点是否在白名单之中,如果不在的话,就会拒绝该数据节点的注册请求,并抛出异常:

DisallowedDatanodeException:"Datanode denied communication with namenode: " + nodeID

至于数据节点的下线,和上述步骤类似,只不过Step5中要换一下文件。真个操作的过程中都不涉及集群的重启~

转载于:https://www.cnblogs.com/Scott007/archive/2013/06/13/3134737.html

Hadoop2.x集群动态添加删除数据节点相关推荐

  1. Hadoop2.6集群动态添加和删除数据节点

    2019独角兽企业重金招聘Python工程师标准>>> 开始之前,应该把所有新增数据节点上的Hadoop环境都配置好(如果要直接复制已经存在节点的hadoop文件夹,应该删掉里面已经 ...

  2. 【Kafka】Kafka集群 动态 添加 节点 可行否

    文章目录 1.概述 2.集群 2.1 准备2个节点 2.2 修改配置 2.2.1 node1 配置 2.2.2 node2 配置 2.3 启动zk 2.4 启动node1 2.5 测试 2.6 启动n ...

  3. html中下拉列表监听事件,ExtJS 下拉框监听事件、日期选择器监听事件、实现动态给items添加删除数据...

    本文将为您描述ExtJS 下拉框监听事件.日期选择器监听事件.实现动态给items添加删除数据,具体实现方法: 1.下拉框 下拉框选择时,触发事件的方法: 在 Ext.form.ComboBox 组件 ...

  4. HADOOP实践101:在Hadoop集群中添加机器和删除机器

    无论是在Hadoop集群中添加机器和删除机器,都无需停机,整个服务不中断. 本次操作之前,Hadoop的集群情况如下: HDFS的机器情况如下: MR的机器情况如下: 添加机器 在集群的Master机 ...

  5. Redis集群客户端添加数据报错(error) CLUSTERDOWN The cluster is down

    在连接到Redis集群,向集群中添加数据的时候报错了 (error) CLUSTERDOWN The cluster is down 首先呢,检查集群的运行情况,使用搭建集群是用到的redis-tri ...

  6. Dobbo微服务项目实战(详细介绍+案例源码) - 5.推荐好友列表/MongoDB集群/动态发布与查看

    You are a wizard, Harry! 系列文章目录 1. 项目介绍及环境配置 2. 短信验证码登录 3. 用户信息 4. MongoDB 5.推荐好友列表/MongoDB集群/动态发布与查 ...

  7. Airbnb 如何实现 Kubernetes 集群动态扩展

    运营 Airbnb 基础设施的一项重要工作是,确保我们的云开支随着需求自动增长和下降.我们的流量每天波动很大,为此,我们的云资源占用应该能够动态扩展. 为了实现这种扩展,Airbnb 利用了 Kube ...

  8. 测试一个config server 服务器挂机后,集群是否能读写数据

    测试架构: 测试目的: 测试一个config server 服务器挂机后,集群是否能读写数据. 测试原因: 上周因为内存吃紧,准备添加内存.在查看服务器时,把一台服务器关机检查.     关机后,WE ...

  9. hadoop+Spark+hbase集群动态增加节点

    如果一个集群资源不够用需要扩展的时候怎么办,那么是可以不关机动态扩展的,具体操作如下: 已有集群: 192.168.111.11 lyy1 ---master节点 192.168.111.12 lyy ...

  10. android仿微信发布动态功能,Android GridView扩展仿微信微博发图动态添加删除图片功能.pdf...

    Android GridView扩扩展展仿仿微微信信微微博博发发图图动动态态添添加加删删除除图图片片功功能能 这篇文章主要为大家详细介绍了Android GridView扩展仿微信微博发图动态添加删除 ...

最新文章

  1. 项目实践 | 一文览尽人脸打卡全过程
  2. jenkins关闭,重启几种方式
  3. Linux下Poppler源码编译安装
  4. 马云最怕的事还是来了,央行对借呗动真格!
  5. P3396 哈希冲突 根号分治
  6. sql server 数据库还原
  7. java混合分页_坑,MySQL中 order by 与 limit 混用,分页会出现问题!
  8. 为知笔记 Markdown 新手指南
  9. C#_基础_结构Struct(八)
  10. Linux内核的学习(二)
  11. NP、OSPF邻居邻接关系
  12. 计算机网络本直通线的制作方法,电脑网线制作之交叉线与直通线的做法
  13. 怎么注册免费苹果开发者账号?
  14. Python查询四六级成绩
  15. 云服务器 搭建虚拟主机,云服务器 搭建虚拟主机
  16. 走出误区,老杨命运发生了转折
  17. 计算机的安全模式更改密码,我的电脑进安全模式需要密码,用户名是Administrator,密码忘记了,该怎么办呢?...
  18. 【数据库系统概论】基础知识总结
  19. AcWing 273. 分级 (推论,DP)
  20. 中国智慧家庭市场运营模式分析及发展趋势研究报告2022-2027年版

热门文章

  1. 美团 | 搜索多业务商品排序探索与实践
  2. 基于编辑方法的文本生成(下)
  3. 【干货】神经网络初始化trick:大神何凯明教你如何训练网络!
  4. 每日算法系列【LeetCode 943】最短超级串
  5. 深度学习2.0-普通BP神经网络
  6. 使用UE去除复制文本中的空格、换行符和TAB
  7. 人类视觉计算理论经典著作,豆瓣评分9.7,中文版惊鸿面世
  8. 03 两个重要极限函数
  9. 详解tf.nn.bias_add和tf.add、tf.add_n的区别
  10. PGM:基于模板的表示