当前位置:首页 > 技术分析 > 正文内容

Hadoop HA高可用部署

ruisui882周前 (06-02)技术分析5

Hadoop HA的配置和部署

1 .Hadoop HA 说明

1.1 Hadoop HA主备介绍

自Hadoop2.x版本后可以增加多个namenode节点【保存着整个系统的名称空间和文件数据块的地址映射又称“元数据”】,多个namenode有活跃(active)和 准备(Standby)两种状态 , 即一个帮派有一个正一个副,平时都是正帮主主持大局,但如果正帮主遭遇不测被Kill S掉后,这时候副帮主就得出来主持大局了。

1.2 Hadoop HA选举介绍

Hadoop HA 的正帮主(active)选举一般都要借助长老会(Zookeeper)帮助。长老会保存着每个帮会成员的生命水晶,生命水晶一般会检测到每个帮员生命特征,一但生命水晶熄灭也就代表人死亡。长老会会定时查看帮主的生命水晶状况,一但帮主生命水晶熄灭,长老会会立刻在副帮主之间推选出新的正帮主,从而继续管理帮内事务。

1.3 Hadoop HA同步机制(QJM)

当长老会(Zookeeper)推选出新的正帮主,那被推出的帮主他是如何快速接手帮内事务呢?答案是正副帮主之间有一个小本本,这个小本本记录着大小帮内的事务,帮主会将帮内事务写在这个正副帮主共享的小本本上面,所以一但帮主惨遭不测,其他帮主凭借帮主小本本也能快速上位处理帮内事务。

2. Hadoop HA 部署

2.1部署前的环境配置:

jdk1.8安装并配置环境变量

  1. ssh免密,注意因为是多帮主帮派(namenode)故在“两个帮主”(namenode)节点生成密钥分别分发给所以节点Zookeeper安装,每个节点都要安装。

2.2 Hadoop 节点部署

# 解压Hadoop

[root@hadoop01 src]# tar -zxvf /home/hadoop-2.7.6.tar.gz -C /usr/local/src/

#配置hadoop环境变量

[root@hadoop01 src]# vi /etc/profile

#增加jdk、zookeeper、hadoop的地址

#注意:要添加你自己解压所在的地址,下面是我的解压地址

export JAVA_HOME=/usr/local/src/jdk1.8.0_152/

export ZK_HOME=/usr/local/src/zookeeper-3.4.10/

export HADOOP_HOME=/usr/local/src/hadoop-2.7.6/

export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

#刷新环境变量

[root@hadoop01 src]# source /etc/profile

NameNode和ResourceManager配置高可用大概需要配置如下6个配置文件:

2.1.1 core-site.xml

