Hadoop动态添加/删除节点(datanode和tacktracker)

本文详细介绍如何在Hadoop集群中添加和删除DataNode及TaskTracker,包括配置文件的修改及节点状态的变化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总的来说,正确的做法是优先通过配置文件,再在具体机器上进行相应进程的启动/停止操作。

网上一些资料说在调整配置文件的时候,优先使用主机名而不是IP进行配置。

总的来说添加/删除DataNode和TaskTracker的方法非常相似,只是操作的配置项和使用的命令有微小差异。


1. DataNode

1.0 配置文件

在master/namenode下修改配置文件conf/mapred-site.xml。
关键参数dfs.hosts和dfs.hosts.exclude。

注意:不同hadoop版本的配置文件规划不太一致!具体参考相关版本的hadoop官方文档的cluster setup部分。
http://hadoop.apache.org/docs/ 点击相同或相近版本。

上面的说法是在hadoop 1.x中的,后面也以该版本举例;
在hadoop 0.x中上述配置存放在文件conf/hadoop-site.xml中;
在hadoop 2.x中变化很大,文件为conf/hdfs-site.xml中,参数名为:dfs.namenode.hosts和fs.namenode.hosts.exclude。

参数作用:
dfs.hosts: 允许接入为DataNode的机器列表,如果不配置或所指定的列表文件为空则默认允许所有主机成为DataNode
dfs.hosts.exclude: 拒绝接入为DataNode的机器列表,如果一台机器同时出现在两个列表中,则拒绝。
它们的本质作用 拒绝某些节点上的datanode进程连接, 而不是调度这些节点上datanode进程的允许和关闭。

用法举例:
修改conf/mapred-site.xml,添加:
	<property>
		<name>dfs.hosts</name>
		<value>/opt/hadoop/conf/datanode-allow.list</value>
	</property>
	<property>
		<name>dfs.hosts.exclude</name>
		<value>/opt/hadoop/conf/datanode-deny.list</value>
	</property>
如果不需要允许列表,就不要创建对应项了。
然后创建value所指定的文件。一行写一个主机名。

1.1 添加

1,在新slave上进行相关配置。

2,在master上的slave列表加入该slave(非必须,方便以后重启cluster用)

3,(若有)在datanode-allow.list中加入该slave

4,在slave上启动datanode进程:

运行:hadoop-daemon.sh start datanode  

PS:可以用jps命令查看机器上的java进程的pid和进程名。


1.2 删除

极端不建议直接在slave上通过:
hadoop-daemon.sh stop datanode  
命令关掉datanode,这会导致hdfs中出现missing block。

1,在master上修改datanode-deny.list,添加相应机器
2,在master上刷新节点配置情况:
hadoop dfsadmin -refreshNodes  
此时在Web UI上立即就可以看到该节点变为Decommissioning状态,过一会就变为Dead了。
也可以通过:hadoop dfsadmin -report命令查看。
3,在slave上关闭datanode进程(非必须):
运行: hadoop-daemon.sh stop datanode  

1.2.1 重新加入各个删除的节点

1,在master的datanode-deny.list删除相应机器
2,在master上刷新节点配置情况:
hadoop dfsadmin -refreshNodes  
3,在slave上重启datanode进程:
hadoop-daemon.sh start datanode  
PS:如果之前没有关闭该slave上的datanode进程,需要先关闭再重新启动。

2. TackTracker

2.0 配置文件

hadoop 1.x下在master/namenode下修改配置文件conf/mapred-site.xml。
关键参数mapred.hosts和mapred.hosts.exclude。

对于hadoop 0.x需要修改配置文件conf/hadoop-site.xml;
对于hadoop 2.x还没有搞清楚,先不说。

参数作用:和datanode的对应项一样。

用法举例:
修改conf/mapred-site.xml,添加:
	<property>
		<name><span style="font-family: Arial, Helvetica, sans-serif;">mapred</span><span style="font-family: Arial, Helvetica, sans-serif;">.hosts</name></span>
		<value>/opt/hadoop/conf/tasktracker-allow.list</value>
	</property>
	<property>
		<name><span style="font-family: Arial, Helvetica, sans-serif;">mapred</span>.hosts.exclude</name>
		<value>/opt/hadoop/conf/tasktracker-deny.list</value>
	</property>
如果不需要允许列表,就不要创建对应项了。
然后创建value所指定的文件。一行写一个主机名。

2.1 添加

1,在新slave上进行相关配置。

2,在master上的slave列表加入该slave(非必须,方便以后重启cluster用)

