本文转自:http://www.micmiu.com/bigdata/hadoop/hadoop2-cluster-ha-setup/?utm_source=tuicool&utm_medium=referral
[一]、 引言
在Hadoop2.x初期的时候写过一篇 hadoop 2.2.0 集群模式安装配置和测试,记录了分布式搭建的最基本的搭建步骤和运行演示,那篇文章中没有对HA的配置做实验,本文会详细介绍 Hadoop2的分布式、NameNode配置HA以及ResourceManage配置HA的实验过程。
[二]、 实验环境
1、各节点及角色分配
本文以5个集群节点为基础做实验环境,具体的角色分配如下:
hostname | NameNode | DataNode | JournalNode | Zookeeper | ZKFC | ResourceManager |
nn1.hadoop | √(Active) | √ | √ | √ | √ | |
nn2.hadoop | √(Standby) | √ | √ | √ | √ | |
dn1.hadoop | √ | √ | √ | |||
dn2.hadoop | √ | |||||
dn3.hadoop | √ |
2、系统及软件版本
- CentOS 6.3 64位
- Java 1.7.0_75
- Hadoop 2.6.0
- zookeeper 3.4.6
3、安装JDK (所有节点需要操作)
Oracle官方下载 64为 jdk :jdk-7u3-linux-x64.rpm 执行安装命令:
rpm -ivh jdk-7u3-linux-x64.rpm
默认的安装路径:/usr/java/jdk1.7.0_75
4、配置hosts (所有节点需要操作)
5、确认SSHD已经安装并启动 (所有节点需要操作)
6、配置时钟同步
第一种方法 :(所有节点都要操作)都从公共NTP服务器同步,执行如下:
第二种方法:选一个节点搭建一个NTP服务,其他节点从该NTP服务器同步
7、创建专有用户(所有节点需要操作)
比如创建 hadoop用户,密码也初始化为hadoop, 下面有关hadoop部署配置都是以这个用户操作的
为hadoop 用户修改环境变量 vi ~/.bash_profile
:
8、SSH免密码登陆
配置所有的NameNode节点 可以免密码登录到其余所有节点,只需要单向免密登录即可,当然你要配置为双向也无妨。有关SSH无密码登录的详细介绍可以参见:Linux(Centos)配置OpenSSH无密码登陆
[三]、 实验过程
1、hadoop2的编译
在实验环境中任节点机器上 下载hadoop 2.6.0的源码,安装配置好Java 和Maven 然后执行 mvn package -Pdist,native -DskipTests -Dtar
进行源码编译,具体可参考:
2、zookeeper安装配置
下载最新稳定版本(3.4.6)部署在ZK的各个节点,修改环境变量vi ~/.bash_profile
:
修改配置文件:
修改成如下:
配置文件中的相关目录路径需要先创建好且hadoop用户具有读写权限,不同zk节点配置不同的myid:
- 在zk1.hadoop 节点中 执行:echo 1 > /bigdata/hadoop/zookeeper/zkdata/myid
- 在zk2.hadoop 节点中 执行:echo 2 > /bigdata/hadoop/zookeeper/zkdata/myid
- 在zk3.hadoop 节点中 执行:echo 3 > /bigdata/hadoop/zookeeper/zkdata/myid
myid中的数值需要和 zoo.cfg中的配置一致。
3、hadoop 安装配置(所有节点需要修改)
3.1、配置环境变量vi ~/.bash_profile
:
3.2、修改 $HADOOP_HOME/etc/hadoop/core-site.xml
3.3、修改 $HADOOP_HOME/etc/hadoop/hfds-site.xml
3.4、修改 $HADOOP_HOME/etc/hadoop/yarn-site.xml
PS: yarn-site.xml中的HA相关配置格式和hdfs-site.xml中的HA配置类似。
3.5、修改 $HADOOP_HOME/etc/hadoop/mapred-site.xml
3.6、修改 $HADOOP_HOME/etc/hadoop/salves
4、启动步骤和详细过程:
4.1、启动ZK
在所有的ZK节点执行命令: zkServer.sh start
可借助命令 zkServer.sh status
查看各个ZK的从属关系
4.2、格式化ZK(仅第一次需要做)
任意ZK节点上执行:hdfs zkfc -formatZK
4.3、启动ZKFC
ZKFC(zookeeperFailoverController)是用来监控NN状态,协助实现主备NN切换的,所以仅仅在主备NN节点上启动就行。
4.4、启动JournalNode 用于主备NN之间同步元数据信息的共享存储系统, 在每个JN节点上启动:
4.5、格式化并启动主NN
格式化:hdfs namenode -format
注意:只有第一次启动系统时需格式化,请勿重复格式化!
在主NN节点执行命令启动NN: hadoop-daemon.sh start namenode
可以对比查看启动前后NN节点的进程:
4.6、在备NN上同步主NN的元数据信息hdfs namenode -bootstrapStandby
4.7、启动备NN
在备NN上执行命令:hadoop-daemon.sh start namenode
4.8、设置和确认主NN
本文配置的是自动切换,ZK已经自动选择一个节点作为主NN了,所以这一步可以省略,查看节点状态:
如果是配置手动切换NN的,这一步是不可缺少的,因为系统还不知道谁是主NN,两个节点的NN都是Standby状态。手动激活主NN的命令:hdfs haadmin -transitionToActive nn1
4.9、在主NN上启动Datanode
启动所有datanode命令:hadoop-daemons.sh start datanode
注意:hadoop-daemons.sh 和 hadoop-daemon.sh 命令的差异
4.10、启动YARN
方法一:一次性启动ResourceManager和NodeManager命令:start-yarn.sh
方法二:分别启动ResourceManager和NodeManager:
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
(如果有多个datanode,需使用yarn-daemons.sh)
ResourceManager 也配置了HA,根据命令查看节点状态:
yarn rmadmin –getServiceState serviceid
4.11 启动MR JobHistory Server
在dn1.hadoop上运行MRJS :mr-jobhistory-daemon.sh start historyserver
4.12、验证NameNode 和ResourceManager 的HA是否生效
把当前主节点中的相关进程kill掉 查看各节点状态切换情况。
4.13、验证NN HA的透明性
注意验证 hdfs dfs -ls
/ 和 hdfs dfs -ls hdfs://mycluster/
的访问效果是一致的:
1
2
3
4
5
6
7
8
9
|
[hadoop@nn1
~]$
hdfs
dfs
-ls
/
Found
2
items
drwx------
-
hadoop
supergroup 0
2015-02-02
23:42
/tmp
drwxr-xr-x
-
hadoop
supergroup 0
2015-02-02
23:39
/user
[hadoop@nn1
~]$
hdfs
dfs
-ls
hdfs://mycluster/
Found
2
items
drwx------
-
hadoop
supergroup 0
2015-02-02
23:42
hdfs://mycluster/tmp
drwxr-xr-x
-
hadoop
supergroup 0
2015-02-02
23:39
hdfs://mycluster/user
[hadoop@nn1
~]$
|
[五]、 运行wrodcount demo
这个demo的演示可参考:hadoop 2.2.0 集群模式安装配置和测试 中的 wordcount演示步骤,这里不再重复描述了。