高可用安装

Hadoop高可用安装

在安装了伪分布式hadoop前提下,实现高可用安装,这里我的集群分别是node02、node03、node04、node05。

以下是四台虚拟机上的Hadoop安装方案:

NN-1NN-2DNZKZKFCJNRSNM
node02***
node03******
node04*****
node05****

由于已经实现了伪分布式安装,node02上已经完成了hadoop的安装和jdk的配置。

1. 首先完成其他三台的jdk配置。

将node02上的位于/root 下的jdk分发到另外三台机子

scp jdk-7u67-linux-x64.rpm node03:pwd

scp jdk-7u67-linux-x64.rpm node04:pwd

scp jdk-7u67-linux-x64.rpm node05:pwd

检查是否发送成功,在xshell的全部会话下进入root 输入ll查看
在这里插入图片描述
分别在node03、node04、node05上执行rpm安装命令

rpm -i jdk-7u67-linux-x64.rpm

在node02上,进入/etc目录

cd /etc

把在此目录下把profile文件分发到node03、node04、node05上。

scp profile node03:`pwd`

scp profile node04:`pwd`

scp profile node06:`pwd`

发好后再去这三台机子改目录文件下检查一下是否存在

在全部会话栏

source /etc/profile

完成后再全部会话栏

jps

看node03、node04、node05这三台机子的jdk是否装好

2. 检查虚拟机时间同步

查看机子当前的时间,可以输入date查看

为了保证时间准确同步,利用yum进行时间同步器的安装

yum -y install ntp

执行同步命令,和阿里云服务器时间同步

ntpdate time1.aliyun.com

这时候再输入date确认一下
在这里插入图片描述

3.   检查网络配置

查看HOSTNAME是否正确

cat /etc/sysconfig/network
在这里插入图片描述
查看IP映射是否正确

cat /etc/hosts
在这里插入图片描述
cat /etc/sysconfig/selinux

确认SELINUX为disabled

service iptables status查看防火墙是否关闭

4.   为虚拟机设置免密钥

在伪分布式安装中已经为node02生成了密钥文件

在node02在家目录下

ll –a

查看有无.ssh文件,如果没有就

ssh loalhost

!!这步命令后一定要记得输入

exit

进入.ssh文件

cd .ssh

保险起见,输入ll 查看

把node02的公钥发给其他三台机子,使得node02能免密钥登录其他三台

scp id_dsa.pub node03:`pwd`/node02.pub

scp id_dsa.pub node03:`pwd`/node02.pub

scp id_dsa.pub node03:`pwd`/node02.pub

分别到03、04、05上将node02的密钥追加到authorized_keys

cat node02.pub >> authorized_keys

之后在node02上分别ssh node03ssh node04ssh node05,检查免密钥是否成功,每次不要忘记exit

由于node03也是namenode,所以node03也需要免密钥登录node02

在node03上生成自己的密钥

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

将自己的密钥追加到authorized_keys

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

ssh localhost验证一下

把自己的密钥分发到node02上:

scp id_dsa.pub node02:`pwd`/node03.pub

来到node02,将收到的node03密钥追加到authorized_keys

cat node03.pub >> authorized_keys

回到node03 输入ssh node02是否能免密钥登录node02

5.   修改namenode配置信息

进入/opt/yzs/hadoop-2.6.5/etc/hadoop的hdfs-sitex.xml文件中,将中的代码修改为如下内容

<configuration>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
	<property>
		 <name>dfs.nameservices</name>
		 <value>mycluster</value>
	</property>
	<property>
		 <name>dfs.ha.namenodes.mycluster</name>
		 <value>nn1,nn2</value>
	</property>
	<property>
		 <name>dfs.namenode.rpc-address.mycluster.nn1</name>
		 <value>node02:8020</value>
	</property>
	<property>
		 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
		 <value>node03:8020</value>
	</property>
	<property>
		 <name>dfs.namenode.http-address.mycluster.nn1</name>
		 <value>node02:50070</value>
	</property>
	<property>
		 <name>dfs.namenode.http-address.mycluster.nn2</name>
		 <value>node03:50070</value>
	</property>
	<property>
		 <name>dfs.namenode.shared.edits.dir</name>
		 <value>qjournal://node02:8485;node03:8485;node04:8485/mycluster</value>
	</property>
	<property>
		 <name>dfs.journalnode.edits.dir</name>
		 <value>/var/yzs/hadoop/ha/jn</value>
	</property>
	<property>
		<name>dfs.client.failover.proxy.provider.mycluster</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
	<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_dsa</value>
	</property>
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
</configuration>

