CentOS7 Hadoop3.1.2高可用HA完全分布式安装

1、服务器列表

HOSTNAMEIPNNDNZKZKFCJNRMNM
master192.168.88.2001111111
slave1192.168.88.2011111111
slave2192.168.88.2021111

2、安装JDK

详情参考:《CentOS7下JDK安装

3、安装ZooKeeper

详情参考:《CentOS7 ZooKeeper 3.5.5 伪分布式集群安装》,将ZooKeeper在3台机器安装即可。

4、配置SSH免密登录

详情参考:《CentOS7 免密登录

5、安装Hadoop集群

5.1 下载Hadoop

下载hadoop。

cd /opt
wget https://www-us.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
tar zxvf hadoop-3.1.2.tar.gz
mv hadoop-3.1.2 hadoop

5.3 配置环境变量

新增/etc/profile.d/hadoop.sh,添加如下内容:

export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

执行以下命令,立即生效。

source /etc/profile

开始配置hadoop

cd /opt/hadoop/etc/hadoop

5.4 配置hadoop-env.sh

export JAVA_HOME=/opt/jdk8
export HADOOP_HOME=/opt/hadoop

5.4 配置hdfs-site.xml

    <!-- 设置hdfs中存放NameNode的文件路径 -->
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/data/hadoop/hdfs/name</value>
    </property>
    <!-- 设置hdfs中存放DataNode的文件路径 -->
    <property>
      <name>dfs.datanode.data.dir</name>
      <value>/data/hadoop/hdfs/data</value>
    </property>

    <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
    <property>
      <name>dfs.nameservices</name>
      <value>ns1</value>
    </property>

    <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
    <property>
      <name>dfs.ha.namenodes.ns1</name>
      <value>nn1,nn2</value>
    </property>

    <!-- nn1的RPC通信地址 -->
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn1</name>
      <value>nn1.ns1.hadoop.guonanjun.com:8020</value>
    </property>
    <!-- nn2的RPC通信地址 -->
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn2</name>
      <value>nn2.ns1.hadoop.guonanjun.com:8020</value>
    </property>

    <!-- nn1的http通信地址 -->
    <property>
      <name>dfs.namenode.http-address.ns1.nn1</name>
      <value>nn1.ns1.hadoop.guonanjun.com:50070</value>
    </property>
    <!-- nn2的http通信地址 -->
    <property>
      <name>dfs.namenode.http-address.ns1.nn2</name>
      <value>nn2.ns1.hadoop.guonanjun.com:50070</value>
    </property>

    <!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://node1.hadoop.guonanjun.com:8485;node2.hadoop.guonanjun.com:8485;node3.hadoop.guonanjun.com:8485/ns1</value>
    </property>

    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/data/hadoop/journal</value>
    </property>

    <!-- 开启NameNode失败自动切换 -->
    <property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
     </property>
     
    <!-- 配置失败自动切换实现方式 -->
    <property>
      <name>dfs.client.failover.proxy.provider.ns1</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
    <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>

    <!-- 配置sshfence隔离机制超时时间 -->
    <property>
      <name>dfs.ha.fencing.ssh.connect-timeout</name>
      <value>30000</value>
    </property>

    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/root/.ssh/id_rsa</value>
    </property>

注意,可能需要yum安装psmisc,否则可能无法进行 sshfence 。

yum install psmisc

5.5 配置core-site.xml

    <!-- 指定hdfs的nameservice为ns1 -->
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://ns1</value>
    </property>

    <!-- 指定hadoop临时目录 -->
    <property>
      <name>hadoop.tmp.dir</name>
      <value>/data/hadoop/tmp</value>
    </property>

    <!-- 指定zookeeper地址 -->
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>zk1.test.guonanjun.com:2181,zk1.test.guonanjun.com:2181,zk1.test.guonanjun.com:2181</value>
    </property>
    
    <!-- HealthMonitor check namenode 的超时设置,默认50000ms,改为5mins -->
    <property>
      <name>ha.health-monitor.rpc-timeout.ms</name>
      <value>300000</value>
    </property>
    
    <!-- zk failover的session 超时设置,默认5000ms,改为3mins -->
    <property>
      <name>ha.zookeeper.session-timeout.ms</name>
      <value>180000</value>
    </property>

