刚经过一个阶段的大数据学习,详细的记录了一下搭建Hadoop HA 高可用集群的全过程━(`∀´)ノ亻找bug的过程好心酸啊,但学习到新知识还是感觉好开心hhhh hadoop 1.x是由分布式计算框架MapReduce和分布式存储系统HDFS两个分支构成的。其中HDFS由一个Namenode和多个DateNode组成。只有一个Namenode,所有元数据由唯一的Namenode负责管理,可想而之,当这个NameNode挂掉时,整个集群基本也就不可用了。 Hadoop 2.x由HDFS、MapReduce和YARN三个分支构成。在 1.x 版本的基础上,提出HDFS Federation,并引入资源管理框架Yarn,负责集群资源管理和调度。HA机制也是从hadoop2.0开始,之前的版本中并没有HA机制,HDFS的HA机制通过引入双NameNode架构( NN Federation联邦),每个NameNode管理不同文件的元数据,解决了单点故障问题,实现HDFS 的高可用。 所谓HA,即高可用(7*24小时不中断服务),实现高可用最关键的是消除单点故障。hadoop-ha严格来说应该分成各个组件的HA机制——HDFS的HA、YARN的HA HDFS 的HA机制 2.x ,解决了HDFS 1.x 中 单点故障和 内存受限问题 解决单点故障: •主备NameNode(如果主NameNode发生故障,则切换到备NameNode上) –主NameNode对外提供服务,备NameNode同步主元数据,以待切换 –所有DataNode同时向两个汇报数据块信息 解决内存受限问题: •HDFS Federation(联邦) •水平扩展,支持多个NameNode; –每个NameNode分管一部分目录,把单个namenode的负载分散到多个节点中,把不同类型应用的HDFS元数据的存储和管理分派到不同的namenode中。 –所有NameNode共享所有DataNode存储资源 主NameNode和备NameNode之间的切换: •手动切换 :通过命令实现主备之间的切换。 •基于Zookeeper的自动切换 : –ZooKeeper Failover Controller:监控NameNode健康状态,部署在每个NameNode的节点上,作为一个demon进程,它会周期性的向它监控的NN发送健康探测命令,从而来确定某个NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态如果NN是健康的,zkfc就会在zookeeper中保持一个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode, 当这个NN挂掉时,这个znode将会被删除,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠。 ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active。如上就涉及到了master选举,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断那个NameNode为Active状态。 HA 架构图 配置: VMware Workstation Pro (安装好CentOS-6.5 的linux操作系统) 纯净版虚拟机(CentOS 6 64位) 通过克隆 CentOS 6 64位 虚拟机,得到四台虚拟机CentOS-node01,02,03,04 ,如下图: 接下来我们将利用VMware搭建四个节点的集群hadoop,其各个节点分布如下:(将严格按照以下安装方案) 命令: 配置情况如下: 重启网络服务命令,要出来如下图全是OK,则配置成功 ping一下百度,看下是否成功 成功则一直在加载64 bytes …的语句,按 CTRL+C停止加载 命令: 配置情况如下: 命令: 配置情况如下: 关机命令: 给CentOS-node01关机,拍摄快照,存一个非常干净的Linux版本。 走完所有的安装过程,我总结,一定要有拍摄快照这个好习惯,关键时候能起到很大的作用呢 ! 1.给CentOS-node02配置,配置过程同给CentOS-node01配置 该机子IP配置如下: 2.配置完CentOS-node02 ,两台机子互相ping一下看是否能ping通 具体操作: 在 CentOS-node01 中输入命令: 在CentOS-node02 中输入命令: 能ping通则指两台机子彼此之间可以访问 3.将余下的CentOS-node03 和CentOS-node04 都配置好 配置过程一定要仔细,不要直接复制网页命令,自己动手敲敲吧 4.使四台机子彼此之间都能访问 5.让windows和虚拟机之间也能访问 修改Windows上的hosts文件 路径 : C:/Windows/System32/drivers/etc xftp 软件 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。 直接搜索xftp安装压缩包,傻瓜式安装即可。 也可直接在xshell命令打开xftp软件,在windows和linux之间进行文件的传输。 使用rpm命令进行安装 (rpm相当于windows里的exe文件) source一下,刷新该文件。 如果出现-bash: jps: command not found
改: export JAVA_HOME=/usr/bin/java 在家目录下 , //把id_dsa.pub 追加到 ~/.ssh/authorized_keys 下 安装命令: 实现在任意目录下启动hadoop,就要在配置文件里做些修改。 配置信息如下: 当在命令行上输入 配置操作统一在下列路径下运行命令: 注:以上路径的etc可不是根目录下的etc 给这三个文件里的JAVA_HOME都改成绝对路径/usr/java/jdk1.7.0_67 配置 vi core-site.xml 配置代码如下: 配置 vi core-site.xml 配置代码如下: 配置slaves文件 只能格式化一次,再次启动集群不要执行,否则clusterID变了 用 在浏览器里打开CentOS-node01:50070(别用360浏览器!)能出现以下界面则有效 创建目录 在 user下创建root目录,在上述浏览器界面可直接查看是否创建目录成功,如下: 上传文件 停止集群命令: 1.分发jdk到另外三台机子 在CentOS-node01上输入下列命令,进行发送: 在Xshell的全部会话栏里一起 2.分别在 CentOS-node02、03、04上执行rpm安装命令 3.在node03上cd /etc,在此目录下把profile文件分发到 CentOS-node02、03、04上。 4.利用Xshell全部会话栏,刷新这个文件,修改才会生效 , 这一步不能忘记 ! 5.利用Xshell全部会话栏,jps,看04、05、06这三台机子的jdk是否装好。 时间不能差太大,否则集群启动后某些进程跑不起来。 *若时间不同步,怎么办? 1.yum进行时间同步器的安装 2.执行同步命令 仔细点,真的要细心(扶额)不然有你哭的hhh 1. 在家目录下 将CentOS-node01的公钥发给CentOS-node02的pwd下 并重命名为CentOS-node01.pub 4. 在CentOS-node02的.ssh目录下看是否有CentOS-node01.pub 5. 在CentOS-node01上ssh CentOS-node02看是否免密钥了(每次ssh一定要记得exit) 6. 同理,给其他节点发送公钥并在各个节点上把CentOS-node01的公钥追加上,并测试看ssh CentOS-node01要不要密钥 需实现两台NameNode ( CentOS-node01与CentOS-node02 ) 之间互相免密钥,我们已经实现CentOS-node01可免密钥登录CentOS-node02,那现需CentOS-node02上能免密钥登CentOS-node01,所以 1. 在CentOS-node02上: 2. 3. 分发到CentOS-node01上: 4. 在CentOS-node01的.ssh目录下, 5. 在CentOS-node02上 验证一下可否免密钥登录 由于CentOS-node03和CentOS-node04都是resourcemanager,所以它俩应该相互免密钥 CentOS-node03上免密钥登录CentOS-node04: 1.在CentOS-node03的.ssh目录下生成密钥 2.追加到自己authorized_keys 3.用 4. 将CentOS-node03的公钥分发到CentOS-node04 5.在CentOS-node04的.ssh目录下,追加CentOS-node03.pub 6. 在CentOS-node03上 ssh CentOS-node04 ,看是否免密钥 同理设置 CentOS-node04 上免密钥登录CentOS-node03,这里过程我就不赘述了,将上面03和04互相换位进行操作即可。 vi hdfs-site.xml 配置结果如下: vi core-site.xml 配置结果如下: vi slaves 为MapReduce做准备, mapreduce是在yarn运行的 把mapred-site.xml.template留个备份,并且改下名字 vi mapred-site.xml (添加参数) vi yarn-site.xml (添加参数) 改 **dataDir=/var/HXW/zk ** , 并在末尾追加 其中2888主从通信端口,3888是当主挂断后进行选举机制的端口 并用 ll /opt/HXW 检查下看分发成功没 **对CentOS-node02来说: ** **对CentOS-node03来说: ** **对CentOS-node04来说: ** 验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh 在全部会话中输入: * 注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改成绝对路径。 启动journalnode是为了使两台NameNode间完成数据同步。 下一次启动hdfs集群的时候还需要用hadoop-daemon.sh start journalnode命令启动journalnode吗? 不需要,只要start-dfs.sh就可以了。这里我们启动journalnode是为了同步两个namenode之间的信息。 在01、02、03三台机子上分别把journalnode启动起来 用 jps 检查下进程启起来了没 NameNode 要是没起来的话去 /opt/HXW/hadoop-2.6.5/logs (如下图)下查看相应的NameNode的.log文件,看哪里报错。(以后什么东西没启起来都可以到这里去查看) ( 这里需严格按步骤操作 ! !) 然后,启动刚刚格式化的那台namenode 给另一台namenode同步一下数据,用以下命令 ( 这里需严格按步骤操作 ! !) 在CentOS-node02上: 打开zookeeper客户端查看hadoop-ha是否打开 启动zookeeper,全部会话中 若zookeeper启动不成功,可能是前面一步zkfc格式化没成功,不要做太快,每一步都看清楚做仔细,回头去仔细看看报的什么错误吧 在CentOS-node01上启动集群 用浏览器访问CentOS-node01:50070和CentOS-node02:50070 如下,一个为active,一个为standby 在CentOS-node03、04上分别启动resourcemanager 看进程全不全,全部会话 关闭集群命令 关闭yarn , 停止nodemanager 在CentOS-node03,CentOS-node04上 在CentOS-node02、03、04上,关闭zookeeper命令 呼 ~ 搭建完成,去跑一个wordcount试试吧
你是真的真的真的真的真的很不错 ! 👍一、Hadoop 系统架构
1. Hadoop1.x 和Hadoop 2.x
2. HDFS 的 HA 机制
二、HA 安装方案及配置
HA安装方案
*带星的地方表示该台机子上需要安装该配置三、配置CentOS-node01
1. 配置IP:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
执行:service network restart
测试:ping www.baidu.com
2. 配置主机名
vi /etc/sysconfig/network
3. 配置hosts
vi /etc/hosts
我们是配置四台机子的集群,所以在下面添加了四台机子的信息,由上也可以看出,四台机子分别的子网IP是多少。4. 关机 拍摄快照
poweroff
四、设置机子之间的互相访问
*注意红圈,node01 为31 ;node02 为32 ;node03 为33 ;node04为 34ping CentOS-node02
ping CentOS-node01
用Notepad++ 或什么都可以,只要能打开软件对其进行修改保存
我这里是用Notepad++ 打开的文档,在最后添加和上面一样的四台机子的信息
*Notepad++修改保存时,点击保存后,该页面会刷新一下,需再次点击保存才是真的保存好了
五、xftp软件和xshell软件
xshell 软件 是一个终端模拟软件,而且是远程近程都可以。 就是模拟服务器所在的linux,在xshell中可以输入命令, 就像在服务器的linux中输入命令一样。一般用于远程 连接。在本次安装过程中我将会使用xshell连接虚拟机进行操作,免去了鼠标在windows和linux之间来回切换的不便性。
也会用到下面的xshell的全部会话框去输命令,避免重复在每个机子上都要输一次命令
六、Hadoop伪分布式安装
1. 安装jdk
rpm -i jdk-7u67-linux-x64.rpm
whereis java //查看java的存放路径
vi + /etc/profile //修改etc下的profile如下图
source /etc/profile
export PATH=$PATH:/usr/java/jdk1.7.0_67/bin2. 免密钥(自身)
ll -a
看有无**.ssh**文件
若无,则先 ssh localhost
一下 (每次ssh登录 ,都别忘了要exit)ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa //生成密钥
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh localhost //验证是否仍需要密码登录 ssh CentOS-node01
3. 安装Hadoop
tar xf hadoop-2.6.5.tar.gz -C /opt/HXW //解压放在opt下以名字大写字母命名的文件夹中 cd /opt/HXW/hadoop-2.6.5 //到/opt/HXW目录下去看一下是否解压好了
vi + /etc/profile
export JAVA_HOME=/usr/bin/java export HADOOP_HOME=/opt/HXW/hadoop-2.6.5 export PATH=$PATH:/usr/java/jdk1.7.0_67/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
hd
按Tab键可以自动补全为hdfs
输入start-d
按Tab键可以自动补全为start-dfs.
就表示配置成功了4. 修改hadoop配置文件信息
cd /opt/HXW/hadoop-2.6.5/etc/hadoop
vi hadoop-env.sh vi mapred-env.sh vi yarn-env.sh
<configuration> <property> <name>fs.defaultFS</name> //配置主节点信息 <value>hdfs://mycluster</value> </property> <property> <name>hadoop.tmp.dir</name> //将NN的元数据信息和DN的数据文件默认存放的临时tmp文件的路径修改掉,更安全 <value>>/var/HXW/hadoop/pseudo</value> </property> </configuration>
<property> <name>dfs.replication</name> //Block的副本数,默认为3 <value>1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>CentOS-node01:50090</value> //配secondary NameNode </property>
vi slaves CentOS-node01
5. 格式化 hdfs
hdfs namenode -format
之前/var/HXW/hadoop/pseudo这个文件不存在,格式化后就存在了,检查一下看存在没,可以进入到这个文件里去了
6.启动集群
start-dfs.sh
jps
去查看都有哪些集群被启动了
hdfs dfs -mkdir -p /user/root
hdfs dfs -put a.txt /user/root
7. 停止集群
stop-dfs.sh
七、配置另外三台机子
7.1 安装jdk
scp jdk-7u67-linux-x64.rpm CentOS-node02:`pwd` scp jdk-7u67-linux-x64.rpm CentOS-node03:`pwd` scp jdk-7u67-linux-x64.rpm CentOS-node04:`pwd`
ll
,看jdk是否发送成功。
注意:` 这一符号是数字1左边这个键rpm -i jdk-7u67-linux-x64.rpm
scp profile node04:`pwd`
source /etc/profile
7.2 同步所有服务器的时间
date //查看机子当前的时间。
yum -y install ntp
ntpdate time1.aliyun.com //和阿里云服务器时间同步
7.3 装机前的配置检查
cat /etc/sysconfig/network //查看HOSTNAME是否正确
cat /etc/hosts //查看IP映射是否正确,若不正确,进行修改
cat /etc/sysconfig/selinux //查看该selinux里是否 SELINUX=disabled
service iptables status //查看防火墙是否关闭,配置过程中是要求关闭防火墙的
7.4 免密钥(彼此之间)
7.4.1 第一台NN和其他三台机子的免密钥设置
ll –a
看下有无.ssh文件,如果没有就ssh loalhost
一下
2. cd .ssh
,到.ssh目录下,ll
查看一下
3. 把CentOS-node01的公钥发给其他三台机子scp id_dsa.pub CentOS-node02:`pwd`/CentOS-node01.pub
如果有,那就追加到authorized_keyscat CentOS-node01.pub >> authorized_keys
scp id_dsa.pub CentOS-node03:`pwd`/CentOS-node01.pub cat CentOS-node01.pub >> authorized_keys ssh CentOS-node01 exit //!!!一定要exit scp id_dsa.pub CentOS-node04:`pwd`/CentOS-node01.pub cat CentOS-node01.pub >> authorized_keys ssh CentOS-node01 exit //!!!一定要exit
7.4.2 两个NN之间互相免密钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa //生成公钥 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh localhost
验证一下scp id_dsa.pub CentOS-node01:`pwd`/CentOS-node02.pub
cat CentOS-node02.pub >> authorized_keys,
ssh CentOS-node01
7.4.3 CentOS-node03和CentOS-node04之间免密钥
ssh-keygen -t dsa -P '' -f ./id_dsa
cat id_dsa.pub >> authorized_keys
ssh localhost
验证看是否需要密码,别忘了exit! scp id_dsa.pub CentOS-node04:`pwd`/CentOS-node03.pub
cat CentOS-node03.pub >> authorized_keys
7.5 修改NameNode的一些配置信息
<configuration> <!--指定HDFS副本的数量,不能超过机器节点数--> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 为namenode集群定义一个services name --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- nameservice 包含哪些namenode,为各个namenode起名 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- 名为nn1和nn2的namenode的rpc地址和端口号,rpc用来和datanode通讯 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>CentOS-node01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>CentOS-node02:8020</value> </property> <!--名为nn1和nn2的namenode的http地址和端口号,用来和web客户端通讯 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>CentOS-node01:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>CentOS-node02:50070</value> </property> <!-- namenode间用于共享编辑日志的journal节点列表 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://CentOS-node01:8485;CentOS-node02:8485;CentOS-node03:8485/mycluster</value> </property> <!-- journalnode 上用于存放edits日志的目录 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/var/HXW/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> <!-- 一旦需要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> <!-- 指定该集群出现故障时,是否自动切换到另一台namenode --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
<configuration> <!– 集群名称mycluster--> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!– zookeeper布署的位置--> <property> <name>ha.zookeeper.quorum</name> <value>CentOS-node02:2181,CentOS-node03:2181,CentOS-node04:2181</value> </property> </configuration>
CentOS-node02 CentOS-node03 CentOS-node04
cp mapred-site.xml.template mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </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>CentOS-node03</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>CentOS-node04</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>CentOS-node02:2181,CentOS-node03:2181,CentOS-node04:2181</value> </property>
7.6 拷贝Hadoop到其他机子
scp –r HXW/ CentOS-node02:`pwd` scp –r HXW/ CentOS-node03:`pwd` scp –r HXW/ CentOS-node04:`pwd`
scp hdfs-site.xml core-site.xml CentOS-node02:`pwd` scp hdfs-site.xml core-site.xml CentOS-node03:`pwd` scp hdfs-site.xml core-site.xml CentOS-node04:`pwd`
scp mapred-site.xml yarn-site.xml CentOS-node02:`pwd` scp mapred-site.xml yarn-site.xml CentOS-node03:`pwd` scp mapred-site.xml yarn-site.xml CentOS-node04:`pwd`
八、安装zookeeper
tar xf zookeeper-3.4.6.tar.gz -C /opt/HXW
cd /opt/HXW/zookeeper-3.4.6/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
server.1=CentOS-node02:2888:3888 server.2=CentOS-node03:2888:3888 server.3=CentOS-node04:2888:3888
scp -r zookeeper-3.4.6/ CentOS-node03:`pwd` scp -r zookeeper-3.4.6/ CentOS-node04:`pwd`
mkdir -p /var/HXW/zk
echo 1 > /var/HXW/zk/myid cat /var/HXW/zk/myid
echo 2 > /var/HXW/zk/myid cat /var/HXW/zk/myid
echo 3 > /var/HXW/zk/myid cat /var/HXW/zk/myid
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
scp /etc/profile CentOS-node03:/etc scp /etc/profile CentOS-node04:/etc
source /etc/profie
,这步千万别忘 ! ! !
zkServer.sh start
把三台机子的zookeeper都启起来
接着用zkServer.sh status
查看每个zookeeper节点的状态
CentOS-node02、03、04 三台安装了zookeeper,只要是一台状态为leader,两台为follower则成功九、启动journalnode
hadoop-daemon.sh start journalnode
十、格式化一台NN并给另一NN同步数据
随意挑一台namenode上执行,另一台namenode不用执行,否则clusterID变了,找不到集群了。hdfs namenode –format
hadoop-daemon.sh start namenode
hdfs namenode -bootstrapStandby
十一、格式化zkfc
在CentOS-node01上:hdfs zkfc -formatZK
zkCli.sh //打开zookeeper客户端
十二、启动hdfs集群
zkServer.sh start
start-dfs.sh
如果哪个节点没起来到hadoop目录下去看那个node的日志文件log
然后全部会话jps看一下都起来些什么进程
在CentOS-node01上启动yarnstart-yarn.sh
yarn-daemon.sh start resourcemanager
jps
可在浏览器访问Cent-node03:8088,查看resourcemanager管理的内容十二、关闭hdfs集群
stop-dfs.sh //在CentOS-node01上
stop-yarn.sh //在CentOS-node01上
yarn-daemon.sh stop resourcemanager
zkServer.sh stop
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算