Hadoop HA部署
- 创建用户
- 配置hosts文件
- 配置三台机器SSH互相信任关系
- 部署JDK
- 停掉防火墙
- 部署Zookeeper
本人使用三台阿里云主机进行学习,分别用hadoop001,hadoop002,hadoop003表示
创建用户
首先在生产上,一般每一个组件会由不同的用户来部署,所以一上来首先是在三台机器上都创建hadoop用户:
useradd hadoop
配置hosts文件
需要在三台机器上都配置机器名和ip的映射关系
vi etc/hosts
配置三台机器SSH互相信任关系
配置了信任关系后,从一台机器跳到另一台不需要输入密码。
首先删除三台机器上hadoop用户家目录下的默认的.ssh目录,然后输入:
ssh-keygen 加上 三次回车
完成新的.ssh目录的生成,新的目录里面会有一个私钥文件和一个公钥文件。
再将hadoop002,hadoop003机器的公钥文件依次传给hadoop001,作为id_rsa2,id_rsa3
scp id_rsa.pub root@hadoop001:/home/hadoop/.ssh/id_rsa2
scp id_rsa.pub root@hadoop001:/home/hadoop/.ssh/id_rsa3
(这里有个坑:由于现在是用hadoop用户操作的,如果直接将文件拷贝给hadoop001机器,则是需要输入hadoop001 的 hadoop 用户的账号密码,而这时我们并没有配置hadoop用户的密码,所以这样做显然不对。所以需要在hadoop001前面加上root@)
再依次将这三个公钥文件输入到 authorized_keys
cat id_rsa.pub >> authorized_keys
cat id_rsa2 >> authorized_keys
cat id_rsa3 >> authorized_keys
之后再将hadoop001机器上的.ssh目录下的authorized_keys拷贝到另外两台机器的相同的位置上。
需要修改 authorized_keys 的权限 (因为是在hadoop用户,而不是root用户)
chmod 600 authorized_keys
这样就完成了多台机器的信任关系
可以用ssh hadoop001 date 试验一下
在第一次输入 ssh hadoop003 date,输入yes 来触发信任关系的连接并确认,输入yes之后,系统会在.ssh文件夹下的known_hosts文件下自动记录这种联系。如果密钥文件发生变更,需要手动在这个known_hosts文件夹下删除用户对应的记录。
但是注意,不要全部删掉,全部删掉的话生产上可能整个调度系统挂掉了,生产上的系统一般都是分布式的,不可能都部署在一台机器上,所以如果把known_hosts删除,就找不到与这台机器连接的别的机器,整个系统会断掉,shell脚本都会部署在远程机器,调动shell脚本的时候,远程机器也不会自动输入yes,所以有可能会闯祸
部署JDK
mkdir /usr/java/ 然后解压
JDK 最好部署在 /usr/java 中
部署JDK 之后,要修改JDK的用户和用户组:
chown -R root:root /usr/java/
停掉防火墙
service iptables status 查看防火墙情况
iptables -L 查看防火墙规则
iptables -F 清空
部署Zookeeper
- tar -xzvf zookeeper-3.4.6.tar.gz
- 建立软连接 ln -s /home/hadoop/app/zookeeper-3.4.6 /home/hadoop/app/zookeeper
- 配置 app/zookeeper/conf/zoo_sample.cfg
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg:修改 datadir 数据存储的目录
dataDir=/home/hadoop/app/zookeeper/data
(原先默认放在tmp目录下,但是tmp目录一个月会删除一次数据)并在最后添加上映射关系(集群id对应机器号并加上通信端口号):
server.1=hadoop001:2888:3888
server.2=hadoop002:2888:3888
server.3=hadoop003:2888:3888 - 并在hadoop001机器的zookeeper目录下创建data目录,并在data目录下touch一个新文件myid,echo 1 > myid (1后面需要有一个空格,要不然输入不进去)
- 把zoo.cfg 和 data目录 传给 hadoop002,hadoop003
并修改 data 目录里的 myid - 配置环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_45
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
- 启动Zookeeper
$ZOOKEEPER_HOME/bin/zkServer.sh start
$ZOOKEEPER_HOME/bin/zkServer.sh status //查看是否启动