首页 > 代码库 > 搭建hadoop2 HA

搭建hadoop2 HA

一、简介

1.1 背景:

针对Hadoop 1.x中可能出现的NameNode单点故障(SPOF)或者短时间无法使用的情况,Hadoop 2.x 通过增加一个NameNode的方式进行了改善,而增加一个NameNode后,实际在没有出现问题时,只需要一个NameNode,所以两个NameNode一个处于Standby状态,一个处于Active状态。Standby不对外提供服务,仅同步Active NameNode的状态,以便Active NameNode出现问题时及时切换成Active状态。

 

1.2 架构:

Hadoop 2.x 的两个NameNode一般会配置在两台独立的机器上,Active NameNode会响应集群客户端,而Standby NameNode只是作为Active NameNode的备份,保证在Active NameNode出现问题时能够快速的替代它。

Standby NameNode通过JournalNodes的通信来与Active NameNode保持同步。

Active NameNode和Standby NameNode在哪个节点上,是由zookeeper通过主备选举机制来确定的。

 

1.3 HDFS HA配置:

NameNode:对应配置相同的两台物理机,分别运行Active NameNode和Standby NameNode。

JournalNode:JournalNode不会耗费太多的资源,可以和其它进程部署在一起,如NameNode、Datanode、ResourceManager等,需要至少3个且为基数,这样可以允许(N-1)/2个JNS进程失败。

DataNode:根据数据量的大小和处理数据所需资源进行配置,一般实际应用中数量较多,且分布在较多的机器上。

 

二、安装配置

各安装文件版本信息

CentOS-7-x86_64-Minimal-1511.iso

jdk-8u101-linux-x64.tar.gz

zookeeper-3.4.8.tar.gz

hadoop-2.6.0.tar.gz

 

2.1 安装centos 7

2.1.1 安装虚拟机和Linux系统:

我采用的是VMware Workstation 12 Player安装的centos 7,先安装VMware,此步骤不做描述。

安装最小化centos,比较简单,也不做详细描述。我没有设置账户,所以开机后的账户为root账户,密码自己设置。

 

2.1.2 配置、连接网络

centos安装后需要手动联网:

开机后登陆root,修改文件进行联网:

cd /etc/sysconfig/network-scripts/

vi ifcfg-eno16777736

且分别加入主机名和IP地址:

IPADDR=192.168.152.153      //其它节点将最后一个数字加1即可,按照集群规划的IP进行设置

重启网络服务

service network restart

修改主机名:

hostnamectl set-hostname 主机名

 

2.1.3 设置IP地址和主机名映射

su root

vim /etc/hosts

192.168.152.155 hadoop-namenode1

192.168.152.153 hadoop-namenode2

192.168.152.154 hadoop-datanode1

关闭防火墙和Selinux

systemctl stop firewalld.service 

systemctl disable firewalld.service  

vim /etc/selinux/config

SELINUX=disabled 

重启,查看Selinux状态

gentenforce

 

2.2 Hadoop安装前的准备:

2.2.1 创建组和用户并添加权限:

groupadd hadoop   //创建组hadoop

useradd -g hadoop hadoop    //创建组hadoop下的用户hadoop

passwd hadoop     //修改用户hadoop的密码

yum install vim      //安装vim

vim /etc/sudoers     //修改配置文件sudoers给hadoop用户添加sudo权限,添加以下内容:

hadoop     ALL=(ALL)      ALL

 

2.2.2 配置SSH免密码登录:

在namenode1节点上生成SSH密钥对

su hadoop

$ ssh-keygen -t rsa

将公钥复制到集群所有节点机器上

$ ssh-copy-id hadoop-namenode1

$ ssh-copy-id hadoop-namenode2

$ ssh-copy-id hadoop-datanode1

通过ssh登录各节点测试是否免密码登录成功

 

2.3 Hadoop安装、配置 

2.3.1 安装JDK

卸载自带的openjdk(centos7没有自带的openjdk,所以直接安装jdk即可)

创建安装路径:

mkdir apache

tar -xvf jdk-8u101-linux-x64.tar.gz /home/hadoop/apache/

 配置环境变量:

vim ~/.bash_profile

添加以下内容:

export JAVA_HOME=/home/hadoop/apache/jdk1.8.0_101
export PATH=$PATH:$JAVA_HOME/bin

保存,通过以下指令使环境变量生效:

source ~/.bash_profile

测试JDK是否安装成功:

java -version

 

2.3.2 安装zookeeper集群

解压缩zookeeper安装包

tar -xvf zookeeper3.4.8.tar.gz /home/hadoop/apache/

 删除安装包:

rm zookeeper3.4.8.tar.gz

 

配置hadoop用户权限:

chown -R hadoop:hadoop zookeeper-3.4.8

修改zookeeper的配置文件:

cd apache/zookeeper-3.4.8/conf

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

设置如下:

tickTime=2000   //客户端心跳时间(毫秒)

initLimit=10     //循序心跳间隔的最大时间

syncLimit=5     //同步时限

dataDir=/home/hadoop/apache/zookeeper3.4.8/data   //数据存储目录

dataLogDir=/home/hadoop/apache/zookeeper3.4.8/data/log   //数据日志存储目录

clientPort=2181     //端口号

maxClientCnxns=2000    //连接zookeeper的最大数量

server.1=hadoop-namenode1:2888:3888     //设置zookeeper的节点

server.2=hadoop-namenode2:2888:3888

server.3=hadoop-datanode1:2888:3888

创建zookeeper的数据存储目录和日志存储目录:

cd ..

mkdir -p data/log

 修改数据存储文件和日志文件的权限:

chown -R hadoop:hadoop data

cd data

chown -R hadoop:hadoop log

在data目录下创建文件myid,输入内容为1

echo "1" >> data/myid    //待工作目录同步到其它两个节点后分别修改内容为2和3

将zookeeper工作目录同步到集群其它节点

scp -r zookeeper-3.4.8 hadoop@hadoop-namenode2:/home/hadoop/apache/

scp -r zookeeper-3.4.8 hadoop@hadoop-datanode1:/home/hadoop/apache/

分别修改myid的值为2和3,并配置所有节点的环境变量。

vim ~/.bash_profile

export ZOOKEEPER_HOME=/home/hadoop/apache/zookeeper-3.4.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin

到这里zookeeper的集群就已经搭建好了,下面进行启动:

zkServer.sh start

查看进程:

jps

 

2.3.3 Hadoop的安装和配置

在namenode1节点下解压缩安装文件

tar -xvf hadoop-2.6.0.tar.gz /home/hadoop/apache/

删除安装文件

rm hadoop2.6.0.tar.gz

设置用户权限

cd apache

chown -R hadoop:hadoop hadoop-2.6.0/

 

配置文件

cd hadoop-2.6.0/etc/hadoop/

vim hadoop-env.sh

 

保存后,创建刚才设定的目录:

cd /home/hadoop/apache/hadoop-2.6.0

mkdir pids

mkdir -p data/logs

 

配置core-site.xml:

cd etc/hadoop

vim core-site.xml

 

配置hdfs-site.xml:

vim hdfs-site.xml

 

 配置mapred-site.xml:

cp mapred-site.xml.template mapred-site.xml

vim mapred-site.xml

 

 配置yarn-site.xml文件:

vim yarn-site.xml

 

 配置slave文件:

vim slaves

hadoop-datanode1

 

创建配置文件中涉及到的目录:

cd ../..

mkdir -p data/tmp

mkdir -p data/journal

mkdir -p data/namenode

mkdir -p data/datanode

 

将hadoop工作目录同步到集群其它节点

scp -r hadoop-2.6.0 hadoop@hadoop-namenode2:/home/hadoop/apache/

scp -r hadoop-2.6.0 hadoop@hadoop-datanode1:/home/hadoop/apache/

 在所有节点上配置环境变量:

vim ~/.bash_profile

export HADOOP_HOME=/home/hadoop/apache/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使修改后的环境变量生效: 

source ~/.bash_profile

 

Hadoop集群初始化

在所有节点上启动zookeeper集群:

zkServer.sh start

在hadoop-namenode1上格式化zkfc:

hdfs zkfc -formatZK

启动journalnode(在namenode1,namenode2和datanode1上):

hadoop-daemon.sh start journalnode

格式化HDFS(在hadoop-namenode1上):

 

hadoop namenode -format

将格式化后namenode1节点hadoop工作目录中的元数据目录复制到namenode2节点

scp-r /home/hadoop/apache/hadoop-2.6.0/data/namenode/* hadoop@hadoop-namenode2:/home/hadoop/apache/hadoop-2.6.0/data/namenode/ 

 

启动Hadoop集群

在hadoop-namenode1上启动dfs:

start-dfs.sh

start-dfs.sh命令会开启以下进程:

namenode                        

journalnode                         

DFSZKFailoverController        

datanode                   

 

启动YARN(在namenode2上操作)

start-yarn.sh

 

启动YARN上的另一个ResourceManager

yarn-daemon.sh start resourcemanager

启动YARN的安全代理

yarn-daemon.sh start proxyserver

注:proxyserver充当防火墙的角色,提高访问集群的安全性

 

启动YARN的历史任务服务

mr-jobhistory-daemon.sh start historyserver

 

至此,Hadoop集群安装配置完成。  

 

搭建hadoop2 HA