环境

操作系统 主机名 地址 数据目录 运行组件
Rocky9 hdp-nn 192.168.8.1/24 /data/hdp-nn Namenode
Rocky9 hdp-snn 192.168.8.2/24 /data/hdp-snn SecondaryNamenode
Rocky9 hdp-rm 192.168.8.3/24 - ResourceManager
Rocky9 hdp-slave10 192.168.8.10/24 /data/hdp-dn Datanode, NodeManager
Rocky9 hdp-slave11 192.168.8.11/24 /data/hdp-dn Datanode, NodeManager

服务器初始配置

  • 全部主机上执行如下操作
  • 禁用防火墙
  • 禁用 selinux
  • 配置时间同步
  • 配置主机名解析
    1
    2
    3
    4
    5
    
    echo "192.168.8.1  hdp-nn" >> /etc/hosts
    echo "192.168.8.2  hdp-snn" >> /etc/hosts
    echo "192.168.8.3  hdp-dn" >> /etc/hosts
    echo "192.168.8.10 hdp-slave10" >> /etc/hosts
    echo "192.168.8.11 hdp-slave11" >> /etc/hosts
    

ssh 免密登录

  • 配置 hdp-nn 可以 ssh 免密登录 hdp-nn、hdp-snn 和 hdp-slaveXX

    1
    2
    3
    4
    5
    
    # 在 hdp-nn 上执行如下操作
    ssh-copy-id hdp-nn
    ssh-copy-id hdp-snn
    ssh-copy-id hdp-slave10
    ssh-copy-id hdp-slave11
    
  • 配置 hdp-rm 可以 ssh 免密登录 hdp-rm 和 hdp-slaveXX

    1
    2
    3
    4
    
    # 在 hdp-rm 上执行如下操作
    ssh-copy-id hdp-rm
    ssh-copy-id hdp-slave10
    ssh-copy-id hdp-slave11
    

部署 jdk8 环境

  • 全部主机上执行如下操作

  • 上传 jdk-8u311-linux-x64.tar.gz,解压

    1
    2
    
    tar zxf jdk-8u311-linux-x64.tar.gz
    mv jdk1.8.0_311 /opt/jdk
    
  • 配置 jdk 环境变量

    1
    2
    3
    
    echo 'export JAVA_HOME=/opt/jdk' > /etc/profile.d/jdk.sh
    echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk.sh
    source /etc/profile.d/jdk.sh
    

部署 hadoop 环境

  • 全部主机上执行如下操作

  • 下载 hadoop 2.10.2 部署包,解压

    1
    2
    3
    
    curl -LO https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz
    tar zxf hadoop-2.10.2.tar.gz
    mv hadoop-2.10.2 /opt/hdp
    
  • 配置 hadoop 环境变量

    1
    2
    3
    4
    
    echo 'export HADOOP_HOME=/opt/hdp' > /etc/profile.d/hdp.sh
    echo 'export PATH=$HADOOP_HOME/bin:$PATH' >> /etc/profile.d/hdp.sh
    # 不推荐把 $HADOOP_HOME/sbin 加入环境变量 PATH.
    source /etc/profile.d/hdp.sh
    

修改 hadoop-env.sh

  • 编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh,指定 JAVA_HOME 环境变量
    1
    
    export JAVA_HOME=/opt/jdk
    

修改 core-site.xml

  • 编辑 $HADOOP_HOME/etc/hadoop/core-site.xml,参考内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    <configuration>
      <property>
        <!-- namenode 的 hdfs 协议通信地址 -->
        <name>fs.defaultFS</name>
        <value>hdfs://hdp-nn:8020</value>
      </property>
      <property>
        <!-- hadoop 集群存储临时文件的目录,datanode 里建议挂载独立盘 -->
        <name>hadoop.tmp.dir</name>
        <value>/tmp/hdp</value>
      </property>
      <property>
        <!-- hive beeline 登录用户 root -->
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
      </property>
      <property>
        <!-- hive beeline 登录用户 root -->
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
      </property>
    </configuration>
    