同样 将core-site.xml修改为如下内容

<configuration>
	<property>
	  <name>fs.defaultFS</name>
	  <value>hdfs://mycluster</value>
	</property>
	<property>
	   <name>ha.zookeeper.quorum</name>
	   <value>node03:2181,node04:2181,node05:2181</value>
	</property>
</configuration>

这里由于xshell并不是专门用来编辑代码的,很容易出错而发现不了,所以我推荐用xftp将两个文件拖到window桌面上,利用sublime等编辑器修改后再放回虚拟机中。

还是在这个目录下,修改slaves文件
删去原有内容,加入当前datenode节点虚拟机名称
在这里插入图片描述

6. 安装hadoop

vi zoo.cfg
将dataDir后面的改为/var/yzs/zk

在文件最后加上
server.1=node03:2888:3888
server.2=node04:2888:3888
server.3=node05:2888:3888
在这里插入图片描述
完成后esc :wq退出

7.   安装zookeeper

目录转到/opt/yzs ll可以看到文件下的zookeeper-3.4.6
在这里插入图片描述
把zookeeper分发到其他节点
scp -r zookeeper-3.4.6/ node04:`pwd`
scp -r zookeeper-3.4.6/ node05:`pwd`
这时候是需要密钥的 输入密码hadoop

到node04 node05检查一下
在这里插入图片描述
在这里插入图片描述
在全部会话里,给node03 node04 node05创建刚配置文件里的路径
mkdir -p /var/ldy/zk

给每台机子配置其编号(必须是阿拉伯数字)
对node03来说:
echo 1 > /var/ldy/zk/myid
对node04来说:
echo 2 > /var/ldy/zk/myid
对node05来说:
echo 3 > /var/ldy/zk/myid

在创建echo后再全部会话查看检查每个机子的编号
在这里插入图片描述

在node03 里输入
vi /etc/profile

添加
export ZOOKEEPER_HOME=/opt/yzs/zookeeper-3.4.6

修改
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
在这里插入图片描述

再三检查是否正确!!!

退出esc保存:wq

然后在把/etc/profile分发到其他node04、node05
scp /etc/profile node04:/etc
scp /etc/profile node05:/etc
这里也要输入密钥
在这里插入图片描述
再到node04 node05检查一下有没有这个文件

在全部会话里
source /etc/profile
验证source这句是否完成
输入zkCli.s,按Tab可以把名字补全zkCli.sh

启动zookeeper
全部会话:zkServer.sh start
接着用zkServer.sh status查看每个zookeeper节点的状态
在这里插入图片描述

但发现没有启动
可能是profile路径写错了
尝试把路径写成绝对路径,也错了

中途去吃了个饭,不小心有又强制关了VMware,结果node03不能启动。
在这里插入图片描述

https://www.cnblogs.com/shenzhenhuaya/p/sfaegtrg.html

通过这篇文章解决了

上网搜了一下,最终以通过禁用启动项的方式结束了旧的进程占用,但是当我再次打开时

在这里插入图片描述
😦
通过这篇文章解决了以上问题

https://blog.csdn.net/baigoocn/article/details/42267261

解决后,虚拟机能正常运行,但是由于重新启动,之前配置的ip不能用了,xshell不能连上虚拟机。

于是我尝试了还原了VMware的虚拟网络编辑器
在这里插入图片描述
重新给四台机子设置ip

最后的最后,终于发现是JAVA_HOME在之前就写错了!
马上修改 运行成功

8.   启动journalnode

在02、03、04三台机子上分别把journalnode启动起来
hadoop-daemon.sh start journalnode

用jps检查下进程启起来了没
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现都没启动

进到
cd /opt/yzs/hadoop-2.6.5/logs

