高可用hadoop安装
安装步骤
1.分发JDK
首先把node01的jdk分发到node02、03、04
scp jdk-7u67-linux-x64.rpm node02:`pwd`
scp jdk-7u67-linux-x64.rpm node03:`pwd`
scp jdk-7u67-linux-x64.rpm node04:`pwd`
并在Xshell的全部回话栏里一起ll,看jdk是否发送成功。
注意:`这一符号是数字1左边这个键
1.1安装JDK
分别在node02、03、04上执行rpm安装命令
rpm -i jdk-7u67-linux-x64.rpm
在node01上cd /etc,在此目录下把profile文件分发到node02、03、04上。
scp profile node02:`pwd`
利用Xshell全部会话栏,
source /etc/profile
利用Xshell全部会话栏,jps,看02、03、04这三台机子的jdk是否装好。
2.同步服务器时间
查看机子当前的时间
date
时间不能差太大,否则集群启动后某些进程跑不起来。
若时间不同步,怎么办?
1.yum进行时间同步器的安装
yum -y install ntp
2.执行同步命令
ntpdata time1 .aliyum.com
和阿里云服务器时间同步
3.装机前检查配置文件
1.查看HOSTNAME是否正确
cat /etc/sysconfig/network
2.查看IP映射是否正确
cat /etc/hosts
若不正确,可以改文件,也可以把node01上的用scp分发过去。
3.
cat /etc/sysconfig/selinux
查看selinux文件中是否SELINUX=disabled
4.查看防火墙是否关闭
service iptables status
4.namenode与其他机子的免秘钥设置
1.在家目录下ll -a看下有无.ssh文件,如果没有就ssh localhost一下
ll -a
ssh localhost
cd .ssh
并ll查看一下
ll
3.把node01的公钥发给其他三台机子
scp id dsa.pub node02:`pwd`/node01.pub
4.同理给其他节点发送公钥并在各个节点上把node01的公钥追加上
scp id_dsa.pub node03:`pwd`/node01.pub
scp id_dsa.pub node04:`pwd`/node01.pub
在node03上分别ssh node02,ssh node03, sshnode04,看是否能免密钥登录,每次ssh都别忘了exit
5.在node02的.ssh目录下看是否有node01.pub
如果有,就追加authorized_keys
cat node01.pub >> authorized_keys
并且在node01上ssh node02看是否免密钥了
记得要exit
给node03、04都追加一下node01.pub,也就是在node03、04的.ssh目录下执行cat node01.pub >> authorized_keys
5.两个namenode互相免密钥
1.node01与node02间互相免密钥:node01可免密钥登录node02,那现需node02上能免密钥登node01,所以在node04上:
ssh -keygen -t dsa -P " -f ~ /.ssh/id_dsa
cat ~ /.ssh/id_dsa.pub >> ~ /.ssh/authorized_keys
用ssh localhost验证一下
ssh localhost
分发到node01上:
scp id_dsa.pub node01:`pwd`/node02.pub
在node01的.ssh目录下,
cat node02.pub >> authorized_keys
在node02上ssh node01验证一下可否密钥登录
ssh node01
6.修改namenode一些配置信息
1.输入指令
vi hdfs-site.xml
(1)去掉ssn的配置
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
(2)增加以下property
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
指定HDFS副本的数量,不能超过机器节点数
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
nameservice包含哪些namenode,为各个namenode起名
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
名为nn1的namenoderpc地址和端口号,rpc用来和datanode通讯
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
名为nn1的namenoderpc地址和端口号,用来和web客户端通讯
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
名为nn2的namenoderpc地址和端口号,rpc用来和datanode通讯
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
名为nn2的namenoderpc地址和端口号,用来和web客户端通讯
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
namenode间用于共享编辑日志的journal节点列表
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
journalnode上用于存放edits日志的目录
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/ldy/hadoop/ha/jn</value>
</property>
指定该集群出现故障时,是否自动切换到另一台namenode
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
配置失败自动切换实现方式
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
一旦需要NameNode切换,使用ssh方式进行操作
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
2.输入指令
vi core-site.xml
集群名称mycluster
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/ldy/hadoop/pseudo</value>
</property>
zookeeper布署的位置
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
3.输入指令
vi slaves
//修改配置
node04
node05
node06
4.安装hadoop
cd /opt
进入此文件夹,将其下的ldy目录分发到node02、03、04
scp -r ldy/ node02:`pwd`
scp -r ldy/ node03:`pwd`
scp -r ldy/ node04:`pwd`
5.再将hdfs-site.xml和core-site.xml分别发到node02,node03,node04
scp hdfs-site.xml core-site.xml node02:`pwd`
scp hdfs-site.xml core-site.xml node03:`pwd`
scp hdfs-site.xml core-site.xml node04:`pwd`
7.安装zookeeper
1.解压安装zookeeper
tar xf zookeeper-3.4.6.tar.gz -C /opt/ldy
2.修改zookeeper的配置文件
cd /opt/ldy/zookeeper-3.4.6/conf
ll
我们要给zookeeper的zoo_sample.cfg改名
cp zoo_sample.cfg zoo.cfg
输入指令,改dataDir=/var/ldy/zk
vi zoo.cfg
dataDir=/var/ldy/zk
在末尾追加
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口
3.把zookeeper分发到其他节点上
scp -r zookeeper-3.4.6/ node03:`pwd`
scp -r zookeeper-3.4.6/ node04:`pwd`
并用ll/opt/ldy/检查下看分发成功没有。
4.给每台机子创建刚配置文件里的路径。
输入指令
mkdir -p /var/ldy/zk
对node2来说:
echo 1 > /var/ldy/zk/myid
cat /var/ldy/zk/myid
对node03来说:
echo 2 > /var/ldy/zk/myid
cat /var/ldy/zk/myid
对node04来说:
echo 3 > /var/ldy/zk/myid
cat /var/ldy/zk/myid
给每台机子配置其编号(必须是阿拉伯数字)
5.在 /etc/profile里面配置文件,输入指令
cd /etc/profile
export ZOOKEEPER_HOME=/opt/ldy/zookeeper-3.4.6
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
6.然后在把/etc/profile分发到其他node03,node04
scp /etc/profile node05:/etc
scp /etc/profile node06:/etc
在node02,node03,node04里source /etc/profile,这步千万不能忘记
验证source这句是否完成,输入zkCli.s,按下TAB键可以把名字补全zkCli.sh
7.启动zookeeper
在全部会话中,输入指令
zkServer.sh start
接着用zkServer.sh status查看每个zookeeper节点的状态
zkServer.sh status
注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改成绝对路径。
8.启动journalnode
启动journalnode目的是为了使两台namenode间完成数据同步.
在node01,node02,node03三台机子上分别把journalnode启动起来。
hadoop-daemon.sh start journalnode
用jps检查下进程是否启动
9.格式化任一namenode
随意挑一台namenode上执行hdfs namenode –format,另一台namenode不用执行,否则clusterID变了,找不到集群了。
hdfs namenode –format
然后启动刚刚格式化那台的namenode
hadoop-daemon.sh start namenode
10.给另一namenode同步数据
那另一台namenode怎么办,什么都不做吗?
那么另外一台namenode,需要同步一下数据,我们输入以下命令
hdfs namenode -bootstrapStandby
11.格式化zkfc
我们需要格式化zkfc
hdfs zkfc -formatZK
我们在node02上执行zkCli.sh打开zookeeper客户端看看hadoop-ha是否打开
zkCli.sh
ls /
12.启动hdfs集群
在node03上启动hdfs集群
start-dfs.sh
注意:如果那个节点没起来到hadoop目录下去看那个node的日志文件log
然后全部会话jsp看一下都起来些什么进程
用浏览器访问node01:50070和node02:50070,他们一定是一个处于active状态,一个处于standy状态。
到此为止,hadoop高可用就基本安装完成
hadoop关闭指令
关闭集群命令:
stop-dfs.sh
关闭zookeeper命令:
zkServer.sh stop
注意:你下一次启动hdfs集群的时候还需要用hadoop-daemon.sh start journalnode命令启动journalnode吗?
答案是不需要
只要start-dfs.sh就可以了。我们之前启动journalnode是为了同步两个namenode之间的信息。
随后我们要为MapReduce做准备。
13.MapReduce的配置
把mapred-site.xml.template留个备份,并且给复制的文件改名。
cp mapred-site.xml.template mapred-site.xml
在mapred-site.xml里添加如下property
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在yarn-site.xml里添加如下property
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node04</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
把mapred-site.xml和yarn-site.xml分发给node02,node03,node04
scp mapred-site.xml yarn-site.xml node04:`pwd`
scp mapred-site.xml yarn-site.xml node05:`pwd`
scp mapred-site.xml yarn-site.xml node06:`pwd`
那么由于node03,和node04是resourcemanager,所以它们应该相互免密钥才对,首先在node03上免密钥登录node04:
在node03的.ssh目录下生成密钥
cd .ssh
ssh-keygen -t dsa -P '' -f ./id_dsa
并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
用ssh localhost 验证是否需要密码,别忘记exit
然后将node03的公钥分发到node04
scp id_dsa.pub node04:`pwd`/node03.pub
在node04的.ssh目录下,追加node03.pub
cat node03.pub >> authorized_keys
在node03上ssh node04 ,是否免密钥
同理node04
//在node04的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
//并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys
//用ssh localhost验证看是否需要密码,别忘了exit
//将node04 的公钥分发到node03
scp id_dsa.pub node05:`pwd`/node06.pub
//在node03的.ssh目录下,追加node06.pub
cat node04.pub >> authorized_keys
//在node04上ssh node03,看是否免密钥
1.启动zookeeper,全部会话zkServer.sh start
2.在node01上启动hdfs,start-dfs.sh
3.在node01上启动yarn,start-yarn.sh
4.在node03、04上分别启动resourcemanager
yarn-daemon.sh start resourcemanager
5.全部会话jps,看进程全不全
在浏览器访问node03:8088,查看resourcemanager管理的内容
之后就是基本完成安装
最后关闭集群
//关闭集群:
//node01:
stop-dfs.sh
//node01: (停止nodemanager)
stop-yarn.sh
//node03,node04:
yarn-daemon.sh stop resourcemanager
//Node02、03、04:
zkServer.sh stop