Hadoop高可用环境搭建文档

分布式环境搭建(适用于工作当中正式环境搭建

使用完全分布式,实现namenode高可用,ResourceManager的高可用

集群运行服务规划

192.168.174.100

192.168.174.110

192.168.174.120

zookeeper

zk

zk

zk

HDFS

JournalNode

JournalNode

JournalNode

NameNode

NameNode

ZKFC

ZKFC

DataNode

DataNode

DataNode

YARN

ResourceManager

ResourceManager

NodeManager

NodeManager

NodeManager

MapReduce

JobHistoryServer

安装包解压

第一台机器执行以下命令进行解压

cd /export/softwares

tar -zxvf hadoop-2.7.5.tar.gz -C ../servers/

配置文件的修改
修改core-site.xml

第一台机器执行以下命令

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

<!-- 指定NameNode的HA高可用的zk地址  -->

<property>

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

<value>node01:2181,node02:2181,node03:2181</value>

</property>

 <!-- 指定HDFS访问的域名地址  -->

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value>

</property>

 <!-- 临时文件存储目录  -->

<property>

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

<value>/export/servers/hadoop-3.1.3/data</value>

</property>

 <!-- 开启hdfs垃圾箱机制,指定垃圾箱中的文件七天之后就彻底删掉

单位为分钟

 -->

<property>

<name>fs.trash.interval</name>

<value>10080</value>

</property>
<!--修改core-site.xml中的ipc参数,防止出现连接journalnode服务ConnectException-->
<property>
    <name>ipc.client.connect.max.retries</name>
    <value>100</value>
    <description>Indicates the number of retries a client will make to establish a server connection.</description>
</property>
<property>
    <name>ipc.client.connect.retry.interval</name>
    <value>10000</value>
    <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
</property>

</configuration>


修改hdfs-site.xml
第一台机器执行以下命令

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2, nn3</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.rpc-address.mycluster.nn3</name>
    <value>node03:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>node01:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>node02:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn3</name>
    <value>node03:9870</value>
  </property>
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>${hadoop.tmp.dir}/jn</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</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_rsa</value>

</property>

<!-- 启用自动故障恢复功能 -->

<property>

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

<value>true</value>

</property>

<property>

<name>dfs.blocksize</name>

<value>134217728</value>

</property>

</configuration>
修改yarn-site.xml注意node03node02配置不同

第一台机器执行以下命令

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 启用resourcemanager ha -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!-- 声明两台resourcemanager的地址 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <!--指定resourcemanager的逻辑列表-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2,rm3</value>
    </property>
<!-- ========== rm1的配置 ========== -->
    <!-- 指定rm1的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node01</value>
    </property>

    <!-- 指定rm1的web端地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>node01:8088</value>
    </property>

    <!-- 指定rm1的内部通信地址 -->
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>node01:8032</value>
    </property>

    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>  
        <value>node01:8030</value>
    </property>

    <!-- 指定供NM连接的地址 -->  
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>node01:8031</value>
    </property>

<!-- ========== rm2的配置 ========== -->
    <!-- 指定rm2的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node02</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>node02:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>node02:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>node02:8030</value>
    </property>

    <property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>node02:8031</value>
    </property>

<!-- ========== rm3的配置 ========== -->
    <!-- 指定rm1的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm3</name>
        <value>node03</value>
    </property>
    <!-- 指定rm1的web端地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm3</name>
        <value>node03:8088</value>
    </property>
    <!-- 指定rm1的内部通信地址 -->
    <property>
        <name>yarn.resourcemanager.address.rm3</name>
        <value>node03:8032</value>
    </property>
    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm3</name>  
        <value>node03:8030</value>
    </property>

    <!-- 指定供NM连接的地址 -->  
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm3</name>
        <value>node03:8031</value>
    </property>

    <!-- 指定zookeeper集群的地址 --> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node01:2181,node02:2181,node03:2181</value>
    </property>

    <!-- 启用自动恢复 --> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!-- 指定resourcemanager的状态信息存储在zookeeper集群 --> 
    <property>
        <name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://node01:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
</configuration>
修改mapred-site.xml

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>
</configuration>
修改slaves

第一台机器执行以下命令

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim slaves

node01

node02

node03
修改hadoop-env.sh

第一台机器执行以下命令

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim hadoop-env.sh

export JAVA_HOME=/export/servers/jdk1.8.0_141

集群启动过程

将第一台机器的安装包发送到其他机器上

第一台机器执行以下命令:

cd /export/servers

scp -r hadoop-2.7.5/ node02:$PWD

scp -r hadoop-2.7.5/ node03:$PWD

三台机器上共同创建目录

三台机器执行以下命令

mkdir -p /export/servers/hadoop-2.7.5/data/dfs/nn/name

mkdir -p /export/servers/hadoop-2.7.5/data/dfs/nn/edits

mkdir -p /export/servers/hadoop-2.7.5/data/dfs/nn/name

mkdir -p /export/servers/hadoop-2.7.5/data/dfs/nn/edits

更改node02的rm2

第二台机器执行以下命令

cd /export/servers/hadoop-2.7.5/etc/hadoop

vim  yarn-site.xml

<!--在node3上配置rm1,在node2上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,

但这个在YARN的另一个机器上一定要修改,其他机器上不配置此项

注意我们现在有两个resourceManager  第三台是rm1   第二台是rm2

这个配置一定要记得去node02上面改好



-->

<property>       

<name>yarn.resourcemanager.ha.id</name>

<value>rm2</value>

       <description>If we want to launch more than one RM in single node, we need this configuration</description>

</property>

最后一步,目的是在web上能访问Hadoop集群:

配置window下的host文件 C:\Windows\System32\drivers\etc打开hosts文件,添加以下配置

192.168.2.128 node01
192.168.2.129 node02
192.168.2.130 node03
启动HDFS过程

先启动Zookeeper

start zkServe.sh(三台)

node01机器执行以下命令(黄色是初始化禁止多次执行)

cd   /export/servers/hadoop-2.7.5

bin/hdfs zkfc -formatZK

bin/hdfs namenode -format

start-dfs.sh

启动yarn过程

node01上面执行

start-yarn.sh

 ResourceManager备用节点需要在虚拟机hadoop02上执行以下命令单独启动

cd   /export/servers/hadoop-2.7.5

yarn-daemon.sh start resourcemanager
node03启动jobHistory

node03机器执行以下命令启动jobHistory

cd /export/servers/hadoop-2.7.5

sbin/mr-jobhistory-daemon.sh start historyserver

查看resourceManager状态

node03上面执行

cd   /export/servers/hadoop-2.7.5

bin/yarn rmadmin -getServiceState rm1

node02上面执行

cd   /export/servers/hadoop-2.7.5

bin/yarn rmadmin -getServiceState rm2

hdfs状态查看

node01机器查看hdfs状态

http://192.168.52.100:50070/dfshealth.html#tab-overview

node02机器查看hdfs状态

http://192.168.52.110:50070/dfshealth.html#tab-overview

强制更换active或standby

hdfs haadmin -transitionToActive/transitionToStandby -forcemanual nn1

yarn集群访问查看

http://node03:8088/cluster

历史任务浏览界面

页面访问:

http://192.168.52.120:19888/jobhistory

关闭:

在虚拟机hadoop02执行以下命令,关闭ResourceManager节点
yarn-daemon.sh stop resourcemanager

在虚拟机hadoop01执行以下命令,关闭HDFS,YARN
stop-dfs.sh
 
stop-yarn.sh


分别在虚拟机hadoop01、hadoop02和hadoop03执行以下命令,关闭JournalNode
hadoop-daemon.sh stop journalnode
如果要关闭虚拟机,记得一定要关闭zookeeper,否则下次启动会出错

一些报错及解决方案

1.zookeeper启动报错,就要注意是不是节点名称

2.namenode初始化报错

建议在core-site.xml上添加以下配置

<property>
    <name>ipc.client.connect.max.retries</name>
    <value>100</value>
       <description>Indicates the number of retries a client will make to establish a server connection.</description>
</property>
<property>
    <name>ipc.client.connect.retry.interval</name>
    <value>10000</value>
    <description>Indicates the number of milliseconds a client will wait for before retrying to establish a server connection.</description>
</property>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月初,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值