您的位置:首页 > 运维架构 > 网站架构

Hadoop学习笔记 5 - hdfs和yarn高可用性的搭建与配置

2017-09-05 15:46 573 查看

节点分配

主机名IP安装的软件运行的进程
node1192.168.2.171jdk、hadoopnamenode、DFSZKFailoverController(zkfc)、ResourceManager
node2192.168.2.172jdk、hadoopnamenode、DFSZKFailoverController(zkfc)、ResourceManager
node3192.168.2.173jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
node4192.168.2.174jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
node5192.168.2.175jdk、hadoop、zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain

一、zookeeper集群的安装与配置(在node3,node4,node5上配置)

1.上传安装包并解压

tar -zxvf zookeeper-3.4.9.tar.gz -C /home/hadoop

cd /home/hadoop/zookeeper-3.4.9/conf

cp zoo_sample.cfg zoo.cfg

编辑zoo.cfg:

vim zoo.cfg

按照下图所示编辑:



2.在zookeeper目录下新建两个目录:

cd /home/hadoop/zookeeper-3.4.9

mkdir data

mkdir log

cd data

touch myid

vim myid(在每台上面都不一样,参考zoo.cfg文件上server后面的3、4、5,如我写的server.3=node3:2288:3388,那么在node3上myid里就应该是3,以此类推)



3.启动ZK节点(分别在node3、node4、node5上启动)

cd /home/hadoop/zookeeper-3.4.9/bin

./zkServer.sh start



查看是否启动成功:

./zkServer.sh status

node5:



node4:



node3:



可以看到有一个leader,两个follower

输入jps查看:



至此zookeeper集群安装完成。

二、hdfs和yarn高可用性的搭建与配置

(每个节点都要配置,可以先在一台机子上配置好,然后再使用scp命令拷贝到其他节点上)

1.修改core-site.xml文件:

cd /usr/hadoop/etc/Hadoop

vim core-site.xml

<configuration>
<!--指定hdfs的nameservice为Master(和hdfs-site.xml一致)-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master</value>
</property>
<!--指定缓冲大小-->
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<!--指定hadoop的临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoopdir/tmp/</value>
<description>A base for other temporary directories.</description>
</property>
<!--指定zookeeper地址(就是安装了zookeeper的三个节点)-->
<property>
<name>ha.zookeeper.quorum</name>
<value>node3:2181,node4:2181,node5:2181</value>
</property>
</configuration>


2.修改hdfs-site.xml文件

vim hdfs-site.xml

<configuration>
<!--默认复制几份 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--namenode文件保存地址 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoopdir/dfs/name</value>
</property>
<!--datanode文件保存地址 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoopdir/dfs/data</value>
</property>
<!--指定hdfs的nameservices名称为Master(和core-site.xml一致)-->
<property>
<name>dfs.nameservices</name>
<value>Master</value>
</property>
<!--指定高可用的两个namenode名称分别为node1,node2 -->
<property>
<name>dfs.ha.namenodes.Master</name>
<value>node1,node2</value>
</property>
<!--配置node1,node2的rpc通信端口 -->
<property>
<name>dfs.namenode.rpc-address.Master.node1</name>
<value>node1:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.Master.node2</name>
<value>node2:9000</value>
</property>
<!--配置node1,node2的http通信端口-->
<property>
<name>dfs.namenode.http-address.Master.node1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.Master.node2</name>
<value>node2:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上存放的位置-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node3:8485;node4:8485;node5:8485/Master</value>
</property>
<!--JournalNode上元数据和日志存放的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/hadoop/journaldata</value>
</property>
<!--开启NameNode失败自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--NameNode失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.Master</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--隔离机制方法,确保任何时间只有一个NameNode处于活跃状态-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence(hdfs)
shell(/bin/true)</value>
</property>
<!--使用sshfence隔离机制要ssh免密登陆-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
</configuration>


3.修改yarn-site.xml文件

vim yarn-site.xml

<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--rm失联后重新连接的时间 -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property>
<!--开启rm高可用-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!--指定rm的cluster id-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ihona</value>
</property>
<!--指定两台rm主机名称-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<
c73a
span class="hljs-comment"><!--rm主机1-->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node1</value>
</property>
<!--rm主机2-->
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node2</value>
</property>
<!--rm故障自动切换-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.recover.enabled</name>
<value>true</value>
</property>
<!--rm故障自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!--rm状态信息存储方式1,一种基于内存(MemStore),一种基于ZK(ZKStore)-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--指定zk集群地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node3:2181,node4:2181,node5:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--向rm调度资源地址-->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>node1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>node2:8030</value>
</property>
<!--NodeManager通过该地址交换信息-->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>node1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>node2:8031</value>
</property>
<!--客户端通过改地址向rm提交对应用程序操作-->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>node1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>node2:8032</value>
</property>
<!-- 管理员通过改地址向rm发送管理命令-->
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>node1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>node2:8033</value>
</property>
<!-- rm HTTP访问地址,查看集群信息-->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node2:8088</value>
</property>
</configuration>


4.修改mapred-site.xml文件

vim mapred-site.xml

<configuration>
<!--指定mr框架为yarn方式-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--配置MapReduce JobHistory Server地址,默认端口10020-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property>
<!--配置MapReduce JobHistory Server HTTP地址,默认端口19888-->               <name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
</configuration>


5.修改slaves文件

vim slaves



6.将配置好的hadoop拷贝到其他节点

scp -r /usr/hadoop hadoop@node2:/usr

scp -r /usr/hadoop hadoop@node3:/usr

scp -r /usr/hadoop hadoop@node4:/usr

scp -r /usr/hadoop hadoop@node5:/usr

7.Hadoop集群的初始化

启动zookeeper集群(在node3,node4,node5上执行):

cd /home/hadoop/zookeeper-3.4.9/bin

./zkServer.sh start

格式化ZKFC(在node1上执行):

hdfs zkfc -formatZK

启动journalnode(在node3,4,5上执行):

hadoop-daemon.sh start journalnode

格式化HDFS(在node1上执行):

hdfs namenode -format

将格式化后的node1节点hadoop工作目录中的元数据目录复制到node2节点:

scp -r /home/hadoopdir/dfs hadoop@node2:/home/hadoopdir(实际路径参考配置文件)

启动HDFS(在node1执行):

start-dfs.sh

start-yarn.sh

在node2执行:

yarn-daemon.sh start resourcemanager

集群情况

node1:



node2:



node3:



node4:



node5:



8.测试高可用是否生效

用浏览器登录:192.168.2.171:50070



登录192.168.2.172:50070



kill掉node1上的namenode:

jps



kill -9 7216

然后登录192.168.2.172:50070



发现node2从standby变成了active

至此,Hadoop HA搭建完成

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