为啥hadoop启动后两个namenode都处于standby状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥hadoop启动后两个namenode都处于standby状态相关的知识,希望对你有一定的参考价值。
1、先看下启动完成后的hadoop的master.....log日志。 2、一般的permission denied,就是ssh环节没打通,只要再将master和slave之间把“无密码ssh登陆”就可以了。 3、stop-all.sh后打印无jobtracker....之类,是由于你一开始start-all.sh之后就没... 参考技术A 1、先看下启动完成后的hadoop的master.....log日志。 2、一般的permission denied,就是ssh环节没打通,只要再将master和slave之间把“无密码ssh登陆”就可以了。 3、stop-all.sh后打印无jobtracker....之类,是由于你一开始start-all.sh之后就没...搭建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 [email protected]:/home/hadoop/apache/
scp -r zookeeper-3.4.8 [email protected]:/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 [email protected]:/home/hadoop/apache/
scp -r hadoop-2.6.0 [email protected]:/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/* [email protected]:/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集群安装配置完成。
以上是关于为啥hadoop启动后两个namenode都处于standby状态的主要内容,如果未能解决你的问题,请参考以下文章