[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/core-site.xml

<configuration>

<!--指定hdfs文件系统的默认名-->

<property>

<name>fs.defaultFS</name>

<value>hdfs://sw</value>

</property>

<!--指定zk的集群地址-->

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>

</property>

<!--指定hadoop的临时目录-->

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadata/tmp</value>

</property>

</configuration>

注意 " fs.defaultFS "和 " fs.default.name"的区别:

  1. 使用 " fs.defaultFS “首先会判断Hadoop是否开启HA(高可用),使用” fs.defaultFS "一般使用在Hadoop HA使用 " fs.default.name "一般在单一的Namenode节点(一个帮就一个帮主) ,如果在单一的Namenode节点用 " fs.defaultFS "就会报错

2.1.2 hdfs-site.xml

[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/hdfs-site.xml

<configuration>

<!--指定块的副本数,默认是3-->

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<!--指定数据块的大小-->

<property>

<name>dfs.blocksize</name>

<value>134217728</value>

</property>

<!--指定namenode的元数据目录-->

<property>

<name>dfs.namenode.name.dir</name>

<value>/home/hadata/dfs/name</value>

</property>

<!--指定datanode存储数据目录-->

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/hadata/dfs/data</value>

</property>

<!--hdfs的命名空间,逻辑名称-->

<property>

<name>dfs.nameservices</name>

<value>sw</value>

</property>

<!--qianfeng下的namenode的别名-->

<property>

<name>dfs.ha.namenodes.sw</name>

<value>nn1,nn2</value>

</property>

<!--指定nn1和nn2的通信地址-->

<property>

<name>dfs.namenode.rpc-address.qianfeng.nn1</name>

<value>hadoop01:9000</value>

</property>

<property>

<name>dfs.namenode.rpc-address.qianfeng.nn2</name>

<value>hadoop02:9000</value>

</property>

<!--指定namenode的web通信地址-->

<property>

<name>dfs.namenode.http-address.qianfeng.nn1</name>

<value>hadoop01:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.qianfeng.nn2</name>

<value>hadoop02:50070</value>

</property>

<!--指定共享日志目录, 这个就是帮主的小本本-->

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/sw</value>

</property>

<!--指定开启namenode失败自动转移,这个就是长老会根据生命水晶检测选举新帮主-->

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<!--指定失败转移的类-->

<property>

<name>dfs.client.failover.proxy.provider.qianfeng</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<!--防止namenode的脑裂-->

<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>

<!--指定日志的本地目录-->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/hadata/journal1</value>

</property>

<!--是否开启webhdfs的-->

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

<!--是否开启hdfs的权限-->

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

</configuration>

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113

2.1.3 mapred-site.xml

[root@hadoop01 hadoop-2.7.6]# mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/mapred-site.xml

<configuration>

<!--配置mapreduce的框架名称-->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

<final>true</final>

</property>

<!--指定jobhistoryserver的内部通信地址-->

<property>

<name>mapreduce.jobhistory.address</name>

<value>hadoop01:10020</value>

</property>

<!--指定jobhistoryserver的web地址-->

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>hadoop01:19888</value>

</property>

</configuration>

1234567891011121314151617181920212223

jobhistoryserver: 历史服务器,管理者可以通过历史服务器查看已经运行完成的Mapreduce作业记录。

2.1.4 yarn-site.xml

[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/yarn-site.xml

<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>

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>sw_yarn</value>

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>hadoop01</value>

</property>

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>hadoop02</value>

</property>

<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>

<!--指定zookeeper的集群地址-->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>

</property>

</configuration>

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748

2.1.5 slaves

[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/slaves

hadoop01

hadoop02

hadoop03

2.1.6 hadoop-env.sh

[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/hadoop-env.sh

#添加jdk路径

export JAVA_HOME=/usr/local/src/jdk1.8.0_152/

123

3. Hadoop HA 开启

3.1 先启动三台的Zookeeper

#节点1

[root@hadoop01 hadoop-2.7.6]# zkServer.sh start

#节点2

[root@hadoop02 hadoop-2.7.6]# zkServer.sh start

#节点3

[root@hadoop03 hadoop-2.7.6]# zkServer.sh start

3.2 启动 JournalNode

JournalNode : 作为独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。(即帮主会把本帮的事务写在小本本上,副帮主也能同时获取小本本的记录)

[root@hadoop01 hadoop-2.7.6]# hadoop-daemons.sh start journalnode

3.3 namenode格式化并启动

HDFS集群有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。

namenode(管理文件系统的命名空间):它维护着文件系统树及整棵树内的所有文件和目录。namenode以两个文件形式永久保存在本地磁盘上 ”命名空间镜像文件“ 和 ”编辑日志文件“。

[root@hadoop1 ~]# hdfs namenode -format

[root@qianfeng01 ~]# hadoop-daemon.sh start namenode

3.4 另外的namenode节点同步

副帮主查看帮主在小本本写的”羞羞“事,并记录在自己这里

[root@hadoop2 ~]# hdfs namenode -bootstrapStandby

3.5 格式化zkfc

#选择其中一个namenode节点进行格式化zkfc

#前提QuorumPeerMain服务必须处于开启状态,客户端zkfc才能格式化成功

[root@hadoop01 ~]# hdfs zkfc -formatZK

123

3.6 启动集群

[root@hadoop1 ~]# start-all.sh

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4387.html

分享给朋友:

“Hadoop HA高可用部署” 的相关文章

深入理解Vue.js组件通信:父子组件与子父组件数据交互详解

什么是Vue组件通讯 Vue.js 组件通信是指在 Vue 应用的不同组件之间进行数据交换和状态同步的过程。由于 Vue 的组件是基于单文件组件(SFCs)的模块化设计,每个组件都有自己的作用域,因此它们不能直接访问彼此的数据。为了使组件之间能够协同工作,Vue 提供了几种不同的通信方式。以下是 V...

多项修正 尼康D4s发布最新1.10版固件

尼康公司与2014年8月27日发布了D4s的最新固件,固件版本号为C:1.10。这次固件升级,主要解决了一些BUG,并且对拍摄菜单与相机操作做了一定调整。下面是本次新固件的具体信息:尼康发布D4s最新C固件 1.10版对C固件升级到1.10版所作的修改:当选定运动VR模式并换上 AF-S 尼克尔 4...

Vue从入门到实践 丨Vue-router基本使用

1. 什么是 vue-routervue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。vue-router 的官方文档地址:https://router.vuejs.org/zh/2. vue-router 安装...

Vue实战篇|使用路由管理用户权限(动态路由)

权限控制是后台管理系统比较常见的需求,如果我们需要对某些页面的添加权限控制的话,那我们可以在路由管理中的权限做一些校验,没有通过权限校验的给出相应的提示或者直接跳转到报错页面。跟着我一起来学vue实战篇路由管理权限吧!权限校验函数getCurrentAuthority()函数用于获取当前用户权限,一...

首批龙芯3A6000电脑规模化应用:内置QQ、微信主流软件

6月18日消息,今日,龙芯中科宣布,近千台龙芯3A6000电脑走进福建福州某区各科室并服务于具体工作开展。据介绍,该批电脑为实现首批规模化应用的3A6000整机产品,搭载国产操作系统,内置主流办公和即时通讯等软件,可充分满足打印机利旧要求(兼容原有打印机设备)。3A6000根据官方晒出的桌面截图显示...

同步电机和异步电机竟然有这么大区别,看完就理解了

同步电机和异步电机的主要区别是:同步电机能与其定子磁场旋转达到同步转速,异步电机转速达不到定子磁场的同步转速。电机大致分成三种,同步机,异步机(以上两种多与电网相连),还有个直流电机。下面的内容是一个过渡,只作为对电机(同步机、异步机)原理性的知识进行形象的讲解(懂电机的可跳过)。同步机和异步机,这...