1. 资源规划

组件 bigdata-hk-node1 bigdata-hk-node2 bigdata-hk-node3
OS centos7.6 centos7.6 centos7.6
JDK jvm jvm jvm
HDFS NN/DN DN 2NN/DN
YARN NM RM/NM/JobHistoryServer NM

2. 安装介质

版本:hadoop-3.1.3.tar.gz
下载:http://archive.apache.org/dist/hadoop/core

3. 环境准备

  • 安装虚拟机

参考:《Vagrant安装CentOS-7.6

  • 安装JDK

参考:《CentOS7.6-安装JDK-1.8.221

  • SSH免密

参考:《CentOS7.6-SSH免密
说明:请留意Hadoop-3.x端口变更情况,详情参考附录:《Hadoop-3.x端口变更》。

4. 集群配置

已配置,参考:《Vagrant安装CentOS-7.6》。

5. 安装Hadoop

先在节点bigdata-hk-node1上安装,之后分发到其他节点。(以下操作默认使用vagrant用户操作

  1. cd /share
  2. tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
  3. # 清理安装介质中无用信息(可选)
  4. rm -rf /opt/module/hadoop-3.1.3/share/doc
  5. rm -rf /opt/module/hadoop-3.1.3/*/*.cmd
  6. rm -rf /opt/module/hadoop-3.1.3/*/*/*.cmd

5.1. HDFS单机部署

  • 创建相关目录

    1. ## Hadoop临时目录,与core-site.xml的${hadoop.tmp.dir}属性相关
    2. mkdir -p /opt/module/hadoop-3.1.3/tmp
    3. chmod -R a+w /opt/module/hadoop-3.1.3/tmp
  • hdfs配置

  1. 配置hadoop-env.sh。

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh

    内容如下(修改):

    1. export JAVA_HOME=/opt/module/jdk1.8.0_221
  2. 配置core-site.xml。

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

    配置如下:

    1. <!--默认文件系统的名称(uri's的authority部分用来指定host, port等。默认是本地文件系统。)-->
    2. <property>
    3. <name>fs.defaultFS</name>
    4. <value>hdfs://bigdata-hk-node1:8020</value>
    5. </property>
    6. <!-- Hadoop的临时目录,服务端参数,修改需重启。NameNode的Image/Edit目录依赖此配置 -->
    7. <property>
    8. <name>hadoop.tmp.dir</name>
    9. <value>/opt/module/hadoop-3.1.3/tmp</value>
    10. </property>
    11. <!-- WEB UI访问数据使用的用户名 -->
    12. <property>
    13. <name>hadoop.http.staticuser.user</name>
    14. <value>vagrant</value>
    15. </property>
    16. <!-- 不开启权限检查 -->
    17. <property>
    18. <name>dfs.permissions.enabled</name>
    19. <value>false</value>
    20. </property>
    21. <!-- 兼容hive配置 -->
    22. <property>
    23. <name>hadoop.proxyuser.root.hosts</name>
    24. <value>*</value>
    25. </property>
    26. <property>
    27. <name>hadoop.proxyuser.root.groups</name>
    28. <value>*</value>
    29. </property>
    30. <property>
    31. <name>hadoop.proxyuser.vagrant.hosts</name>
    32. <value>*</value>
    33. </property>
    34. <property>
    35. <name>hadoop.proxyuser.vagrant.groups</name>
    36. <value>*</value>
    37. </property>
  3. 配置hdfs-site.xml。

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml

    配置如下:

    1. <!-- NN WebUI端访问地址-->
    2. <property>
    3. <name>dfs.namenode.http-address</name>
    4. <value>bigdata-hk-node1:9870</value>
    5. </property>
    6. <!-- NN有一个工作线程池,用来处理不同DN的并发心跳以及客户端并发的元数据操作。 -->
    7. <property>
    8. <name>dfs.namenode.handler.count</name>
    9. <value>21</value>
    10. </property>
    11. <!-- 2NN WebUI端访问地址-->
    12. <property>
    13. <name>dfs.namenode.secondary.http-address</name>
    14. <value>bigdata-hk-node3:9868</value>
    15. </property>
    16. <!-- HDFS数据副本数,默认3副本:本节点+同机架节点+其他机架节点,一般不大于datanode的节点数,建议默认3副本-->
    17. <property>
    18. <name>dfs.replication</name>
    19. <value>1</value>
    20. </property>
    21. <!-- HDFS中启用权限检查配置-->
    22. <property>
    23. <name>dfs.permissions.enabled</name>
    24. <value>false</value>
    25. </property>
    26. <!-- 兼容hive配置 -->
    27. <property>
    28. <name>dfs.webhdfs.enabled</name>
    29. <value>true</value>
    30. </property>
  • 格式化NameNode

    1. 格式化HDFS用于初始化NameNode管理的镜像和操作日志文件。

    ```bash

    清理logs和tmp

    rm -rf /opt/module/hadoop-3.1.3/logs/ rm -rf /opt/module/hadoop-3.1.3/tmp/

格式化HDFS

cd /opt/module/hadoop-3.1.3/ bin/hdfs namenode -format

  1. 出现下列提示表示格式化成功。

INFO common.Storage: Storage directory ///tmp/dfs/name has been successfully formatted.

  1. - **单机启动hdfs**
  2. **core-site.xml,这里配哪一台(`bigdata-hk-node1`),哪一台启动NameNodeNN)。**
  3. ```bash
  4. cd /opt/module/hadoop-3.1.3/
  5. # 启动NameNode(NN)
  6. # sbin/hadoop-daemon.sh start namenode # 过时(hadoop-2.x)
  7. bin/hdfs --daemon start namenode
  8. # 启动DataNode(DN)
  9. # sbin/hadoop-daemon.sh start datanode # 过时(hadoop-2.x)
  10. bin/hdfs --daemon start datanode

启动完成后,输入jps查看进程,如果看到以下进程,表示NameNode节点基本ok了。

  1. jps
  2. **** DataNode
  3. **** NameNode

Web UI验证(NN):http://bigdata-hk-node1:9870

  • 单机停止hdfs ```bash cd /opt/module/hadoop-3.1.3/

停止NameNode(NN)

sbin/hadoop-daemon.sh stop namenode # 过时(hadoop-2.x)

bin/hdfs —daemon stop namenode

停止DataNode(DN)

sbin/hadoop-daemon.sh stop datanode # 过时(hadoop-2.x)

bin/hdfs —daemon stop datanode

  1. <a name="Ce6ca"></a>
  2. ## 5.2. YARN单机部署
  3. - **yarn配置**
  4. 1. 配置mapred-env.sh。
  5. ```bash
  6. vi /opt/module/hadoop-3.1.3/etc/hadoop/mapred-env.sh

配置如下(新增,默认该文件全部是注释的):

  1. export JAVA_HOME=/opt/module/jdk1.8.0_221
  1. 配置mapred-site.xml。

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml

    配置如下:

    1. <!-- 配置MapReduce运行环境,yarn/yarn-tez -->
    2. <property>
    3. <name>mapreduce.framework.name</name>
    4. <value>yarn</value>
    5. </property>
    6. <!-- 日志查看IPC及WEB UI配置-->
    7. <property>
    8. <name>mapreduce.jobhistory.address</name>
    9. <value>bigdata-hk-node2:10020</value>
    10. </property>
    11. <property>
    12. <name>mapreduce.jobhistory.webapp.address</name>
    13. <value>bigdata-hk-node2:19888</value>
    14. </property>
    15. <property>
    16. <name>yarn.app.mapreduce.am.env</name>
    17. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    18. </property>
    19. <property>
    20. <name>mapreduce.map.env</name>
    21. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    22. </property>
    23. <property>
    24. <name>mapreduce.reduce.env</name>
    25. <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    26. </property>
    27. <!-- 配置正在运行中的日志在hdfs上的存放路径 -->
    28. <property>
    29. <name>mapreduce.jobhistory.intermediate-done-dir</name>
    30. <value>/jobhistory/done_intermediate</value>
    31. </property>
    32. <!-- 配置运行过的日志存放在hdfs上的存放路径 -->
    33. <property>
    34. <name>mapreduce.jobhistory.done-dir</name>
    35. <value>/jobhistory/done</value>
    36. </property>
    37. <property>
    38. <name>mapreduce.application.classpath</name>
    39. <value>
    40. /opt/module/hadoop-3.1.3/etc/hadoop,
    41. /opt/module/hadoop-3.1.3/share/hadoop/common/lib/*,
    42. /opt/module/hadoop-3.1.3/share/hadoop/common/*,
    43. /opt/module/hadoop-3.1.3/share/hadoop/hdfs,
    44. /opt/module/hadoop-3.1.3/share/hadoop/hdfs/lib/*,
    45. /opt/module/hadoop-3.1.3/share/hadoop/hdfs/*,
    46. /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/lib/*,
    47. /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/*,
    48. /opt/module/hadoop-3.1.3/share/hadoop/yarn,
    49. /opt/module/hadoop-3.1.3/share/hadoop/yarn/lib/*,
    50. /opt/module/hadoop-3.1.3/share/hadoop/yarn/*
    51. </value>
    52. </property>

    说明:通过命令hadoop classpath可获取Hadoop ClassPath,配置于:${mapreduce.application.classpath},解决异常:“Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster”。

  2. 配置yarn-env.sh。

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/yarn-env.sh

    配置如下(新增,可加在文件末尾G):

    1. export JAVA_HOME=/opt/module/jdk1.8.0_221
  3. 配置yarn-site.xml。

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml

    配置如下:

    1. <!-- RM节点 -->
    2. <property>
    3. <name>yarn.resourcemanager.hostname</name>
    4. <value>bigdata-hk-node2</value>
    5. </property>
    6. <!-- NM上运行的附属服务,用于提升Shuffle计算性能。mapreduce_shuffle/spark_shuffle -->
    7. <property>
    8. <name>yarn.nodemanager.aux-services</name>
    9. <value>mapreduce_shuffle</value>
    10. </property>
    11. <!-- 环境变量的继承 -->
    12. <property>
    13. <name>yarn.nodemanager.env-whitelist</name>
    14. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    15. </property>
    16. <!-- 如果没配置ApplicationMaster入口无法使用,默认:${yarn.resourcemanager.hostname}:8088 -->
    17. <property>
    18. <name>yarn.resourcemanager.webapp.address</name>
    19. <value>bigdata-hk-node2:8088</value>
    20. </property>
    21. <!-- 开启日志聚集功能,日志聚合到HDFS提供给WEB UI查看 -->
    22. <property>
    23. <name>yarn.log-aggregation-enable</name>
    24. <value>true</value>
    25. </property>
    26. <!-- 设置日志聚集服务器地址 -->
    27. <property>
    28. <name>yarn.log.server.url</name>
    29. <value>http://bigdata-hk-node2:19888/jobhistory/logs</value>
    30. </property>
    31. <!-- 设置日志保留时间为7天 -->
    32. <property>
    33. <name>yarn.log-aggregation.retain-seconds</name>
    34. <value>604800</value>
    35. </property>
    36. <!-- 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
    37. <property>
    38. <name>yarn.nodemanager.vmem-check-enabled</name>
    39. <value>false</value>
    40. </property>
    41. <property>
    42. <name>yarn.nodemanager.pmem-check-enabled</name>
    43. <value>false</value>
    44. </property>
    45. <property>
    46. <name>yarn.application.classpath</name>
    47. <value>
    48. /opt/module/hadoop-3.1.3/etc/hadoop,
    49. /opt/module/hadoop-3.1.3/share/hadoop/common/lib/*,
    50. /opt/module/hadoop-3.1.3/share/hadoop/common/*,
    51. /opt/module/hadoop-3.1.3/share/hadoop/hdfs,
    52. /opt/module/hadoop-3.1.3/share/hadoop/hdfs/lib/*,
    53. /opt/module/hadoop-3.1.3/share/hadoop/hdfs/*,
    54. /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/lib/*,
    55. /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/*,
    56. /opt/module/hadoop-3.1.3/share/hadoop/yarn,
    57. /opt/module/hadoop-3.1.3/share/hadoop/yarn/lib/*,
    58. /opt/module/hadoop-3.1.3/share/hadoop/yarn/*
    59. </value>
    60. </property>

    说明:通过命令hadoop classpath可获取Hadoop ClassPath,配置于:${yarn.application.classpath},解决异常:“Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster”。

  • 单机启动YARN

    yarn-site.xml,这里配哪一台(bigdata-hk-node2),哪一台启动ResourceManager(RM)。若YARN准备部署的节点与NN不同,则需要提前分发hadoop至YARN部署节点。

    1. # `vagrant`用户下操作
    2. scp -r /opt/module/hadoop-3.1.3 vagrant@bigdata-hk-node2:/opt/module/

    登录bigdata-hk-node2验证YARN: ```bash cd /opt/module/hadoop-3.1.3/

启动ResourceManager(RM)

sbin/yarn-daemon.sh start resourcemanager # 过时(hadoop-2.x)

bin/yarn —daemon start resourcemanager

启动NodeManager(NM)

sbin/yarn-daemon.sh start nodemanager # 过时(hadoop-2.x)

bin/yarn —daemon start nodemanager

  1. 输入`jps`查看进程,如果看到以下进程,表示ResourceManager节点基本ok了。
  2. ```bash
  3. jps
  4. **** ResourceManager
  5. **** NodeManager

Web UI验证(YARN):http://bigdata-hk-node2:8088

  • 单机停止YARN ```bash cd /opt/module/hadoop-3.1.3/

停止ResourceManager(RM)

sbin/yarn-daemon.sh stop resourcemanager # 过时(hadoop-2.x)

bin/yarn —daemon stop resourcemanager

停止NodeManager(NM)

sbin/yarn-daemon.sh stop nodemanager # 过时(hadoop-2.x)

bin/yarn —daemon stop nodemanager

  1. <a name="0AyJR"></a>
  2. ## 5.3. HDFS集群部署
  3. **第一次启动前,清除各节点tmp目录,并重新格式化NameNode(NN)。**
  4. ```bash
  5. # 清理logs和tmp
  6. rm -rf /opt/module/hadoop-3.1.3/logs/*
  7. rm -rf /opt/module/hadoop-3.1.3/tmp/*
  8. # 重新格式化HDFS
  9. cd /opt/module/hadoop-3.1.3/
  10. bin/hdfs namenode -format
  • 配置从节点

    1. vi /opt/module/hadoop-3.1.3/etc/hadoop/workers

    配置如下:

    1. bigdata-hk-node1
    2. bigdata-hk-node2
    3. bigdata-hk-node3

    注意:以上配置单行内容不能出现空格,且最后一行不能为空行。

  • 环境变量设置

    1. sudo vi /etc/profile.d/bigdata_env.sh # :$(或G:`shift+g`)到达行尾添加

    配置如下:

    1. # HADOOP_HOME
    2. export HADOOP_HOME=/opt/module/hadoop-3.1.3
    3. export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
  • 分发Hadoop ```bash

    vagrant用户下操作

    scp -r /opt/module/hadoop-3.1.3 vagrant@bigdata-hk-node2:/opt/module/ scp -r /opt/module/hadoop-3.1.3 vagrant@bigdata-hk-node3:/opt/module/

root用户下操作

sudo scp /etc/profile.d/bigdata_env.sh root@bigdata-hk-node2:/etc/profile.d/ sudo scp /etc/profile.d/bigdata_env.sh root@bigdata-hk-node3:/etc/profile.d/

  1. **注:如果Hadoop临时目录(`tmp`)不在Hadoop包中,从节点上仍然要先手动创建并赋权。**
  2. - **环境变量生效**
  3. ```bash
  4. # 所有节点激活环境变量或重新登录
  5. source /etc/profile
  • 集群启动hdfs

    1. **core-site.xml,这里配哪一台(`bigdata-hk-node1`),哪一台启动NameNodeNN)。**
    1. cd /opt/module/hadoop-3.1.3/
    2. sbin/start-dfs.sh

    启动完成后,输入jps查看进程,如果看到以下进程,表示NameNode节点基本ok了。 ```bash

    bigdata-hk-node1

    jps DataNode NameNode

bigdata-hk-node2

jps ** DataNode

bigdata-hk-node3

jps DataNode SecondaryNameNode

  1. Web UI验证:[http://bigdata-hk-node1:9870](http://bigdata-hk-node1:9870)
  2. - **集群停止hdfs**
  3. ```bash
  4. cd /opt/module/hadoop-3.1.3/
  5. sbin/stop-dfs.sh

5.4. YARN集群部署

  • 集群启动YARN

    1. ** yarn-site.xml,这里配哪一台(`bigdata-hk-node2`),哪一台启动ResourceManagerRM)。**

    ```bash cd /opt/module/hadoop-3.1.3/

启动YARN

sbin/start-yarn.sh

启动日志服务,默认日志路径:/tmp/hadoop-yarn/staging/history

由于日志存储于HDFS上,故使用日志服务需同时启动HDFS和YARN

sbin/mr-jobhistory-daemon.sh start historyserver # 过时(hadoop-2.x)

bin/mapred —daemon start historyserver

  1. 输入`jps`查看进程,如果看到以下进程,表示ResourceManager节点基本ok了。
  2. ```bash
  3. # bigdata-hk-node1
  4. jps
  5. **** NodeManager
  6. # bigdata-hk-node2
  7. jps
  8. **** ResourceManager
  9. **** NodeManager
  10. **** JobHistoryServer
  11. # bigdata-hk-node3
  12. jps
  13. **** NodeManager

Web UI验证(YARN):http://bigdata-hk-node2:8088
Web UI验证(JobHistoryServer):http://bigdata-hk-node2:19888/jobhistory

  • 集群停止YARN ```bash cd /opt/module/hadoop-3.1.3

停止日志服务

sbin/mr-jobhistory-daemon.sh stop historyserver # 过时(hadoop-2.x)

bin/mapred —daemon stop historyserver

停止YARN

sbin/stop-yarn.sh ```

附录

附录:Hadoop-3.x端口变更

分类 用途 Haddop-2.x Haddop-3.x
NNPorts fs.defaultFS 8020/9000 8020/9000/9820
NNPorts NN HTTP UI 50070 9870
NNPorts NN HTTPS UI 50470 9871
SNN ports SNN HTTP 50091 9869
SNN ports SNN HTTP UI 50090 9868
DN ports DN IPC 50020 9867
DN ports DN 50010 9866
DN ports DN HTTP UI(dfs.datanode.http.address) 50075 9864
DN ports DN HTTPS UI(dfs.datanode.https.address) 50475 9865
YARN ports YARN UI 8088 8088