ha高可用集群一站式搭建

VMware11 已经装好
CenOS6.5镜像
hadoop-2.7.1安装包
Linux的JDK1.8安装包

1.安装VMrare11 自行安装

2.安装的是CenOS6.5 镜像

具体步骤看这个文章
Linux下mysql的安装 CentOS6.5
就是安装 一台 Linux的虚拟机 使用的镜像是CentOS6.5

安装完成了
Linux默认用户是root
密码是刚刚自己设置的我的是123456

3.修改主机名和映射

主机名貌似不是必须修改的
但映射必须改好 后续再去克隆完其他两台虚拟机后 也要修改 这三台要都修改好

还有修改映射 主机名 两个文件

修改映射
vi  /etc/hosts
192.168.100.21 hadoop01 www.hadoop01.com
修改主机名
hostname hadoop01 
vi /etc/sysconfig/network
HOSTNAME=hadoop01 #修改localhost.localdomain为hadoop01 

4.然后就是联网设置

LInux的CentOS6.5上网设置之NAT模式

5.安装JDK1.8

能联网了,下面一步就是安装JDK
简单上传解压配置环境变量
不过

注意要先卸载自带的OpenJDK

填坑

1.输入下面找到两个自带的openjdk
rpm -qa | grep jdk
2.删除这两个jdk
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
3.将上传的jdk1.8解压到自己的安装目录
tar -zxvf /home/jdk-8u181-linux-x64.tar.gz -C  /usr/local/
4.解压完成配置环境变量
vi /etc/profile    JAVA_HOME=/usr/local/jdk1.8.0_181/    PATH=$PATH:$JAVA_HOME/bin:
5.更新一下配置文件
source /etc/profile
6.测试一下环境变量配置是否成功 出来版本号即可
java -version

6.克隆虚拟机

刚刚配置的hadoop01 现在配置hadoop02 和hadoop03

克隆虚拟机 具体步骤!
https://blog.csdn.net/C_time/article/details/90383345

1.关机状态下右击虚拟机
2.管理—> 克隆
3. 完整克隆
4.起名字 hadoop02 下一台名字是hadoop03
5. 选位置 一般三台放在一个文件夹即可 最好不要放在C盘
6. 然后就可以了

等待克隆完成后 需要修改好多东西
1.启动新创建的hadoop02
需要做一些配置
能让Windows连接上我们的服务器

克隆完的虚拟机 大概要改4个地方

1.修改网卡信息
修改文件…vi /etc/udev/rules.d/70…net…eth0 后边这个名字忘了 tab一下试试能不能出来
有两个网卡 eth0是hadoop01的 eth1是克隆的 删掉eth0 将eth1的1改为0
一定要改
不要使用原先的eth0 那个ATTR硬件地址是不一样的
2. 修改主机名和映射
临时修改一下
再修改文件
作永久性修改

还有修改映射 主机名 两个文件
vi  /etc/hosts
192.168.37.111  hadoop01 www.hadoop01.com
192.168.37.112  hadoop02 www.hadoop02.com

hostname hadoop02
vi /etc/sysconfig/network
HOSTNAME=hadoop02#修改localhost.localdomain为hadoop02

3.修改ip信息
vi /etc/sysconfig/network-scripts/ifcfg-eth0
1.进去之后改UUID 改成十六进制的 随便改一个就行 要跟原来的不一样 我这里改了倒数第二个 a改成b
2.IPADDR换了 上一个是111 这次我们112
3.HWADDR网卡信息要改 照着 右击虚拟机 设置 网络适配器 高级 改

5.善后 重启服务
service network restart
ifconfig看一下
最好重启机器

6.成功的标志是用Windows的cmd命令能ping通

7.SSH免登陆配置

https://blog.csdn.net/C_time/article/details/90383366 具体步骤 内容太多杂 ssh在文章中间往下的地方
简单步骤:
ssh-keygen -t rsa

一直回车 直到生成图案

然后输入
ssh-copy-id hadoop01
输入yes然后输入密码
ssh-copy-id hadoop02
输入yes然后输入密码
ssh-copy-id hadoop03
输入yes然后输入密码

三台机子分别同样操作
实际两台就可以 搭高可用三台机子时两个老大就行
就是说两个老大可以任意登录01 02 03三台机子 不用输入密码

三台机器的映射 etc下的hosts文件都是这样的三句话 将node改为hadoop 我的是这样哈
在这里插入图片描述

8.时间同步设置

这个没写完 … 我没配置 直接进行后面了 暂时是没事的 因为后面azkaban这个调度工具需要时间同步 后面弄也行
最好现在搞 大家可以百度下

集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时
的同步,比如,每隔十分钟,同步一次时间

