针对Hadoop 1.x中可能出现的NameNode单点故障(SPOF)或者短期没法使用的状况,Hadoop 2.x 经过增长一个NameNode的方式进行了改善,而增长一个NameNode后,实际在没有出现问题时,只须要一个NameNode,因此两个NameNode一个处于Standby状态,一个处于Active状态。Standby不对外提供服务,仅同步Active NameNode的状态,以便Active NameNode出现问题时及时切换成Active状态。java
Hadoop 2.x 的两个NameNode通常会配置在两台独立的机器上,Active NameNode会响应集群客户端,而Standby NameNode只是做为Active NameNode的备份,保证在Active NameNode出现问题时可以快速的替代它。node
Standby NameNode经过JournalNodes的通讯来与Active NameNode保持同步。linux
Active NameNode和Standby NameNode在哪一个节点上,是由zookeeper经过主备选举机制来肯定的。apache
NameNode:对应配置相同的两台物理机,分别运行Active NameNode和Standby NameNode。vim
JournalNode:JournalNode不会耗费太多的资源,能够和其它进程部署在一块儿,如NameNode、Datanode、ResourceManager等,须要至少3个且为基数,这样能够容许(N-1)/2个JNS进程失败。centos
DataNode:根据数据量的大小和处理数据所需资源进行配置,通常实际应用中数量较多,且分布在较多的机器上。安全
CentOS-7-x86_64-Minimal-1511.isobash
jdk-8u101-linux-x64.tar.gz网络
zookeeper-3.4.8.tar.gz架构
hadoop-2.6.0.tar.gz
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.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.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集群安装配置完成。