题外话
初次部署Hadoop HA的时候,踩过很多坑。现在将部署流程记录下来,希望可以帮助到更多的初学者。
HADOOP HA是什么
在HADOOP1.0时代,整个集群中仅有一台NameNode结点,如果该结点丢失或数据发生损坏,会对整个集群造成不可恢复的损失,为了解决这一问题,社区研发出了SecondaryNamenode用以备份NameNode中的元数据,然而使用该组建后,当集群发生损坏时,集群恢复工作的时间相当缓慢,并不能满足商业上的使用。
在HADOOP2.0时代,社群重新定义了NameNode的设计层级,改用Service来对集群进行管理。Hadoop HA使用多个NameNode组成一个服务,每一个服务中有两台或以上的NameNode,NameNode们的功能完全一致,但是同一时间仅有一台处于active状态,其他处于Standby状态,当active集群发生故障时,能在秒级时间内进行切换。
HADOOP HA正式部署
一、集群规划
IP 地址 | Hadoop | HDFS | Yarn | ||
---|---|---|---|---|---|
192.168.20.100 | Master1 | NameNode | ResourceManager | JournalNode | |
192.168.20.101 | Master2 | NameNode | ResourceManager | Zookeeper | JournalNode |
192.168.20.102 | Slave1 | DataNode | NodeManager | Zookeeper | JournalNode |
192.168.20.103 | Slave2 | DataNode | NodeManager | Zookeeper | JournalNode |
192.168.20.104 | Slave3 | DataNode | NodeManager | Zookeeper | JournalNode |
192.168.20.105 | Slave4 | DataNode | NodeManager | Zookeeper |
如果机器数量紧缺,可使用如下方法
- 可以只用3个Zookeepr和JournalNode。
- Slave可以和NameNode部署在同一结点 。
- 但两台Namenode和Resourcemanager须分开。
二、基础配置
使用CentOS 7.2系统,HADOO P版本 2.6.5,Zookeeper版本 3.X
1.更改主机名
vim /etc/hostname
2.设置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
3.编辑hosts文件
将其他结点的 hostname
以及 ip地址
按照格式写入hosts文件中
vim /etc/hosts
如: 192.168.20.100 Master1
4.关闭防火墙或设置开放端口
为了方便搭建,直接关闭了防火墙,仅限于实验环境
systemctl status firewalld.service 查看防火墙状态
systemctl stop firewalld.service 关闭防火墙
systemctl disable firewalld.service 禁止开机启动防火墙
5.关闭 SELINUX
vim /etc/selinux/config
修改文件中
SELINUX=disabled
三、安装JDK
1、 在集群所有机器上安装 Java 环境
yum install java
2、 设置环境变量
` vim /etc/profile.d/java.sh
增加
export JAVA_HOME=YOURJAVAPATH
export PATH=PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
四、SSH免密码登陆
ssh-keygen -t rsa
#生成密钥,一路回车- 将每个节点的公钥发送到
master
节点,每个节点的id_rsa.pub
分别导入 authorized_keys,语句为cat id_rsa.pub >> authorized_keys
- 将统一的
authorized_keys
发送到每一个节点的/home/.ssh
路径下 修改配置文件
vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
重启服务
service sshd restart
- 免密测试
ssh 其他主机名 or ip
五、zookeeper 集群安装
基于zookeepr选主算法,配置奇数台zookeeper最佳。
1. 在集群五台机器上安装 ZooKeeper(192.168.20.101~105)
yum install zookeeper
2. 修改配置文件
zookeeper/conf
目录下的zoo_sample.cfg
,将其改名为zoo.cfg
新增zookeepr集群ip
server.1=zkip:2888:3888
新增数据存储目录以及日志存储目录
mkdir -p /var/lib/zookeeper/data
mkdir -p /var/lib/zookeeper/logs
3. 创建myid文件
创建 myid 文件,并编辑它,编辑的内容就是配置文件中 server.后面跟着的号数
echo "1" > /var/lib/zookeeper/data/myid
4. 启动结点
/usr/lib/zookeeper/bin/zkServer.sh start
5. 检查运行状况
/usr/lib/zookeeper/bin/zkServer.sh status
在每个 slave 节点机器上运行此命令,会出现 Follower 和 Leader ### 六、HADOOP 集群安装
6. 在集群所有机器上安装
Hadoop yum install Hadoop
7. 在两台机器上安装 NameNode(192.168.20.100-101)
yum install Hadoop-hdfs-namenode
8. 在另外四台机器上安装 DataNode(192.168.20.102-105)
yum install Hadoop-hdfs-datanode
9. 在 集 群 所 有 机 器 上 安装 YARN
( NameNode-ResourceManager , DataNode-NodeManager)
yum install hadoop-yarn-resourcemanager
(192.168.20.100-101)
yum install hadoop-yarn-nodemanager(
192.168.20.102-105)
10. 在五台机器上安装 JournalNode 作为两个 NameNode 的共享存储空间
yum install hadoop-hdfs-journalnode
(192.168.20.100~104)
11. 安装 HttpFs,可通过浏览器管理 HDFS
yum install hadoop-httpfs
### 七、配置文件
路径:/etc/hadoop/conf
1. hdfs-site.xml 手动创建目录,更改所有者和所属组
- journalnode 存放数据目录(192.168.20.100~104)
mkdir –p /journal/data chmod –R hdfs:hadoop journal
- nanenode文件目录(192.168.20.100~101),更改文件目录所属组
mkdir –p /var/lib/hadoop-hdfs/cache/hdfs/dfs/name
chown –R hdfs:hadoop hdfs
- 具体配置文件
<configuration>
<property> <!--datanode数据存储位置 -->
<name>dfs.datanode.data.dir</name>
<value>
file:///mnt/volume_b/,
file:///mnt/volume_c/,
file:///mnt/volume_d/,
file:///mnt/volume_e/,
file:///mnt/volume_f/,
file:///mnt/volume_g/,
file:///mnt/volume_h/,
file:///mnt/volume_i/,
file:///mnt/volume_j/,
file:///mnt/volume_k/,
file:///mnt/volume_l/,
file:///mnt/volume_m/
</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>root</value><!--设置拥有权限的用户-->
</property>
<property>
<name>dfs.permissions</name><!--是否开启认证-->
<value>false</value>
</property>
<property>
<!--namenode 的文件目录,手动创建,用户权限组为 hdfs:hadoop -->
<name>dfs.namenode.name.dir</