配置时间同步的步骤如下:

1) 在root用户下检查是否安装ntp服务

[hadoop@hadoop01 hadoop-2.7.2]$ rpm -qa |grep ntp
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64
ntp-4.2.6p5-10.el6.centos.x8664

等等等

这里直接安装全分布式的高可用模式

就是说不再按照安装过程 1.单机版 2.伪分布式 3.全分布式 4.高可用
想依照这个过程安装的请看我前边的博客 虽然乱 但是全 不过没有资源 需要自行下载
Hadoop集群配置 Hadoop集群的启动和测试 SSH免登陆配置
010 Zookeeper的基本概念 Zookeeper的集群搭建 Zookeeper的shell命令
012 Yarn的ha配置和测试

8.Zookeeper安装

安装完jdk
克隆完
就安装Zookeeper

https://blog.csdn.net/C_time/article/details/90487667 具体步骤

1 现将Zookeeper安装包通过Xshell工具上传到home目录下
2.解压安装

tar -zxvf ./zookeeper-3.4.7.tar.gz -C /usr/local/

3.解压后我们开始配置
配置环境变量

vi /etc/profile

然后

source /etc/profile

一下

进入到Zookeeper目录

然后我们需要配下面划线的东西 是zk的一个模板文件
不过需要先改个名

mv ./conf/zoo_sample.cfg ./conf/zoo.cfg

然后进入修改该文件
将注释按两下d删一行·都删掉
然后照着截图改一下数字 5 2
然后再加上最后三句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.这台机子配完了 然后copy到02 03上去

scp -r …/zookeeper-3.4.7/ hadoop02:/usr/local/
scp -r …/zookeeper-3.4.7/ hadoop03:/usr/local/

这样然后都改一下02 03的环境变量

4.最后别忘了创建文件夹
我们在上面这一步修改的这个dataDir这个目录
没有相应文件夹 所以需要我们一个一个创建
三个机子01 02 03都要创建

5.然后我们需要在每个机子下面的这个zkdata目录创建一个myid的文件

在安装过程中zk启动不起来就是因为没有创建myid文件
内容上面文件最后三句话的Server编号
server.1
server.2
server.3

后面这个数字 01就写1
02 就写2
03就写3
例如hadoop03的myid
在这里插入图片描述
6.现在我们可以使用zkServer.sh start命令启动了

注意需要前面改过名字zoo.cfg这个名字 不然没法使用 没改的话需要在命令后面加上路径 ./conf/zoo/cfg

系统默认识别这个zoo.cfg

hadoop的ha安装配置

https://blog.csdn.net/C_time/article/details/90488535

具体步骤地址

namenode弄两个
jouranlnode奇数个

现在开始弄了

第一步 如果你开了集群 先停止掉 stop-all.sh
然后要备份一下 万一以后有什么需要用到普通集群了 所以需要备份

mv /usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak

(这里使用了mv 直接移动了 改了名字 做成了备份 然后吧
重新解压hadoop安装包 重新安装了
)记住是三个机子的hadoop都要移动备份

(这里使用了mv 直接移动了 改了名字 做成了备份 然后吧
重新解压hadoop安装包 重新安装了
)记住是三个机子的hadoop都要移动备份

第二步 然后重新解压在home下的hadoop安装包(在hadoop01下进行)

tar -zxvf /home/hadoop-2.7.1.tar.gz -C /usr/local/

总共配置4个文件

[①先修改hadoop-env.sh]

查找jdk目录修改
/# The java implementation to use.
export JAVA_HOME=/usr/local/jdk1.8.0_181/
在这里插入图片描述

②core-site.xml

<!--配置hdfs文件系统的命名空间-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ali</value>
</property>
<!--配置操作hdfs的缓存大小-->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!--配置临时数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hahadoopdata/tmp</value>
</property>
<!-- 指定zk的集群地址 用来协调namenode的服务 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

以前配hdfs不是写的hadoop01吗 这里写qf是因为到时候01 02 不一定用的哪一个 所以写一个虚拟的ali名