查看log文件
tail -100 hadoop-root-journalnode-node02.log
在这里插入图片描述
原来是hdfs-site.xml 里configuration打错了

每天提醒自己不要打错字!!!

修改四台机子的hdfs-site.xml
重新启动前三台
hadoop-daemon.sh start journalnode

jps一下看看进程
在这里插入图片描述
成功!!

9.   格式化namenode

选择编号最小的node格式化
hdfs namenode –format

然后,启动刚刚格式化的那太namenode
hadoop-daemon.sh start namenode
在这里插入图片描述
Namenode没有起来

查看log文件 发现是ip没对上 因为之前ip修改过
hadoop namenode -format

重新启动
hdfs namenode –format
在这里插入图片描述
成功

要给另一台namenode,也就是node03同步一下数据
hdfs zkfc -formatZK

这时候双击node03 再打开一个窗口
zkCli.sh

查看hadoop-ha是否打开
ls /
在这里插入图片描述
在node02启动hdfs集群
start-dfs.sh
在这里插入图片描述
然后全部会话jps看一下都起来些什么进程
在这里插入图片描述
Node03的Namenode没有启动

去log里看看
cd /opt/yzs/hadoop-2.6.5/logs

打开log
tail -100 hadoop-root-namenode-node03.log

但是查了半天没发现什么错误

重新打开集群和zookeeper
发现可以了!

hadoop-daemon.shstart journalnode
在网页上输入node02:50070 node03:50070
在这里插入图片描述
成功!

之后发现,上面出现第二台机子没有namenode的问题因为在运行第一台namenode后, 没有运行同步数据
hdfs namenode –bootstrapStandby
至此集群启动问题全部解决

10.  为MapReduce做准备

进入如下地址
cd /opt/yzs/hadoop-2.6.5/etc/hadoop/

把mapred-site.xml.template留个备份,并且改下名字
cp mapred-site.xml.template mapred-site.xml

在mapred-site.xml里添加如下property

<property><name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

在这里插入图片描述

在yarn-site.xml里添加如下property


