在之前两篇随笔中,主要介绍了在一个分布式集群下配置Hadoop,Zookeeper以及HBase 的流程。在实际情况中,配置HBase集群时,需要配置的节点太多,并且配置的内容基本相同。为了避免重复繁琐的配置工作,可以使用Shell脚本工具来自动完成这些流程化的工作,节省时间并且减少人工配置错误的情况。
本文介绍的是在需要批量添加集群节点并配置HBase的情况下,可以使用到的自动化配置工具,主要是几个Shell脚本来完成新节点的加入以及集群启动和停止。当然其中不可避免的还是需要人工参与部分配置工作,但是脚本工具基本上可以让配置人员完全解放于重复而费时的配置工作了。 所有软硬件平台均与《Hadoop平台搭建(VMware、CentOS)》相同,且所有操作以root用户执行
===================================================================================== 一、创建新的节点(虚拟主机)
新的虚拟主机可以用iso文件自行安装,但是为了提高效率,我们使用VMware的克隆虚拟机功能,需要手动安装一台模板虚拟主机,然后不断克隆新的虚拟主机。
下面以Slave8为例,从Slave8克隆出一台Slave9。
需要说明的是,在模板主机的系统安装完成之后、被克隆之前我对其进行了以下操作以提高效率:
①修改个人使用习惯
Ctrl+Alt+T to open a Terminal
Terminal font --> Courier 10 Pitch Bold 13
Terminal Text Color --> #000000
Terminal Background Color --> #BBBBBB
File Management Preferences Behavior --> Always open in browser windows
②安装VMTools工具
③永久关闭防火墙
chkconfig iptables off
④安装配置JDK
与之前相同
⑤关机
下面开始克隆新的虚拟主机:
新分配IP地址为192.168.222.142,目前的网络主机名仍是最初的模板Slave5的主机名,需要修改。
1、修改主机网络名称
由于Slave8是从之前的模板克隆而来,完整克隆操作会分配新的IP地址,但不会修改网络主机名,因此需要先修改主机名为Slave8.Hadoop
vi /etc/sysconfig/network
#!/bin/sh
int=0
if [ $# -ne 1 ]
then
echo "Wrong Parameter."
else
#0.Forework, get current cluster information
while read IP ID
do
array[$int]=$IP
let "int++"
done</home/myscript/clusters
#1.update hosts file
echo $1' Slave'$int'.Hadoop' >> /etc/hosts
for k in ${array[@]}
do
scp /etc/hosts root@$k:/etc
done
scp /etc/hosts root@$1:/etc
#2.Configure SSH
echo "adding RSA key from $1 to localhost."
ssh root@$1 'cat ~/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys'
echo "copying to cluster members..."
for i in ${array[@]}
do
scp /root/.ssh/authorized_keys root@$i:/root/.ssh
scp /root/.ssh/known_hosts root@$i:/root/.ssh
done
scp /root/.ssh/authorized_keys root@$1:/root/.ssh
scp /root/.ssh/known_hosts root@$1:/root/.ssh
#3.update hadoop slaves
echo $1 >> ${HADOOP_HOME}/etc/hadoop/slaves
for j in ${array[@]}
do
scp ${HADOOP_HOME}/etc/hadoop/slaves root@$j:${HADOOP_HOME}/etc/hadoop
scp /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves root@$j:/home/hadoop/hadoop-2.7.3/etc/hadoop
done
scp -r /home/hadoop root@$1:/home
#4.update zookeeper servers and myid info
echo "server."$int"="$1":2888:3888" >> ${ZOOKEEPER_HOME}/conf/zoo.cfg
for l in ${array[@]}
do
scp ${ZOOKEEPER_HOME}/conf/zoo.cfg root@$l:${ZOOKEEPER_HOME}/conf
done
scp -r /home/zookeeper root@$1:/home
ssh root@$1 "echo "$int" > /home/zookeeper/zookeeper-3.4.6/data/myid"
#5.update hbase
sed -i -r 's/<value'\>'(Master.*Hadoop.*)</<value'\>'\1,'"$1"'</g' /home/hbase/hbase-1.2.4/conf/hbase-site.xml
echo $1 >> /home/hbase/hbase-1.2.4/conf/regionservers
for m in ${array[@]}
do
scp -r /home/hbase/hbase-1.2.4/conf root@$m:/home/hbase/hbase-1.2.4/
done
scp -r /home/hbase root@$1:/home
#6.update environment variables on new member
scp /etc/profile root@$1:/etc/profile
ssh root@$1 'source /etc/profile'
#7.update cluster info
echo $1' Slave'$int'.Hadoop' >> /home/myscript/clusters
fi
执行脚本,需要加上新节点的IP作为唯一参数(执行之前确认clusters文件路径正确):
./configure.sh 192.168.222.142
执行过程中需要输入确认反馈'yes'以及新节点的root密码三次 四、配置新节点(于新节点)
之所以有这部分的操作,是因为有一些远程命令好像并不能实际生效,在脚本的第6部分我设置了新节点更新环境变量的远程指令
ssh root@<new_member_ip> 'source /etc/profile'
但是此时用'env'指令查看新节点的环境变量发现并没有更新,因此需要手动在新节点上执行更新操作
source /etc/profile
再次'env'查看,发现环境变量HADOOP_HOME、ZOOKEEPER_HOME等已更新 五、启动集群(于Master主机)
在执行之前需确认集群并没有在运行
1、start_hadoop.sh
#!/bin/sh
int=0
#read current cluster members
while read IP ID
do
array[$int]=$IP
let "int++"
done</home/myscript/clusters
#start zookeeper server on cluster
for i in ${array[@]}
do
echo "starting zookeeper on "$i
ssh root@$i ${ZOOKEEPER_HOME}'/bin/zkServer.sh start'
done
3、start_hbase.sh