③hdfs-site.xml

	<name>dfs.replication</name>
	<value>3</value>
	</property>
	<!--块大小_hadoop2_128M_hadoop1_64M_hadoop3.0_256M-->
	<property>
	<name>dfs.block.size</name>
	<value>134217728</value>
	</property>
	<!--hdfs的元数据存储位置-->
	<property>
	<name>dfs.namenode.name.dir</name>
	<value>/home/hahadoopdata/dfs/name</value>
	</property>
	<!--hdfs的数据存储位置-->
	<property>
	<name>dfs.datanode.data.dir</name>
	<value>/home/hahadoopdata/dfs/data</value>
	</property>


	<!--指定hdfs的虚拟服务名-->
	<property>
	  <name>dfs.nameservices</name>
	  <value>ali</value>
	</property>
	<!--指定hdfs的虚拟服务名下的namenode的名字-->
	<property>
	  <name>dfs.ha.namenodes.ali</name>
	  <value>nn1,nn2</value>
	</property>
	<!--指定namenode的rpc内部通信地址-->
	<property>
	  <name>dfs.namenode.rpc-address.ali.nn1</name>
	  <value>hadoop01:8020</value>
	</property>
	<property>
	  <name>dfs.namenode.rpc-address.ali.nn2</name>
	  <value>hadoop02:8020</value>
	</property>
	<!--指定namenode的web ui界面地址-->
	<property>
	  <name>dfs.namenode.http-address.ali.nn1</name>
	  <value>hadoop01:50070</value>
	</property>
	<property>
	  <name>dfs.namenode.http-address.ali.nn2</name>
	  <value>hadoop02:50070</value>
	</property>
	<!--指定jouranlnode数据共享目录 namenode存放元数据信息的Linux本地地址 这个目录不需要我们自己创建-->
	<property>
	  <name>dfs.namenode.shared.edits.dir</name>
	  <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/ali</value>
	</property>
	<!--指定jouranlnode本地数据共享目录-->
	<property>
	  <name>dfs.journalnode.edits.dir</name>
	  <value>/home/hahadoopdata/jouranl/data</value>
	</property>
	<!-- 开启namenode失败进行自动切换 -->
	 <property>
	   <name>dfs.ha.automatic-failover.enabled</name>
	   <value>true</value>
	 </property>
	<!--指定namenode失败进行自动切换的主类 datanode存放用户提交的大文件的本地Linux地址 这个目录不需要我们自己创建-->
	<property>
	  <name>dfs.client.failover.proxy.provider.ali</name>
	  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>

	<!--防止多个namenode同时active(脑裂)的方式 采用某种方式杀死其中一个-->
	<property>
	  <name>dfs.ha.fencing.methods</name>
	  <value>sshfence</value>
	</property>
	<property>
	  <name>dfs.ha.fencing.ssh.private-key-files</name>
	  <value>/root/.ssh/id_rsa</value>
	</property>
	<property>
	  <name>dfs.ha.fencing.ssh.connect-timeout</name>
	  <value>30000</value>
	</property>

④slaves

添加三个主机名 哎哎哎 好像是映射的那个名字

就是文件里面写
hadoop01
hadoop02
hadoop03
在这里插入图片描述

⑤ yarn-site.xml

<?xml version="1.0"?>

<configuration>
	<!--指定MapReduce的shuffle-->
	<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
	</property>
	<!--是否启用yarn的HA-->
	<property>
	  <name>yarn.resourcemanager.ha.enabled</name>
	  <value>true</value>
	</property>
	<!--yarn的HA虚拟服务名-->
	<property>
	  <name>yarn.resourcemanager.cluster-id</name>
	  <value>aliyarn</value>
	</property>
	<!--yarn的HA虚拟服务名下的具体的rm-->
	<property>
	  <name>yarn.resourcemanager.ha.rm-ids</name>
	  <value>rm1,rm2</value>
	</property>
	<!--指定rm1的所启动的主机-->
	<property>
	  <name>yarn.resourcemanager.hostname.rm1</name>
	  <value>hadoop01</value>
	</property>
	<!--指定rm2的所启动的主机-->
	<property>
	  <name>yarn.resourcemanager.hostname.rm2</name>
	  <value>hadoop02</value>
	</property>
	<!--rm1的web ui的通信地址-->
	<property>
	  <name>yarn.resourcemanager.webapp.address.rm1</name>
	  <value>hadoop01:8088</value>
	</property>
	<!---->
	<property>
	  <name>yarn.resourcemanager.webapp.address.rm2</name>
	  <value>hadoop02:8088</value>
	</property>
	<!---->
	<property>
	  <name>yarn.resourcemanager.zk-address</name>
	  <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property>
</configuration>

mapred-site.xml

<configuration>
	<!--指定MapReduce的运行框架-->
	<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
	<final>true</final>
	</property>
	<!--历史服务的通信地址-->
	<property>
	<name>mapreduce.jobhistory.address</name>
	<value>hadoop01:10020</value>
	</property>
	<!--历史服务的web ui地址-->
	<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>hadoop01:19888</value>
	</property>
</configuration>

这样ha就配置完成(hadoop01)的
然后我们检查一下再说 配置文件很容易出问题 不是名字写错就是少个点

感觉没啥问题 保存退出wq

分发 到02 03的机子上

