Hadoop集群中添加datanode节点
随着业务的扩展,公司刚开始的三个节点已经不够用了,因此需要添加datanode。下面记录一下添加datanode节点的步骤:
1、在新的datanode上创建Hadoop运行的用户grid,并修改密码。并修改ip地址和绑定主机名,hosts文件,关闭新节点的防火墙。
我用的是CentOS7的系统,因此修改静态ip地址是:vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
然后执行 service network restart 重启网络。
绑定主机名:vi /etc/hostname ,修改成自定义的主机名即可。
关闭防火墙:由于centos7用firewalld取代了iptables。因此关闭防火墙的命令是:
systemctl status firewalld 查看防火墙的状态
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld 禁止防火墙开机启动,对应的会删除两个文件。
修改hosts文件:
vi /etc/hosts
shutdown -r now 重启电脑。
2、 (1)在新的datanode节点上,用grid登录,创建ssh公钥:ssh-keygen -t rsa,
(2)并对产生的公钥id_rsa.pub进行备份:cp id_rsa.pub id_rsa.pub.x ,这里x表示新添加的节点对应的编码。
(3)并将id_rsa.pub.x发送到主节点上。
scp -r id_rsa.pub.x grid@namenode_hostname:/home/grid/.ssh/
3、在主节点上,
(1)将id_rsa.pub.x 拷贝到authorized_keys当中:cat id_rsa.pub.x >>authorized_keys
(2)主节点将authorized_keys分发给所有的节点,包括新的datanode。
scp -r authorized_keys grid@datanode_hostname1:/home/grid/.ssh/
scp -r authorized_keys grid@datanode_hostname1:/home/grid/.ssh/
:
:
(3)在主节点上,添加新的datanode的ip地址:
vi /etc/hosts 在该文件中添加新节点的ip地址和主机名
然后将主节点上的hosts文件分发给所有的节点(包括新添加的datanode)。
(4)将主节点的jdk的安装文件、hadoop的安装文件、环境变量的文件/etc/profile 分别都分发给新添加的datanode。
(5)修改主节点上的hadoop的salves文件,添加datanode新节点的主机名。
(6)在新添加的节点上执行 source /etc/profile
(7)在新的节点上执行:
hadoop-daemon.sh start datanode
hadoop-daemon.sh start tasktracker
(8)均衡之前的datanode的block,在新的节点上执行:
start-balancer.sh
这个会非常耗时
1)如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mapred的工作效率
2)设置平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长
[root@slave-004 hadoop]# start-balancer.sh -threshold 5
3)设置balance的带宽,默认只有1M/s,修改hdfs-site.xml
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</value>
</property>
(9)安全模式
有两个方法离开这种安全模式:
1)修改dfs.safemode.threshold.pct为一个比较小的值,缺省是0.999。
dfs.safemode.threshold.pct(缺省值0.999f)
HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。
2)hadoop dfsadmin -safemode leave命令强制离开
dfsadmin -safemode value 参数value的说明:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。