• 软件和操作系统
    • JDK版本:JDK8版本及以上
  • Hadoop 搭建方式

    • 单机模式:单节点,非集群。
    • 单机伪分布式模式:单节点,多线程模拟集群的效果。
    • 完全分布式模式:多台节点,真正的分布式 Hadoop 集群的搭建。

      1 虚拟机环境准备

  • 三台虚拟机

    1. 静态IP
    2. 关闭防火墙
    3. 修改主机名
    4. 配置免密登录
    5. 集群时间同步
  • /opt 目录下创建文件夹
    • mkdir -p /opt/software —> 软件安装包存放目录
    • mkdir -p /opt/servers —> 软件安装目录
  • Hadoop下载地址
  • 上传 Hadoop安装文件到 /opt/software 目录中

    2 集群规划

    | 框架 | linux121 | linux122 | linux123 | | :—-: | :—-: | :—-: | :—-: | | HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode | | YARN | NodeManager | NodeManager | ResourceManager、NodeManager |

3 安装 Hadoop

  1. 登录linux121节点,进入 /opt/software,解压安装文件到 /opt/servers
    • tar -zxvf hadoop-2.9.2.tar.gz -C /opt/servers
  2. 查看是否解压成功
    • ll /opt/servers/hadoop-2.9.2
  3. 添加 hadoop 环境变量

    • vim /etc/profile
    • /etc/profile 文件中添加以下内容
      1. # HADOOP_HOME
      2. export HADOOP_HOME=/opt/servers/hadoop-2.9.2
      3. export PATH=$PATH:$HADOOP_HOME/bin
      4. export PATH=$PATH:$HADOOP_HOME/sbin
  4. 使环境变量生效

    • source /etc/profile
  5. 验证 hadoop
    • hadoop version