修改 hdfs-site.xml

  • 编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml,参考内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    <configuration>
      <property>
        <!-- namenode 元数据存放位置,可指定多个目录(用逗号分隔)实现容错 -->
        <name>dfs.namenode.name.dir</name>
        <value>/data/hdp_nn</value>
      </property>
      <property>
        <!-- secondary namenode 镜像数据存放位置,可指定多个目录(用逗号分隔)实现容错 -->
        <name>dfs.namenode.checkpoint.dir</name>
        <value>/data/hdp_snn</value>
      </property>
      <property>
        <!-- datanode 数据块存放位置,可指定多个目录(用逗号分隔)实现容错 -->
        <name>dfs.datanode.data.dir</name>
        <value>/data/hdp_dn</value>
      </property>
      <property>
        <!-- namenode 的 Web UI 访问地址 -->
        <name>dfs.namenode.http-address</name>
        <value>hdp-nn:9870</value>
      </property>
      <property>
        <!-- secondary namenode 的主机和端口 -->
        <name>dfs.namenode.secondary.http-address</name>
        <value>hdp-snn:9868</value>
      </property>
      <property>
        <!-- hdfs 副本数量,默认3,这里设置为2,保证两个 datanode 时数据有冗余 -->
        <name>dfs.replication</name>
        <value>2</value>
      </property>
      <property>
        <!-- 启用 webhdfs api -->
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
      </property>
    </configuration>
    

修改 yarn-site.xml

  • 编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml,参考内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    <configuration>
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>
      <property>
        <!--resourcemanager 的主机名-->
        <name>yarn.resourcemanager.hostname</name>
        <value>hdp-rm</value>
      </property>
      <property>
        <!-- resourcemanager 的 Web UI 访问地址 (默认端口8088) -->
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hdp-rm:8088</value>
      </property>
      <property>
        <!-- (可选) 开启日志聚集功能,方便在Web UI上查看已完成任务的日志 -->
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
      </property>
      <property>
        <!-- (可选) 日志保留时间(7天) -->
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
      </property>
      <property>
        <!-- 使用 tez 时需关闭 yarn 虚拟内存检查 -->
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
      </property>
    </configuration>
    

修改 mapred-env.sh

  • 编辑 $HADOOP_HOME/etc/hadoop/mapred-env.sh,指定 JAVA_HOME 环境变量
    1
    
    export JAVA_HOME=/opt/jdk
    

修改 mapred-site.xml

  • 编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml,参考内容如下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
      <property>
        <!-- MapReduce JobHistory Server 地址 -->
        <name>mapreduce.jobhistory.address</name>
        <value>hdp-rm:10020</value>
      </property>
      <property>
        <!-- MapReduce JobHistory Server Web UI 地址 (默认端口19888) -->
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hdp-rm:19888</value>
      </property>
    </configuration>
    

修改 slaves

  • 编辑 $HADOOP_HOME/etc/hadoop/slaves,替换成全部的 slave 主机,参考内容如下
    1
    2
    
    hdp-slave10
    hdp-slave11
    

创建临时目录和数据目录

  • hdp-nn 上创建临时目录和数据目录

    1
    2
    
    mkdir /tmp/hdp
    mkdir /data/hdp_nn
    
  • hdp-snn 上创建临时目录和数据目录

    1
    2
    
    mkdir /tmp/hdp
    mkdir /data/hdp_snn
    
  • hdp-rm 上创建临时目录

    1
    
    mkdir /tmp/hdp
    
  • hdp-slaveXX 上创建临时目录和数据目录

    1
    2
    
    mkdir /tmp/hdp #建议挂载独立盘
    mkdir /data/hdp_dn #建议挂载独立盘
    

启动 hadoop 集群

  • hdp-nn 上启动 dfs 集群

    1
    
    /opt/hdp/sbin/start-dfs.sh
    
  • hdp-rm 上启动 yarn 集群

    1
    
    /opt/hdp/sbin/start-yarn.sh