5.6 配置mapred-site.xml

    <!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!-- 指定mapreduce jobhistory地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>jobhistory.hadoop.guonanjun.com:10020</value>
    </property>

    <!-- 任务历史服务器的web地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>jobhistory.hadoop.guonanjun.com:19888</value>
    </property>

    <!-- 配置正在运行中的日志在hdfs上的存放路径 -->
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/mr-history/tmp</value>
    </property>

    <!-- 配置运行过的日志存放在hdfs上的存放路径 -->
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/mr-history/done</value>
    </property>

5.7 配置yarn-site.xml

    <!-- 开启RM高可用 -->
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
    </property>

    <!-- 指定RM的cluster id -->
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>yrc</value>
    </property>

    <!-- 指定RM的名字 -->
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value>
    </property>

    <!-- 分别指定RM的地址 -->
    <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>rm1.hadoop.guonanjun.com</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>rm2.hadoop.guonanjun.com</value>
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address.rm1</name>
      <value>rm1.hadoop.guonanjun.com:8088</value>
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address.rm2</name>
      <value>rm2.hadoop.guonanjun.com:8088</value>
    </property>

    <!-- 指定zk集群地址 -->
    <property>
      <name>yarn.resourcemanager.zk-address</name>
      <value>zk1.test.guonanjun.com:2181,zk1.test.guonanjun.com:2181,zk1.test.guonanjun.com:2181</value>
    </property>

    <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
    </property>

    <!-- 开启日志聚合 -->
    <property>
      <name>yarn.log-aggregation-enable</name>
      <value>true</value>
    </property>

5.8 修改workers

node1.hadoop.guonanjun.com
node2.hadoop.guonanjun.com
node3.hadoop.guonanjun.com

5.9 配置start-dfs.sh和stop-dfs.sh

进入/opt/hadoop/sbin/目录,在start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数:

#!/usr/bin/env bash

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root

5.10 配置start-yarn.sh和stop-yarn.sh

进入/opt/hadoop/sbin/目录,在start-yarn.sh,stop-yarn.sh两个文件顶部添加以下参数:

YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root

5.11 配置/etc/hosts

192.168.88.200  nn1.ns1.hadoop.guonanjun.com
192.168.88.201  nn2.ns1.hadoop.guonanjun.com

192.168.88.200  node1.hadoop.guonanjun.com
192.168.88.201  node2.hadoop.guonanjun.com
192.168.88.202  node3.hadoop.guonanjun.com

192.168.88.200  jobhistory.hadoop.guonanjun.com

192.168.88.200  rm1.hadoop.guonanjun.com
192.168.88.201  rm2.hadoop.guonanjun.com

192.168.88.200  zk1.test.guonanjun.com
192.168.88.201  zk1.test.guonanjun.com
192.168.88.202  zk1.test.guonanjun.com

5.12 复制hadoop安装文件到其他服务器

scp -r /opt/hadoop root@slave1:/opt
scp -r /opt/hadoop root@slave2:/opt

5.13 启动Hadoop

在每台机器上运行以下命令:

hdfs --daemon start journalnode

在master上格式hdfs(注意:只需要执行一次):

hdfs namenode -format

在master上启动namenode:

hdfs --daemon start namenode

在slave1上同步namenode:

hdfs namenode -bootstrapStandby

在slave1上启动namenode:

hdfs --daemon start namenode

在master上格式 ZKCF(注意:只需要执行一次):

hdfs zkfc -formatZK

在master上启动hdfs:

start-dfs.sh

在master上启动yarn:

start-yarn.sh

在master上启动jobhistory:

mapred --daemon start historyserver

5.14 访问页面

http://nn1.ns1.hadoop.guonanjun.com:50070
http://nn2.ns1.hadoop.guonanjun.com:50070

看哪个namenode是active,在相应的机器上,通过jps查看namenode的进程, 运行kill -9 进程号,杀掉namenode,过一段时间看standby的namenode是否变成了active。

http://rm1.hadoop.guonanjun.com:8088
http://rm2.hadoop.guonanjun.com:8088

看哪个ResourceManager是active,在相应的机器上,通过jps查看ResourceManager的进程, 运行kill -9 进程号,杀掉ResourceManager,过一段时间看standby的ResourceManager是否变成了active。

http://jobhistory.hadoop.guonanjun.com:19888

未经允许不得转载:君子如兰 » CentOS7 Hadoop3.1.2高可用HA完全分布式安装

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