image.png

  1. 目录介绍

    1. drwxr-xr-x. 2 root root 194 Nov 13 2018 bin
    2. drwxr-xr-x. 3 root root 20 Nov 13 2018 etc
    3. drwxr-xr-x. 2 root root 106 Nov 13 2018 include
    4. drwxr-xr-x. 3 root root 20 Nov 13 2018 lib
    5. drwxr-xr-x. 2 root root 239 Nov 13 2018 libexec
    6. -rw-r--r--. 1 root root 106210 Nov 13 2018 LICENSE.txt
    7. -rw-r--r--. 1 root root 15917 Nov 13 2018 NOTICE.txt
    8. -rw-r--r--. 1 root root 1366 Nov 13 2018 README.txt
    9. drwxr-xr-x. 3 root root 4096 Nov 13 2018 sbin
    10. drwxr-xr-x. 4 root root 31 Nov 13 2018 share
    • bin⽬录:对Hadoop进⾏操作的相关命令,如hadoop,hdfs等
    • etc⽬录:Hadoop的配置⽂件⽬录,⼊hdfs-site.xml,core-site.xml等
    • lib⽬录:Hadoop本地库(解压缩的依赖)
    • sbin⽬录:存放的是Hadoop集群启动停⽌相关脚本,命令
    • share⽬录:Hadoop的⼀些jar,官⽅案例jar,⽂档等

      4 集群配置

      4.1 HDFS 集群配置

  • 寻找到配置文件所在目录
    • cd /opt/lagou/servers/hadoop-2.9.2/etc/hadoop
  • 配置:hadoop-env.sh

    • 将JDK路径 明确配置 给 HDFS
      • 寻找 JDK的目录:echo $JAVA_HOME
        • 得到路径:/usr/java/jdk1.8.0_231
      • 将得到的路径加入到 hadoop-env.sh 文件中
        1. # export JAVA_HOME=${JAVA_HOME}
        2. # 将以上语句修改为
        3. export JAVA_HOME=/usr/java/jdk1.8.0_231
  • 配置:core-site.xml

    hadoop.tmp.dir

    1. <value>/opt/lagou/servers/hadoop-2.9.2/data/tmp</value>

    ```

  • 配置:hdfs-site.xml

  • 配置:slaves 文件

    • 注:该文件中添加的 内容结尾不允许有空格,文件中不允许有空行
      1. linux121
      2. linux122
      3. linux123

      4.2 MapReduce 集群配置

  • 配置:mapred-env.sh

    1. #添加以下语句
    2. export JAVA_HOME=/usr/java/jdk1.8.0_231
  • 配置:mapred-site.xml

  • 配置:yarn-env.sh

    export JAVA_HOME=/usr/java/jdk1.8.0_231
    
  • 配置:yarn-site.xml

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

    ```

  • 配置:slaves 文件

    • 配置HDFS时已经配置过,无需再配置
  • 注**:**

    • Hadoop安装目录所属用户和用户组信息,默认是 501 dialout,而我们操作hadoop集群的用户使用的是虚拟机的root用户
    • 为了避免信息混乱,应修改Hadoop安装目录所属 用户用户组
      • chown -R root:root /opt/lagou/servers/hadoop-2.9.2

        4.4 分发配置

        rsync 远程同步工具

  • rsync 主要用于备份和镜像,具有速度快避免复制相同内容支持符号链接的优点

  • rsync 与 scp 的区别
    • rsync 速度比 scp 速度快
    • rsync 只对差异文件做更新,而 scp 是把所有文件都复制过去
  • rsync 基本语法
    • 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
    • rsync -rvl $pdir/$fname $user@host:$pdir/$fname
  • rsync 的使用案例

    • ① 三台虚拟机安装 rsync ( 通信双方都需要安装 rsync
      • yum -y install rsync
    • ② 把linux121机器上的 /opt/lagou/software目录同步到linux122服务器的root用户下的 /opt/ 目录
      • **rsync**``** **``**-rvl**``** **``**/opt/lagou/software/**``** **``**root@linux122:/opt/lagou/software**

        编写 集群分发脚本

  • 需求:循环复制文件到集群所有节点的相同目录下

    • rsync 原始拷贝目录
      • rsync -rvl /opt/module root@linux123:/opt/
  • 期望脚本
    • 脚本 + 要同步的文件名称
  • 说明
    • /usr/local/bin 这个目录下存放的脚本,root 用户可以在系统任何地方直接执行
  • 脚本实现

/usr/local/bin 目录下创建文件 rsync-script

  • touch /usr/local/bin/rsync-script
  • 文件内容细节说明
    • basename 命令 可求得文件的文件名,如:
      • basename /usr/local/bin/rsync-script 得到结果是:rsync-script
    • dirname 命令 可求得文件所在目录,如:
      • dirname /usr/local/bin/rsync-script 得到结果是:/usr/local/bin
    • 在脚本文件中要用 反引号 获取命令的结果,然后才能赋值给变量 ,如
      • file_name=basename /usr/local/bin/rsync-script``
    • 在以下脚本中,如果拷贝文件的时候,文件名不带路径,那么 dirname 命令得到的结果是 . ,表示当前目录。可以在此命令基础上再加一条命令:cd -P ,表示进入物理路径,如:cd -P . ,此时会进入该目录中,然后通过 pwd 打印出当前目录,即可获得该文件所在目录的路径,以下是一个例子:
      • pdir =cd -P $(dirname $p1); pwd`` ```shell

        !/bin/bash

1 获取命令输入参数的个数,如果个数为0,直接退出命令

paramnum=$# if((paramnum==0)); then echo no params; exit; fi

2 根据传入参数获取文件名称

将传入的第一个参数赋值给变量p1

p1=$1

将命令 basename $p1 的执行结果 赋值给变量file_name

file_name=basename $p1 echo fname=$file_name

3 获取输入参数的绝对路径

pdir=cd -P $(dirname $p1); pwd echo pdir=$pidr

4 获取用户名称

user=whoami

5 循环执行 rsync

for((host=121; host<124; host++)); do echo ————————————linux$host—————————————— rsync -rvl $pdir/$file_name $user@linux$host:$pdir done

**②** 修改脚本 rsync-script 的执行权限

   - `chmod 777 rsync-script`

**③** 调用脚本形式:

   - `rsync-script 文件路径+名称`

**④** 调用脚本分发Hadoop安装目录到其他节点

   - **`rsync-script /opt/lagou/servers/hadoop-2.9.2`**
<a name="QQ42g"></a>
## 4.5 配置历史服务器

- 在 YARN 中运行任务产生的日志数据还不能查看。为了查看程序的历史运行情况,需要配置以下历史日志服务器。具体配置步骤如下:

1. **配置 **`**mapred-site.xml**`
   - 在该文件中加入以下内容
```xml
<!--历史服务器端地址-->
<property>
    <name>mapreduce.jobhistory.address</name>
  <value>linux121:10020</value>
</property>

<!--历史服务器web端地址-->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
  <value>linux121:19888</value>
</property>
  1. 从 linux121 分发 mapred-site.xml 到其他节点

    • rsync-script mapred-site.xml
  2. 启动历史服务器

    • sbin/mr-jobhistory-daemon.sh start historyserver
  3. 查看历史服务器是否启动

    • jps
  4. 查看 JobHistory

    • http://linux121:19888/joinhistory
  • 此时 每个节点计算后产生的日志还不能 聚集到同一个主机上,需再进行配置

image.png

配置日志的聚集

  • 日志聚集:应用程序(Job)运行完成以后,将应用运行日志信息从各个 task 汇总上传到 HDFS 系统上
  • 日志聚集功能的好处:可以方便地查看到程序运行详情,方便开发调试
  • 注:开启日志聚集功能,需要重新启动 NodeManager、Resourcemanager 和 HistoryManager
  • 开启日志聚集功能的步骤

① 配置 **yarn-site.xml**

  • 在该文件中增加以下配置 ```xml yarn.log-aggregation-enable true

yarn.log-aggregation.retain-seconds 604800 `` **②** **分发 **yarn-site.xml` 到集群其他节点

  • rsync-script yarn-site.xml

关闭 Nodemanager、ResourceManager 和 HistoryManager

  • sbin/yarn-daemon.sh stop resourcemanager
  • sbin/yarn-daemon.sh stop nodemanager
  • sbin/mr-joinhistory-daemon.sh stop historyserver

启动 Nodenamager、ResourceManager 和 HistoryManager

  • sbin/yarn-daemon.sh start resourcemanager
  • sbin/yarn-daemon.sh start nodemanager
  • sbin/mr-joinhistory-daemon.sh start historyserver

⑤ 删除 HDFS 上已经存在的输出文件

  • bin/hdfs dfs -rm -r /wcoutput

⑥ 执行 WordCount 程序

  • hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput

⑦ 查看日志,如图所示

image.png
image.png

5 启动集群

  • 注:如果集群是**第一次启动,需要在 NameNode所在节点** 格式化 NameNode,非第一次则一定不要执行格式化 NameNode 操作

    5.1 单节点启动

  • 第一次启动时 格式化

    • hadoop namenode -format

image.png

  1. 在 linux121上启动 NameNode,并用 命令 jps 来查看 Java 进程
    • hadoop-daemon.sh start namenode
    • jps

image.png

  1. 在 linux121、linux122、linux123上分别启动 DataNode
    • 注:每台虚拟机都应该给 Hadoop安装目录 配置环境变量
    • hadoop-daemon.sh start datanode
    • jps

image.png

  1. web 端查看 hdfs 界面(NameNode 所在节点)
  • 在 浏览器窗口输入 linux121:50070 可访问到 NameNode 首页

image.png

  • 查看 HDFS 集群正常节点

image.png

  1. Yarn 集群单节点启动
    • 在 linux123 开启 resourcemanager
      • yarn-daemon.sh start resourcemanager
    • 在 linux121、linux122、linux123 上分别启动 nodemanager
      • yarn-daemon.sh start nodemanager
    • 在 web 中查看 yarn( resourceManager 所在节点)
      • linux123:8088image.png

        5.2 集群群起

  • 如果已经以单节点方式启动了 Hadoop,需要先停止之前启动的 NameNode 与 DataNode进程,如果之前 NameNode 没有执行格式化,这里需要执行格式化!!!
    • hadoop namenode -format
  1. 启动 HDFS
    • [root@linux121 hadoop-2.9.2]# start-dfs.sh

image.png

  1. 启动 YARN
    • [root@linux123 hadoop-2.9.2]# start-yarn.sh
  • 注:NameNode 和 ResourceManager 不是同一台机器,应该在 **NameNode 所在机器启动 HDFS,在ResourceManager 所在的机器上启动 YARN**

    5.3 集群启动停止命令汇总

  1. 各个服务组件逐一启动/停止

① 分别启动/停止 HDFS 组件

  • hadoop-daemon.sh`**start**/**stop** **namenode**/**datanode**/**secondarynamenode`**

② 启动/停止 YARN

  • yarn-daemon.sh`**start**/**stop** **resourcemanager**/**nodemanager`**
  1. 各个模块分开启动/停止(配置 ssh 是前提)—> **常用**

① 整体启动/停止 HDFS(在nn所在节点进行)

  • start-dfs.sh/stop-dfs.sh

② 整体启动/停止 YARN(在resourceManager所在节点进行)

  • start-yarn.sh/stop-yarn.sh