高可用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 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值