hadoop集群HA高可用搭建 HA集群的架构图 hadoop 2.X介绍 xftp和xshell介绍: 准备工作: xshell连接上四台虚拟机,接下来的命令都在xshell中进行。 现在就可以动手开始搭建啦~~ 在node01上用rpm装jdk,命令如下: 运行图如下: 在node02、03、04分别安装jdk,命令如下: 在node01上cd /etc,在此目录下把profile文件分发到node02、03、04上。 利用Xshell全部会话栏, (这里安装的是个绿色版,解压就能用) 然后到/opt/nj目录下去看一下是否解压好了 其中sbin这个文件夹很重要,放的是系统级别的一些可执行脚本 注:以上路径的etc可不是根目录下的etc 格式化hdfs(只能格式化一次,再次启动集群不要执行,否则clusterID变了) 接下来启动集群 A.vi hdfs-site.xml 增加以下property B.vi core-site.xml C.vi slaves D.安装hadoop 将hdfs-site.xml和core-site.xml分发到node02、03、04 这里本人用到的zookeeper版本为zookeeper-3.4.6 在node02上用以下命令操作,装在node02,03,04 c.把zookeeper分发到其他节点 并用 d.给每台机子创建刚配置文件里的路径 对node02来说: 对node03来说: 对node04来说: e.在/etc/profile里面配置 f.然后在把/etc/profile分发到其他node03、node04 在node02、03、04里 命令: 查看HOSTNAME是否正确 查看IP映射是否正确 NN node01免秘钥处理命令: 过程如下图: 在node01上分别 node01与node02间互相免密钥: node01可免密钥登录node02,那现需node02上能免密钥登node01,所以 验证一下 xshell 中选择全部会话输入: 在01、02、03三台机子上分别把journalnode启动起来 用 随意挑一台namenode上执行 我们要给另一台namenode同步一下数据,node02上进行以下命令 在node01上启动hdfs集群 测试一下,如果你像以下结果图一样,node01active状态,node02为standby状态,即正确。 接下来就可以关闭集群了,命令: 把mapred-site.xml.template留个备份,并且改下名字 rm1,rm2为node03和node04 把mapred-site.xml和yarn-site.xml 分发到node02、03、04 由于node03和node04都是resourcemanager,所以它俩应该相互免密钥 node03上免密钥登录node04: 都成功后,continue: a.启动zookeeper,全部会话zkServer.sh start 在浏览器访问node03:8088,查看resourcemanager管理的内容 a. 出现如下红色圈内部分语句,就表示你快成功了!👍 f.查看运行结果 运行结果: g、配置完成,最后关闭集群: 将下面三个文件夹放到一个usr文件夹里,把usr放到一个你知道的地方。 在eclipse里导入自己建一个包库
❀❀❀❀❀搭建前的简单介绍❀❀❀❀❀
主机配置环境如下表:
Hadoop HA原理:
在一典型的HA集群中,每个NameNode是一台独立的服务器。在任一时刻,只有一个NameNode处于active状态,另一个处于standby状态。其中,active状态的NameNode负责所有的客户端操作,standby状态的NameNode处于从属地位,维护着数据状态,随时准备切换(两种切换方式,选择手动切换和自动切换)。手动切换是通过命令实现主备之间的切换,可以用HDFS升级等场合,自动切换方案基于Zookeeper。两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。
将四台机子node01,node02,node03,node04,按如下HA安装方案图进行集群规划。
HA安装方案图
*表示虚拟机要配置该角色
Hadoop 2.x由HDFS、MapReduce和YARN三个分支构成;
HDFS:NN Federation(联邦)、HA;
2.X:只支持2个节点HA,3.0实现了一主多从
MapReduce:运行在YARN上的MR;
离线计算,基于磁盘I/O计算
YARN:资源管理系统
作用:
a.解决HDFS 1.0中单点故障和内存受限问题。
b.解决单点故障
HDFS HA:通过主备NameNode解决
如果主NameNode发生故障,则切换到备 NameNode上
c.解决内存受限问题
HDFS Federation(联邦)
水平扩展,支持多个NameNode;
(1)每个NameNode分管一部分目录;
(2)所有NameNode共享所有DataNode存储资源
xftp 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。
xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。
本人安装了xshell5.0和Xftp-4.0。在搭建过程中,使用xshell连接4台虚拟机,进行命令操作,这样十分方便,免去了鼠标在windows和linux之间来回切换的不便性。
xftp传输文件页面如下(左右两边文件可互传):
开启node01,node02,node03,node04四台虚拟机,4台虚拟机之间可以互相访问(可ping通),root用户登录。
开启虚拟机出现虚拟机繁忙问题解决办法:
当你启动虚拟机时,虚拟机卡住或者关不掉虚拟机的情况,可以试试重启一下你的计算机,如果还是无法解决的话,接下来可以win+R,输入msconfig命令,重新启动一下VMware相关的五项服务。
一、搭建集群
1、软件安装
1.1 安装jdk
-rpm -i jdk-7u67-linux-x64.rpm -whereis java -vi + /etc/profile export JAVA_HOME=/usr/bin/java export PATH=$PATH:$JAVA_HOME/bin -source /etc/profile
👍提示:如果出现 -bash: jps: command not found
改:export JAVA_HOME=/usr/bin/java
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin
修改后jps出来如下图所示,则结果正常
分发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`
-rpm -i jdk-7u67-linux-x64.rpm
scp profile node02:`pwd`
source /etc/profile
利用Xshell全部会话栏,jps
,看04、05、06这三台机子的jdk是否装好。04,05,06都像下面一样的结果即正确。
1.2 安装hadoop2.6.5
1.2.1 在node01上安装hadoop
`tar xf hadoop-2.6.5.tar.gz -C /opt/nj` (注:-C的C 是大写)
cd /opt/nj/hadoop-2.6.5
修改hadoop配置文件信息cd /opt/nj/hadoop-2.6.5/etc/hadoop
给这三个文件里的JAVA_HOME都改成绝对路径/usr/java/jdk1.7.0_67
修改hadoop配置文件信息
配置命令 vi core-site.xml
结果图如下:
配置命令 vi hdfs-site.xml
结果图如下:
配置slaves文件(localhost改为node01 )
当像运行结果图中显示successfully,即成功
(之前/var/nj/hadoop/pseudo这个文件不存在,格式化后就存在了,要记得检查一下看存在没)
start-dfs.sh
,并用jps验证下都有哪些进程启动起来了。
在浏览器里打开node01:50070(☺别用360浏览器哦!推荐firefox),如下图:
try
创建目录:hdfs dfs -mkdir -p /user/root
更新网页,可以在utilities下的browse directory中发现创建成功的目录。
上传文件命令: hdfs dfs -put a.txt /user/root
🎨hadoop的log查法:
cd到hadoop-2.6.5(我用的Hadoop版本)
ll查看
可以进一步查看logs里面的东西:
完成后关闭集群
1.2.2 修改namenode的一些配置信息,分发到node02、03、04
去掉snn的配置 <property> <name>dfs.namenode.secondary.http-address</name> <value>node01:50090</value> </property>
<property> <name>dfs.replication</name> <value>1</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>node01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node02:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node01:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>node02:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/nj/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>
增加以下property<!– 集群名称mycluster--> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!– zookeeper布署的位置--> <property> <name>ha.zookeeper.quorum</name> <value>node02:2181,node03:2181,node04:2181</value> </property>
增加以下内容node02 node03 node04
cd /opt ,将其下的nj目录分发到node02、03、04scp –r nj/ node02:`pwd` scp –r nj/ node03:`pwd` scp –r nj/ node04:`pwd`
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`
1.3 安装zookeeper
a.解压安装zookeepertar xf zookeeper-3.4.6.tar.gz -C /opt/nj
ll
看看也没有software,没有,创建一个目录mkdir software
b.修改zookeeper的配置文件cd /opt/nj/zookeeper-3.4.6/conf
ll
看看也没有zoo_sample.cfg,给zoo_sample.cfg改名cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
改 dataDir=/var/nj/zk
并在末尾追加
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
其中2888主从通信端口,3888是当主挂断后进行选举机制的端口cd /opt/nj scp -r zookeeper-3.4.6/ node03:`pwd` scp -r zookeeper-3.4.6/ node04:`pwd`
ll /opt/nj
检查下看分发成功没
存在zookeeper-3.4.6即为成功mkdir -p /var/nj/zk
echo 1 > /var/nj/zk/myid cat /var/nj/zk/myid
echo 2 > /var/nj/zk/myid cat /var/nj/zk/myid
echo 3 > /var/nj/zk/myid cat /var/nj/zk/myid
export ZOOKEEPER_HOME=/opt/nj/zookeeper-3.4.6 export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
scp /etc/profile node03:/etc scp /etc/profile node04:/etc
source /etc/profie
,☆这步千万别忘
验证source这句是否完成,输入zkCli.s
,按Tab可以把名字补全zkCli.sh 2、 关闭防火墙
service iptables stop chkconfig iptables off
3、 同步所有服务器的时间
date
命令查看机子当前的时间。
时间不能差太大,否则集群启动后某些进程跑不起来。
若时间不同步,怎么办?
A. yum进行时间同步器的安装
yum -y install ntp
B. 执行同步命令
ntpdate time1.aliyun.com
和阿里云服务器时间同步 4、配置文件检查
cat /etc/sysconfig/network
cat /etc/hosts
若不正确,可以改文件,也可以把node01上的用scp分发过去。
cat /etc/sysconfig/selinux
里是否SELINUX=disabled
service iptables status
查看防火墙是否关闭5、免秘钥设置
5.1 NN与其他三台机子的免秘钥设置
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh localhost
验证 (别忘了exit)
ssh node01
验证(别忘了exit)
把node01的公钥发给其他三台机子scp id_dsa.pub node02:`pwd`/node01.pub scp id_dsa.pub node03:`pwd`/node01.pub scp id_dsa.pub node04:`pwd`/node01.pub
ssh node02 ; ssh node03 ; ssh node04
,看是否能免密钥登录,每次ssh都别忘了exit !!!
在node04的.ssh目录下看是否有node01.pub
如果有,那就追加到authorized_keys
并且在node01上ssh node02
看是否免密钥了,记得exit
给node03、04都追加一下node01.pub,也就是在node03、04的.ssh目录下执行cat node01.pub >> authorized_keys
5.2 两个NN间互相免密钥
在node02上:ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys ssh localhost
分发到node01上:scp id_dsa.pub node03:
pwd/node04.pub
在node01的.ssh目录下,cat node02.pub >> authorized_keys
,
在node02上ssh node03
验证一下可否免密钥登录6、启动zookeeper
zkServer.sh start
接着用命令zkServer.sh status
查看每个zookeeper节点的状态
注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改成绝对路径。7、启动journalnode
hadoop-daemon.sh start journalnode
jps
检查下进程启起来了没,出现journalnode进程即为成功!8、格式化任一namenode
hdfs namenode –format
这里我在node01上进行格式化。
另一台namenode不用执行,否则clusterID变了,找不到集群了。
然后,启动刚刚格式化的那台namenodehadoop-daemon.sh start namenode
9、给另一namenode同步数据
hdfs namenode -bootstrapStandby
10、格式化zkfc
hdfs zkfc -formatZK
在node02上执行zkCli.sh打开zookeeper客户端 ls /
看hadoop-ha是否打开
11、启动hdfs集群
start-dfs.sh
注意:如果那个节点没起来到hadoop目录下去看那个node的日志文件log
然后全部会话jps看一下4台机子,都起来些什么进程,像下面这些就表示你成功啦!加油o( ̄▽ ̄)o
12、用浏览器访问node01:50070和node02:50070
stop-dfs.sh
关闭zookeeper命令:zkServer.sh stop
👍注意:下一次启动hdfs集群的时候不需要用hadoop-daemon.sh start journalnode命令启动journalnode,
只要start-dfs.sh
就可以了。我们之前启动journalnode是为了同步两个namenode之间的信息。13、为MapReduce做准备
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<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>
显示100%即分发成功
在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上免密钥登录node03:
在node04的.ssh目录下生成密钥
cd .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 node03:
pwd/node04.pub
在node03的.ssh目录下,追加node04.pub
cat node04.pub >> authorized_keys
在node04上ssh node03
,看是否免密钥14、启动yarn、resourcemanager
b.在node01上启动hdfs,start-dfs.sh
c.在node01上启动yarn,start-yarn.sh
d.在node03、04上分别启动resourcemanager,
yarn-daemon.sh start resourcemanager
e.全部会话jps,看进程全不全
Active Nodes值为3即正确二、测试
跑一个wordcount及运行结果
cd /opt/nj/hadoop-2.6.5/share/hadoop/mapreduce
b.在hdfs里建立输入目录和输出目录
hdfs dfs -mkdir -p /data/in
hdfs dfs -mkdir -p /data/out
c.将要统计数据的文件上传到输入目录并查看
hdfs dfs -put ~/500miles.txt /data/in
hdfs dfs -ls /data/in
d. 运行wordcount(注意:此时的/data/out必须是空目录hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result
e.打开网址node03:8088,查看
SUCCEEDED成功了!👍
命令:hdfs dfs -ls /data/out/result hdfs dfs -cat /data/out/result/part-r-00000
至此,hadoop高可用集群搭建完毕。
node01: stop-dfs.sh
node01: stop-yarn.sh (停止nodemanager)
node03,node04: yarn-daemon.sh stop resourcemanager
Node02、03、04:zkServer.sh stop三、在Windows下配置hadoop的环境
“此电脑”右键-属性-高级系统设置
更改环境变量,增加HADOOP_HOME
并且给path后追加HADOOP_HOME的bin目录
然后再新建一个变量HADOOP_USER_NAME
把hadoop.dll拷贝到以下路径
from:
to:
安装ecipse-mars,此版本的eclipse带插件,可以可视化的看到hadoop的一些东西,比较方便
如果eclipse界面下方没有小象图标,则做后续三步调出
在eclipse里把hadoop相关信息填一下
新建一个hadoop localtion
设置
起一个Location name,不要勾选Use M/R Master host
Host:查一下哪个namenode是active就填哪个(我是node01)
这样在eclipse左侧列表的DFS location里
新建一个目录,对应hdfs里也就建好了,可以用浏览器查看一下。
把jar包导入刚建的包库
把刚建的包库引入到project里
把JUnit包库引入到project里
利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录
OK,大功告成!!!大家敲命令的时候一定要仔仔细细哦,可以避免很多不必要的错误~
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算