scp -r ../hadoop-2.7.1 hadoop02:/usr/local/

scp -r ../hadoop-2.7.1 hadoop03:/usr/local/

Zookeeper问题 要是启动不起来 如果是下面的问题 可以看这个
Zookeeper集群查看状态失败 Error contacting service. It is probably not running.
修改三台机子这个
这是在03机子上的配置
vi /usr/local/zookeeper-3.4.7/conf/zoo.cfg

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/zkdata/
clientPort=2181
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=0.0.0.0:2888:3888

一定要创建zkdata的myid

注意:在进行下面的步骤之前 要确定

1.Zookeeper安装了 配置文件zoo.cfg弄了 而且

而且目录zkdata下面应该被我们创建了myid

2.hadoop安装了 那么多 配置文件都配置好了
3.环境变量 zk的hadoop的bin的sbin的 java的都配置了

如果之前配置了没有ha的全分布式的东西 且使用过 肯定产生了一些文件 把现在配置文件下面的路径的东西删除

https://blog.csdn.net/C_time/article/details/100123509 看这个 不清楚的话 步骤还按下面的来

现在我们按照顺序执行 启动

对了 环境变量搞完一定要source 一下 更新一下配置文件
source /etc/profile
在这里插入图片描述
具体带截图步骤可以 https://blog.csdn.net/C_time/article/details/90488535 看这个 在后半部分 有点乱
本篇博客简略一些 不带大量截图了

①先启动zk zkServer.sh 三台都要启动

然后jps命令查看服务是否启动 QuorumPeerMain
启动完Zookeeper 必须使用zkServer.sh status挨个查看服务 看看有没有leader或者follower 没有就是有错误的 可以看看
Zookeeper集群查看状态失败 Error contacting service. It is probably not running.

②启动journalnode服务

这个服务使用使用start-all.sh不能启动 需要单独启动

hadoop-daemons.sh start journalnode

③挑选01 02 任意一台格式化 然后启动namenode

这里我们选01

hdfs namenode -format

格式化后会创建 配置文件配置的目录/home/hahadoopdata/dfs/name 而且下面是有东西的 可以进去看看有没有
没有可能失败了 配置文件问题 一般是

④然后在01单独启动namenode

在01输入命令

hadoop-daemon.sh start namenode

⑤ 02在另外一台namenode的机子上拉取元数据 (也可以使用复制 那个name文件夹)

即在02上
注意在执行命令前 02下是没有刚刚01生成的那个目录的就是name目录(具体路径就是配置文件配置的那个)

hdfs namenode -bootstrapStandby

执行完成之后我们再看看 有了 这就代表拉取元数据成功

⑥ 01 格式化zkfc

我们在02下登录 zkCli.sh
然后ls / 结果发现还有别的(以前用过Zookeeper 新的只有一个节点) 我们先删掉 使用 rmr 命令 只留下zookeeper这一个根节点就行
然后我们在01下 格式化

hdfs zkfc -formatZK

执行后再在02那个界面已经登录zk的地方 ls / 发现多了一个ha-hadoop节点 该节点下面还有ali这个节点

这样就可以了

在01或02执行start-all启动整个集群

start-all.sh

01 02 有namenode
01 02 03有datanode journalnode
在这里插入图片描述

启动MapReduce任务的历史记录 这个需要单独启动

mr-jobhistory-daemon.sh start historyserver

这样就好了

测试

1.上传文件
第一个是本地文件路径 自己找一个 另外一个上传到hdfs根目录下

hdfs dfs -put /home/1.txt  /

2.查看命令 可以看到刚刚上传的文件

hdfs dfs -ls /

3.192.168.37.111:50070 前边是01或者02的映射的ip地址 后边是50070端口
可以登录web ui界面 然后换成112 再看看 一个是active 一个是standby的状态

这两个测试完没问题 一般就没问题了

如果出了问题: 别急

不外乎几个原因:
1.配置文件的问题
这个出了问题好难找 但是还要找 可能是名字写错 或者路径写错
2.虚拟机防火墙要关闭
3.虚拟机映射三台机子都要弄好
4.出了错误一定要好好看是什么错误 一定要学会看日志
日志文件在哪里看我们的配置文件 没配置的就在默认的地方 一般在安装目录logs下 去找找看

其他

1.要在浏览器输入 hadoop01:50070这样的 不输入ip地址就能访问 需要配置Windows的hosts文件 具体方法百度
然后在windows加hosts映射
2.以后写Java API需要在Windows配置hadoop的环境变量和安装hadoop的文件 具体方法百度
我就提个醒 哎 都没人跟我说! 气

文章肯定有不对的地方 如果找到了请指出,谢谢

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值