3,(若有)在tasktracker-allow.list中加入该slave

4,在slave上启动tasktracker进程:

运行:hadoop-daemon.sh start tasktracker  

PS:可以用jps命令查看机器上的java进程的pid和进程名。


2.2 删除

不建议直接在slave上通过:
hadoop-daemon.sh stop tasktracker  
命令关掉tasktracker,这会导致namenode认为这些机器暂时失联,在一个超时时间内(默认10min+30s)依然假设它们是正常的还会将任务发送给它们。

1,在master上修改tasktracker-deny.list,添加相应机器
2,在master上刷新节点配置情况:
hadoop mradmin -refreshNodes  
此时在Web UI上立即就可以看到Nodes的数量减少了,而Exclude Nodes的数量增加了。可以点进去具体查看。
3,在slave上关闭tasktracker进程(非必须):
运行:hadoop-daemon.sh stop tasktracker  

2.2.1 重新加入各个删除的节点

1,在master的tasktracker-deny.list删除相应机器
2,在master上刷新节点配置情况:
hadoop mradmin -refreshNodes  
3,在slave上重启tasktracker进程:
hadoop-daemon.sh start tasktracker  
PS:如果之前没有关闭该slave上的tasktracker进程,需要先关闭再重新启动。


原载于http://blog.youkuaiyun.com/yanxiangtianji

转载请注明出处

### 正确配置 HDFS 的 NameNode DataNode 目录并启动 Hadoop 集群 #### 1. 配置 `hdfs-site.xml` 在 Hadoop 配置文件中,`hdfs-site.xml` 是用于定义 HDFS 名称节点 (NameNode) 数据节点 (DataNode) 存储目录的关键文件。以下是推荐的配置方式: ```xml <configuration> <!-- 定义 NameNode 的元数据存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/namenode</value> </property> <!-- 定义 DataNode 的数据块存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/datanode</value> </property> <!-- 设置副本数量,默认为 3 --> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration> ``` 这里 `/data/hadoop/namenode` `/data/hadoop/datanode` 是实际磁盘上的路径,可以根据实际情况调整[^1]。 --- #### 2. 格式化 NameNode 在首次启动 HDFS 前,需要对 NameNode 进行格式化操作。此操作会初始化 HDFS 文件系统的命名空间。 执行以下命令完成格式化: ```bash $HADOOP_HOME/bin/hdfs namenode -format ``` 这一步会在 `dfs.namenode.name.dir` 指定的目录中创建必要的元数据文件[^1]。 --- #### 3. 启动 HDFS 使用以下命令启动 NameNode DataNode: ```bash $HADOOP_HOME/sbin/start-dfs.sh ``` 可以使用 `jps` 命令查看当前 JVM 进程列表,确认 NameNode DataNode 已经正常启动。如果一切顺利,应该能看到如下进程: - NameNode - DataNode - SecondaryNameNode 访问 Web 界面进一步验证 HDFS 是否正常工作: ``` http://<namenode-ip>:9870/ ``` 这里的端口 `9870` 是 Hadoop 2.x 及以上版本的标准端口号,旧版可能是 `50070`[^1]。 --- #### 4. 配置日志目录 为了便于管理排查问题,建议自定义 Hadoop 日志存储路径。编辑 `$HADOOP_HOME/etc/hadoop/hadoop-env.sh` 文件,添加或修改以下内容: ```bash export HADOOP_LOG_DIR=/var/log/hadoop ``` 这样可以将日志集中存放在 `/var/log/hadoop` 路径下,方便后续分析维护[^2]。 --- #### 5. 启动 YARN MapReduce YARN 是 Hadoop 的资源调度框架,MapReduce 则依赖于它运行计算任务。确保 `mapred-site.xml` 中有以下配置项: ```xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> ``` 接着启动 YARN 组件: ```bash $HADOOP_HOME/sbin/start-yarn.sh ``` 此时可以通过浏览器访问 YARN 的 Resource Manager 页面进行状态监控: ``` http://<resourcemanager-ip>:8088/ ``` 最后,尝试提交一个简单的 WordCount 测试程序以验证集群功能是否正常: ```bash $hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount \ hdfs://<namenode-host>:<port>/input hdfs://<namenode-host>:<port>/output ``` --- ### 总结 通过合理配置 `hdfs-site.xml`、格式化 NameNode、启动 DFS YARN,并测试基本作业流程,能够顺利完成 Hadoop 集群的基础搭建与调试。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值