A3--Hadoop部署

基础环境:Centos 7.9

一、版本信息

 
 
JDK 1.8
Hadoop 3.1.3

二、部署前准备:

1.执行init.sh(环境初始化脚本)
2.执行java.sh(安装java环境)
3.hosts主机名映射
4.ssh免密登录(管理节点对数据节点)
5.集群时间同步
6.部署zookeeper集群

 

三、集群规划

主机
角色
hadoop-01 JN ZKFC NN RM
hadoop-02 JN ZKFC NN RM
hadoop-03 DN NM
hadoop-04 DN NM

 

架构图

 

四、HDFS HA部署

上传Hadoop安装包到 /opt目录

tar -zxvf hadoop-3.1.3.tar.gz
cd hadoop-3.1.3

修改配置文件(配置文件路径 hadoop-3.1.3/etc/hadoop)

  • hadoop-env.sh

    #文件最后添加
    export JAVA_HOME=/java/jdk1.8.0_191
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_JOURNALNODE_USER=root
    export HDFS_ZKFC_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m"
    export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"
  • core-site.xml

    <!-- 把多个 NameNode 的地址组装成一个集群mycluster -->
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
      </property>
     <!-- 指定 hadoop 数据的存储目录 -->
      <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-3.1.3/data</value>
        <description>A base for other temporary directories.</description>
      </property>
     <!-- 配置 HDFS 网页登录使用的静态用户 -->
      <property>
      <name>hadoop.http.staticuser.user</name>
      <value>root</value>
      </property>
     <!-- 配置 开启回收站 -->
      <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
      </property>
     <!-- 指定zkfc要连接的zkServer地址-->
      <property>
        <name>ha.zookeeper.quorum</name>
        <value>192.168.11.201:2181,192.168.11.202:2181,192.168.11.203:2181</value>
      </property>
  • hdfs-site.xml

    <!-- NameNode 数据存储目录-->
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/name</value>
      </property>
     <!-- DataNode 数据存储目录-->
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///data1,file:///data2,file:///data3</value>
      </property>
     <!-- JournalNode 数据存储目录-->
      <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>${hadoop.tmp.dir}/jn</value>
      </property>
     <!-- 完全分布式集群名称-->
      <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
      </property>
     <!-- 集群中 NameNode 节点-->
      <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
      </property>
     <!-- NameNode 的RPC通信地址-->
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop-01:8020</value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop-02:8020</value>
      </property>
     <!-- NameNode 的HTTP通信地址-->
      <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop-01:9870</value>
      </property>
      <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop-02:9870</value>
      </property>
     <!-- 指定 NameNode 元数据在JournalNode上存放的位置-->
      <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop-01:8485;hadoop-02:8485/mycluster</value>
      </property>
     <!-- 访问代理类:client用于确定哪个NameNode为Active-->
      <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>
     <!-- 使用隔离机制时需要ssh秘钥登录-->
      <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
      </property>
     <!-- 启用NameNode故障自动转移-->
      <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
      </property>
  • workers

    hadoop-03
    hadoop-04
  • 启动JournalNode(所有节点)

    hdfs --daemon start journalnode
  • 初始化ZKFC(一台节点)

    hdfs zkfc -formatZK
  • 初始化NameNode(一台节点)

    hdfs namenode -format
  • 启动初始化的NameNode

    hdfs --daemon start namenode
  • 同步Namenode数据(其他NN节点)

    hdfs namenode -bootstrapStandby
  • 停止NameNode服务

    hdfs --daemon stop namenode
  • 停止JournalNode服务

    hdfs --daemon stop journalnode
  • 启动hdfs集群

    [root@hadoop-01 hadoop-3.1.3]# start-dfs.sh
    Starting namenodes on [hadoop-01 hadoop-02]
    上一次登录:三 9月  7 17:06:31 CST 2022pts/0 
    Starting datanodes
    上一次登录:三 9月  7 17:07:36 CST 2022pts/0 
    Starting journal nodes [hadoop-02 hadoop-01]
    上一次登录:三 9月  7 17:07:38 CST 2022pts/0 
    Starting ZK Failover Controllers on NN hosts [hadoop-01 hadoop-02]
    上一次登录:三 9月  7 17:07:42 CST 2022pts/0 



    五、YARN HA部署

    • 修改配置文件yarn-site.xml

      <!-- Site specific YARN configuration properties -->
           <!-- 指定 MR 走 shuffle -->
            <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-yarn</value>
            </property>
           
          <!--指定 resourcemanager的逻辑列表-->
            <property>
              <name>yarn.resourcemanager.ha.rm-ids</name>
              <value>rm1,rm2</value>
            </property>
           
          <!-- ===============rm1的配置================= -->
          <!-- 指定rm1的主机名-->
            <property>
              <name>yarn.resourcemanager.hostname.rm1</name>
              <value>hadoop-01</value>
            </property>
          <!-- 指定rm1的web端地址-->
            <property>
              <name>yarn.resourcemanager.wepapp.address.rm1</name>
              <value>hadoop-01:8088</value>
            </property>
          <!-- 指定rm1的内部通信地址-->
            <property>
              <name>yarn.resourcemanager.address.rm1</name>
              <value>hadoop-01:8032</value>
            </property>
          <!-- 指定AM向rm1申请资源地址-->
            <property>
              <name>yarn.resourcemanager.scheduler.address.rm1</name>
              <value>hadoop-01:8030</value>
            </property>
          <!-- 指定供NameNode连接的地址-->
            <property>
              <name>yarn.resourcemanager..resource-tracker.address.rm1</name>
              <value>hadoop-01:8031</value>
            </property>
          <!-- ===============rm2配置================= -->
          <!-- 指定rm2的主机名-->
            <property>
              <name>yarn.resourcemanager.hostname.rm2</name>
              <value>hadoop-02</value>
            </property>
          <!-- 指定rm2的web端地址-->
            <property>
              <name>yarn.resourcemanager.wepapp.address.rm2</name>
              <value>hadoop-02:8088</value>
            </property>
          <!-- 指定rm2的内部通信地址-->
            <property>
              <name>yarn.resourcemanager.address.rm2</name>
              <value>hadoop-02:8032</value>
            </property>
          <!-- 指定AM向rm2申请资源地址-->
            <property>
              <name>yarn.resourcemanager.scheduler.address.rm2</name>
              <value>hadoop-02:8030</value>
            </property>
          <!-- 指定供NameNode连接的地址-->
            <property>
              <name>yarn.resourcemanager..resource-tracker.address.rm2</name>
              <value>hadoop-02:8031</value>
            </property>
           <!--指定 zookeeper 集群的地址-->
            <property>
              <name>yarn.resourcemanager.zk-address</name>
              <value>192.168.11.201:2181,192.168.11.202:2181,192.168.11.203: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://hadoop-01:19888/jobhistory/logs</value>
            </property>
           <!-- 设置日志保留时间为 7 天 -->
            <property>
              <name>yarn.log-aggregation.retain-seconds</name>
              <value>604800</value>
            </property>
           <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true -->
            <property>
              <name>yarn.nodemanager.vmem-check-enabled</name>
              <value>false</value>
            </property>
    • 启动yarn集群

      start-yarn.sh
posted @ 2023-04-04 13:41  Jerry·  阅读(45)  评论(0)    收藏  举报