如何向Hadoop集群中新加机器

如何向Hadoop集群中新加机器,第1张

假如要新增N台机器到Hadoop集群中,你会怎么做呢?

在slavers文件中加入新的机器,然后重启jobtracker和namenode???

真实情况下的集群通常不会使用masters和slaves这两个文件的。

控制tasktrackers通过在jobtracker的mapred-site.xml中添加下面的参数:

<property>

<name>mapred.hosts</name>

<value>/home/hadoop-user/hadoop/conf/mapred.hosts</value>

<description>Names a file that contains the list of nodes that may connect to the jobtracker. If the value is empty, all hosts arepermitted.</description>

</property>

<property>

<name>mapred.hosts.exclude</name>

<value>/home/hadoop-user/hadoop/conf/mapred.hosts.exclude</value>

<description>Names a file that contains the

list of hosts thatshould be excluded by the jobtracker. If the value is

empty, no hosts are excluded.</description>

</property>

控制datanodes通过再namenode的hdfs-site.xml中添加下面的参数:

<property>

<name>dfs.hosts</name>

<value>/home/hadoop-user/hadoop/conf/dfs.hosts</value>

<description>Names a file that contains a list

of hosts that are permitted to connect to the namenode. The full

pathname of the file must be specified. If the value is empty, all

hosts are permitted.</description>

</property>

<property>

<name>dfs.hosts.exclude</name>

<value>/home/hadoop-user/hadoop/conf/dfs.hosts.exclude</value>

<description>Names a file that contains a list

of hosts that are not permitted to connect to the namenode. The full

pathname of the file must be specified. If the value is empty, no

hosts are excluded.</description>

</property>

注意红色字体的参数说明。

如果要添加N台机器到集群中,

首先,在jobtracker的mapred.hosts和namenode的dfs.hosts文件中加入这N台,打通这N台机器和

jobtracker以及namenode之间ssh互通,然后复制hadoop目录到这N台机器上,启动datanode和tasktracker服务

即可。

启动之后,这些datanodes和tasktrackers会向namenode和jobtracker发请求,namenode和

jobtracker分别检查这些机器是否在dfs.hosts和mapred.hosts中,并且不在排除列表dfs.hosts.exclude和

mapred.hosts.exclude中,之后,将这些节点加入集群。

重点是,集群中加节点,不需要重启jobtracker和namenode,避免对业务的任何影响,用户根本不知道你在加机器。

zookeeper集群中增加机器需要重启

该命令的输出列表中应该有mod_so模块。如果所有这些条件均已具备,则可以很容易地借助apxs安装你自己的DSO模块以扩展Apache服务器的功能:

$ apxs -i -a -c mod_foo.c

gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c

ld -Bshareable -o mod_foo.so mod_foo.o

cp mod_foo.so /path/to/apache/modules/mod_foo.so

chmod 755 /path/to/apache/modules/mod_foo.so

[activating module 'foo' in /path/to/apache/etc/httpd.conf]

$ apachectl restart

/path/to/apache/sbin/apachectl restart: httpd not running, trying to start

[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module

/path/to/apache/sbin/apachectl restart: httpd started

$ _

无论是在Hadoop集群中添加机器和删除机器,都无需停机,整个服务不中断。

本次 *** 作之前,Hadoop的集群情况如下:

HDFS的机器情况如下:

MR的机器情况如下:

添加机器

在集群的Master机器中,修改$HADOOP_HOME/conf/slaves文件,在其中添加需要加入集群的新机器(hp3)的主机名:

hp3

hp2

dell1

dell2

dell3

dell4

然后在Master机器中执行如下命令:

$HADOOP_HOME/bin/start-all.sh

这样 *** 作完成之后,新的机器就添加到集群中来了。

HDFS集群增加了一台新的机器:

MR集群中也新增了一台机器:

删除机器

不安全的方式

由于Hadoop集群自身具备良好的容错性,可以直接关闭相应的机器,从而达到将该机器撤除的目的。但是如果一次性 *** 作3台以上的机器,就有可能造成部分数据丢失,所以不推荐使用这种方式进行 *** 作。

安全的方式

在集群的Master机器中,新建一个文件:$HADOOP_HOME/conf/nn-excluded-list,在这个文件中指定需要删除的机器主机名(hp3):

hp3

然后,修改Master机器的配置文件:$HADOOP_HOME/conf/hdfs-site.xml,添加如下内容:

dfs.hosts.exclude

conf/nn-excluded-list

最后,在Master机器中执行如下命令:

$HADOOP_HOME/bin/hadoop

dfsadmin

-refreshNodes

这样 *** 作完成之后,可以在HDFS集群中看到,hp3机器已经处于Decommission

In

Progress状态:

但是MR机器中hp3机器依旧在运行中:

我们需要等待一定的时间,等待hp3中datanode的Decommission *** 作完成以后,再到hp3机器中关闭所有的Hadoop进程即可。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11611702.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存