```html
<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>node04</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>node05</value>
</property>
<property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>node03:2181,node04:2181,node05:2181</value>
</property>

把mapred-site.xml和yarn-site.xml 分发到node03、04、05
scp mapred-site.xml yarn-site.xml node03:`pwd`
scp mapred-site.xml yarn-site.xml node04:`pwd`
scp mapred-site.xml yarn-site.xml node05:`pwd`
在这里插入图片描述
之前设置了免密钥 所以不用输入密码

由于node05和node06都是resourcemanager,所以为它两设置免密钥

在家目录下
cd .ssh

首先是node04上免密钥登录node05:

在node04的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa

并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys

ssh localhost验证看是否需要密码,别忘了exit

将node04 的公钥分发到node05
scp id_dsa.pub node05:pwd/node04.pub

在node05的.ssh目录下,追加node04.pub
cat node04.pub >> authorized_keys

在node04上ssh node05,看是否免密钥,别忘了exit

node05上免密钥登录node04:
在node05的.ssh目录下生成密钥
ssh-keygen -t dsa -P '' -f ./id_dsa

并追加到自己authorized_keys
cat id_dsa.pub >> authorized_keys

ssh localhost验证看是否需要密码,别忘了exit

将node05的公钥分发到node04
scp id_dsa.pub node04:pwd/node05.pub

在node04的.ssh目录下,追加node05.pub
cat node05.pub >> authorized_keys

在node05上ssh node04,看是否免密钥,别忘了exit

到现在就可以启动集群了
1.启动zookeeper,全部会话zkServer.sh start
2.在node02上启动hdfs,start-dfs.sh
3.在node02上启动yarn,start-yarn.sh
4.在node04、05上分别启动resourcemanager,
yarn-daemon.sh start resourcemanager
5.全部会话jps,看进程全不全
在这里插入图片描述
发现第一台namenode没有启动

尝试重新启动
在这里插入图片描述
成功

在浏览器访问node04:8088,查看resourcemanager管理的内容
在这里插入图片描述

11.  跑一个wordcount试试

1.cd /opt/yzs/hadoop-2.6.5/share/hadoop/mapreduce

2.在hdfs里建立输入目录和输出目录
hdfs dfs -mkdir -p /data/in
hdfs dfs -mkdir -p /data/out

3.将要统计数据的文件上传到输入目录并查看
hdfs dfs -put ~/500miles.txt /data/in
hdfs dfs -ls /data/in

4.运行wordcount(注意:此时的/data/out必须是空目录
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result

发现上传文件时失败,参考了如下方法

https://blog.csdn.net/IT_NEU_Lee/article/details/82717517

这里如果因为格式化多次而了出问题
可以分别去node02,node03,node04
cd /tmp/hadoop-root/dfs/data/current/
vi VERSION
要保证node02,node03,node04的VERSION文件中的clusterID一样

我采用了简答粗暴的方法,删掉node03 04 05的/tmp/hadoop-root/dfs下的文件,重新启动集群,成功
在这里插入图片描述

关闭集群:
node02: stop-dfs.sh
node02: stop-yarn.sh (停止nodemanager)
node04,node05: yarn-daemon.sh stop resourcemanager
Node03、04、05:zkServer.sh stop

12.  在Windows下配置hadoop的环境

把hadoop压缩包解压安装
在这里插入图片描述

在右键此电脑选择属性
在这里插入图片描述

选择-高级系统设置-环境变量,添加HADOP_HOME环境变量,变量值为刚才hadoop安装路径
在这里插入图片描述

Path中添加
%HADOOP_HOME%\bin
在这里插入图片描述

添加HADOOP_USER_NAME,变量值为root
在这里插入图片描述

把haooop安装路径里的usr\hadoop-2.6.5\bin\hadoop.dll拷贝到C:\Windows\System32
在这里插入图片描述

安装ecipse-mars,此版本的eclipse带插件,可以可视化的看到hadoop的一些东西,比较方便,这个安装直接傻瓜式ok
如果eclipse界面下方没有小象图标,则做后续三步调出
在这里插入图片描述

在eclipse里把hadoop相关信息填一下
在这里插入图片描述

新建一个hadoop localtion
在这里插入图片描述

查一下哪个namenode是active就填哪个
在这里插入图片描述

这样在eclipse左侧列表的DFS location里新建一个目录,对应hdfs里也就建好了,可以用浏览器查看一下。
在这里插入图片描述
在这里插入图片描述
在eclipse里导入自己建一个包库
在这里插入图片描述

把jar包导入刚建的包库
在这里插入图片描述

把刚建的包库引入到project里
在这里插入图片描述

把JUnit包库引入到project里
在这里插入图片描述

利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MySQL中实现双活(双主)高可用性,可以结合使用MySQL的复制功能和Keepalived软件。下面是一些基本的步骤: 1. 配置MySQL复制:在两个MySQL服务器上分别启用二进制日志(binlog),并确保它们能够相互复制。详细的MySQL复制配置步骤请参考MySQL官方文档。 2. 安装Keepalived:使用适合您的操作系统的包管理工具(如apt、yum等)安装Keepalived软件。 3. 配置Keepalived:在两台服务器上创建Keepalived配置文件(通常位于/etc/keepalived/目录下),并确保它们具有相同的配置。 - 配置虚拟IP:在配置文件中指定一个虚拟IP地址,该地址将用于将客户端请求转发到当前处于活跃状态的MySQL服务器。 - 配置健康检查:指定Keepalived应如何检查MySQL服务器的健康状态,例如检查TCP端口、进程等。 - 配置故障转移:指定当主服务器出现故障时,Keepalived应如何切换到备用服务器。 4. 启动Keepalived:在两台服务器上启动Keepalived服务,并确保它们正常运行。 5. 测试双活功能:使用配置的虚拟IP地址连接到MySQL服务器,并确保在主服务器发生故障时,Keepalived能够自动将连接切换到备用服务器。 请注意,以上只是一个基本的指南,具体的配置和步骤可能会根据您的环境和需求而有所不同。在实施高可用性解决方案之前,请确保您已经充分了解MySQL复制和Keepalived的工作原理,并遵循安全最佳实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值