1.虚拟机环境准备

  1. 三台虚拟机(静态IP, 关闭防火墙 , 修改主机名 , 配置免密登录 , 集群时间同步)
  2. Hadoop下载地址
    1. https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/

    2.集群规划

    | 框架 | 192.168.31.155(hadoop001) | 192.168.31.23(hadoop003) | 192.168.31.24(hadoop003) | | —- | —- | —- | —- | | HDFS | NameNode , DataNode,JobHistoryServer | DataNode | SeconddaryNameNode, DataNode | | YARN | NodeManager | NodeManager | NodeManager , ResourceManger |

3.安装hadoop

  • 登录192.168.31.155节点, 进入/opt目录 , 解压安装文件/opt

    1. $ tar -zxvf hadoop-2.9.2.tar.gz - C /opt
  • 查看是否解压成功

    1. $ ll /opt/hadoop-2.9.2
  • 添加Hadoop到环境变量vim /etc/profile

    1. ## HADOOP_HOME
    2. export JAVA_HOME=/opt/jdk1.8.0_221
    3. export HADOOP_HOME=/opt/hadoop-2.9.2
    4. export JAVA_PATH=$JAVA_HOME/bin
    5. export PATH=$JAVA_HOME:$JAVA_PATH:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 让环境变量生效

    1. $ source /etc/profile
  • 验证hadoop

    1. $ hadoop version
  • 校验结果

image.png

  • hadoop 目录

image.png
bin目录: 堆hadoop进行操作的相关命令 , 如hadoop , hdfs等等
etc目录: hadoop的配置文件目录 , 如hdfs-site.xml , core-site.xml等等
lib目录: hadoop本地库(解压缩的依赖)
sbin目录: 存放的是hadoop集群启动停止相关脚本 , 命令
share目录: Hadoop的一些jar , 官方案例jar, 文档等

1.集群配置

注意: 所有的服务器都要使用hostname进行指定 , 否则会影响后面DataNode的注册

Hadoop集群配置 = HDFS集群配置 + MapReduce集群配置 + Yarn集群配置

  • HDFS集群配置
    • 将JDK路径给HDFS(hadoop-env.sh)
    • 指定NameNode节点以及数据存储目录(修改core-site.xml)
    • 指定SecondaryNameNode节点, (修改hdfs-site.xml)
    • 指定DataNode从节点 (修改/etc/hadoop/slaves文件,每个节点配置信息独占一行)
  • MapReduce集群配置
    • 将JDK路径明确配置给MapReduce(修改mapred-env.sh)
    • 指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)
  • Yarn集群配置
    • 将JDK路径明确配置给Yarn(修改yarn-env.sh)
    • 指定ResourceManager老大节点所在你计算机节点(修改yarn-site.xml)
    • 指定NodeManager节点(会通过slaves文件内容确定)

image.png
集群配置具体配置

1.HDFS集群配置(hadoop001)

  1. cd /opt/hadoop-2.9.2/etc/hadoop
  • 配置: hadoop-env.sh

将JDK路径明确配置给HDFS

  1. $ vim /hadoop-env.sh
  2. export JAVA_HOME=/opt/jdk1.8.0_221
  • 指定NameNode节点以及数据存储目录(修改core-site.xml)
    1. $ vim core-site.xml
    ```xml
    1. <!-- 指定HDFS中NameNode的地址 -->
    2. <property>
    3. <name>fs.defaultFS</name>
    4. <value>hdfs://hadoop001:9000</value>
    5. </property>
    6. <!-- 指定Hadoop运行时产生文件的存储目录 -->
    7. <property>
    8. <name>hadoop.tmp.dir</name>
    9. <value>/opt/hadoop-2.9.2/data/tmp</value>
    10. </property>
  1. core-site.xml的默认配置
  2. ```xml
  3. https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-common/core-default.xml
  • 指定secondarynamenode节点(修改hdfs-site.xml)
    1. $ vim hdfs-site.xml
    ```xml
    1. <!-- 指定Hadoop辅助名称节点主机配置 -->
    2. <property>
    3. <name>dfs.namenode.secondary.http-address</name>
    4. <value>hadoop003:50090</value>
    5. </property>
    6. <!--副本数量 -->
    7. <property>
    8. <name>dfs.replication</name>
    9. <value>3</value>
    10. </property>
  1. 官方默认配置
  2. ```shell
  3. https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
  • 指定datanode从节点(修改slaves, 每个节点配置信息占一行)
    1. $ vim slaves
    2. hadoop001
    3. hadoop002
    4. hadoop003

    注意: 该文件中添加的内容结尾不允许有空格 , 文件中不允许有空行

2.MapReduce集群配置(hadoop001)

  • 指定MapReduce使用的JDK路径(修改mapred-env.sh)

    1. $ vim mapred-env.sh
    1. export JAVA_HOME=/opt/jdk1.8.0_221
  • 指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)

    1. $ mv mapred-site.template.xml mapred-site.xml
    2. $ vim mapred-site.xml

    ```xml

    1. <property>
    2. <name>mapreduce.framework.name</name>
    3. <value>yarn</value>
    4. </property>
  1. mapred-site.xml默认配置
  2. ```shell
  3. https://hadoop.apache.org/docs/r2.9.2/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

3.集群配置(hadoop001)

  • 指定JDK路径(修改yarn-env.sh)

    1. $ vim yarn-env.sh
    1. export JAVA_HOME=/opt/jdk1.8.0_221
  • 指定ResourceManager的master节点信息(修改yarn-site.xml)

    1. $ vim yarn-site.xml
    1. <!--指定YARN的ResourceManager的地址 -->
    2. <property>
    3. <name>yarn.resourcemanager.hostname</name>
    4. <value>hadoop003</value>
    5. </property>
    6. <!-- Reducer获取数据的方式 -->
    7. <property>
    8. <name>yarn.nodemanager.aux-services</name>
    9. <value>mapreduce_shuffle</value>
    10. </property>

    yarn-site.xml的默认配置

    1. https://hadoop.apache.org/docs/r2.9.2/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

注意:
Hadoop安装目录所属用户和所属用户组信息 , 默认是501 dialout, 而我们操作hadoop集群的用户使用的是虚拟机的root用户,
为了避免出现信息混乱 , 修改安装目录所属用户和用户组

2.分发配置

编写集群分发脚本rsync-script

  • rsync远程同步工具

rsync主要用于备份和镜像 , 具有速度快 , 避免复制相同内容和支持符号链接的优点.
rsync和scp区域 , 用rsync做文件的复制要比scp的速度要快 , rsync只对差异文件做更新 , scp是把所有文件都复制过去

  1. 基本语法

    1. $ rsync -rvl $pdir/$fname $user@host:$pdir/$fname
    2. # 命令 选项参数 要拷贝文件路径/名称 目的用户@主机:目的路径/名称
  2. 选项参数 | 选项 | 功能 | | —- | —- | | -r | 递归 | | -v | 显示复制过程 | | -l | 拷贝符号链接 |

  • rsync案例
  1. 三台虚拟机安装rsync(执行安装需要保证机器联网)

    1. $ yum install -y rsync
  2. 把hadoop001机器上的/opt下的软件同步到hadoop002服务器的root用户下的/opt

    1. $ rsync -rvl /opt root@hadoop002:/opt
  • 集群分发脚本编写
  1. 编写脚本 vim /opt/hadoop-2.9.2/rsync-script ```shell

    !/bin/bash

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

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

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

p1=$1 file_name=basename $p1 echo fnmae=$file_name

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

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

4.获取用户名称

user=whoami

5.开始分发数据

echo “————————————————linux@24” rsync -rvl $pdir/$file_name $user@192.168.31.24:$pdir echo “————————————————linux@23” rsync -rvl $pdir/$file_name $user@192.168.31.23:$pdir

  1. 2. 赋予脚本权限(hadoop001)
  2. ```shell
  3. $ chmod 777 rsync-script
  1. 调用脚本形式: rsync-script文件名称

    1. $ rsync-script /home/root/bin
  2. 调用脚本分发Hadoop安装目录到其他节点

    1. $ rsync-script /opt/hadoop-2.9.2

    4.启动集群

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

    1.单节点启动(hadoop001)

    1. $ hadoop namenode -format

    格式化命令执行效果:
    image.png
    格式化后创建的文件:/opt/hadoop-2.9.2/data/tmp/dfs/name/current/
    image.png

  3. 在hadoop001上启动NameNode

    1. $ hadoop-daemon.sh start namenode
    2. $ jps
    3. # jps之后会有NameNode进程在运行
  4. 在hadoop001/hadoop002/hadoop003上分别启动DataNode

    1. $ hadoop-daemon.sh start datanode
    2. $ jps
    3. # jps之后 , hadoop001上面有NameNode/DataNode两个节点
    4. # hadoop002上面DataNode一个节点
    5. # hadoop003上面DataNode一个节点
  5. web端查看Hdfs界面

    1. http://192.168.31.155:50070/dfshealth.html#tab-overview
  6. 在自己本地hosts配置

    1. hadoop001 192.168.31.155
    2. hadoop002 192.168.31.24
    3. hadoop003 192.168.31.23

    image.png
    查看HDFS集群正常节点
    image.png

  7. Yarn集群单节点启动 ```shell [hadoop003]$ yarn-daemon.sh start resourcemanager [hadoop003]$ jps

    就会出现DataNode ResourceManager

[hadoop002]$ yarn-daemon.sh start nodemanager [hadoop002]$ jps

就会出现DataNode && NodeManager

[hadoop001]$ yarn-daemon.sh start nodemanager

就会出现NameNode DataNode NodeManager

  1. <a name="jEACG"></a>
  2. ## 2.集群启动
  3. 1. 如果已经单节点方式启动了Hadoop, 可以先停止之前的启动的NameNode和DataNode进程, 如果之前NameNode没有执行格式化, 这里就需要执行格式化操作
  4. ```shell
  5. [hadoop001]$ hadoop namenode -format
  1. 启动HDFS ```shell [hadoop001]$ start-dfs.sh [hadoop001]$ jps

    NameNode DataNode

[hadoop002]$ jps

DataNode

[hadoop003]$ jps

DataNode SecondaryNameNode

  1. 3. 启动YARN
  2. ```shell
  3. [hadoop003]$ start-yarn.sh

注意: NameNode和ResourceManager不是在同一台机器, 不能再NameNode上启动YARN, 应该在ResourceManager所在的机器上启动YARN.

3.Hadoop集群启动停止命令总汇

  1. 各个服务组件逐一启动/停止
    1. 分别启动/停止HDFS组件 ```shell $ hadoop-daemon.sh start/stop [namenode/datanode/secondarynamenode]
  1. 2. 启动/停止YARN
  2. ```shell
  3. $ yarn-daemon.sh start/stop [resourcemanager/nodemanager]
  1. 各个模块分开启动/停止(配置ssh的前提)常用

    1. 整体启动/停止HDFS

      1. $ start-dfs.sh / stop-dfs.sh
    2. 整体启动/停止YARN

      1. $ start-yarn.sh / stop-yarn.sh

      5.集群测试

  2. HDFS分布式存储

从linux本地文件系统上传下载文件验证HDFS集群工作正常

  1. [hadoop001]$ hdfs dfs -mkdir /test/input # 在HDFS上面创建一个路径
  2. [hadoop001]$ mkdir /opt/hadoop-2.9.2/workspace #在linux上面创建一个目录
  3. [hadoop001]$ cd /opt/hadoop-2.9.2/workspace
  4. [hadoop001]$ vim test.txt # 写入hello world
  5. # 将本地文件上传到HDFS服务上
  6. [hadoop001]$ hdfs dfs -put /opt/hadoop-2.9.2/workspace/test.txt /test/input
  7. # 将HDFS下载文件到本地
  8. [hadoop001]$ hdfs dfs -get /test/input/test.txt
  1. MapReduce分布式计算
  • 在HDFS文件系统根目录下面创建一个wcinput文件夹

    1. [hadoop001]$ hdfs dfs -mkdir /wcinput
  • 在/opt/hadoop-2.9.2/workspace 目录下面创建一个wc.txt文件(本地文件系统)

    1. [hadoop001]$ cd /opt/hadoop-2.9.2/workspace
    2. [hadoop001]$ vim wc.txt
    3. 写入内容
    4. A B C D E F E
    5. A F R E S F G
  • 保存退出

    1. :wq
  • 上传wc.txt到hdfs目录下 / wcinput下面

    1. [hadoop001]$ hdfs dfs -put wc.txt /wcinput
  • 执行程序

    1. [hadoop001]$ cd /opt/hadoop-2.9.2
    2. [hadoop001]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput
  • 查看结果

    1. [hadoop001]$ hdfs dfs -cat /wcoutput/part-r-00000

    image.png

    6.配置历史服务器

    1.配置日志服务

    在yarn中运行的任务产生的日志数据不能查看 , 为了查看程序的实例运行情况 , 需要配置一下历史日志服务器

  1. 配置mapred-site.xml ```shell [hadoop001]$ cd /opt/hadoop-2.9.2/etc/hadoop [hadoop001]$ vim mapred-site.xml
  1. 该文件加入如下的配置
  2. ```xml
  3. <property>
  4. <name>mapreduce.jobhistory.address</name>
  5. <value>hadoop001:10020</value>
  6. </property>
  7. <!-- 历史服务器web端地址 -->
  8. <property>
  9. <name>mapreduce.jobhistory.webapp.address</name>
  10. <value>hadoop001:19888</value>
  11. </property>
  1. 分发到其他节点

    1. [hadoop001]$ rysnc-script mapred-site.xml
  2. 启动历史服务器

    1. [hadoop001]$ mr-jobhistory-daemon.sh start historyserver
  3. 查看历史服务器是否启动

    1. [hadoop001]$ jps
  4. 查看JobHistory

    1. http://hadoop001:19888/jobhistory

    image.png

    2.配置日志的聚集

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

  5. 配置yarn-site.xml

    1. [hadoop001]$ vim yarn-site.xml

    ```xml

    1. <property>
    2. <name>yarn.log-aggregation-enable</name>
    3. <value>true</value>
    4. </property>
  1. <property>
  2. <name>yarn.log-aggregation.retain-seconds</name>
  3. <value>604800</value>
  4. </property>
  5. <property>
  6. <name>yarn.log.server.url</name>
  7. <value>http://hadoop002:19888/jobhistory/logs</value>
  8. </property>
  1. 2. 分发yarn-site.xml到集群其他节点
  2. ```shell
  3. [hadoop001]$ rsync-script yarn-site.xml
  1. 关闭NodeManager, ResourceManager , HistoryManager ```shell [hadoop001]$ yarn-daemon.sh stop nodemanager [hadoop001]$ mr-jobhistory-daemon.sh stop historyserver

[hadoop002]$ yarn-daemon.sh stop nodemanager

[hadoop003]$ yarn-daemon.sh stop nodemanager [hadoop003]$ yarn-daemon.sh stop resourcemanager

  1. 4. 启动NodeManager , ResourceManager , HistoryManager
  2. ```shell
  3. [hadoop001]$ yarn-daemon.sh stop nodemanager
  4. [hadoop001]$ mr-jobhistory-daemon.sh stop historyserver
  5. [hadoop002]$ yarn-daemon.sh stop nodemanager
  6. [hadoop003]$ yarn-daemon.sh stop nodemanager
  7. [hadoop003]$ yarn-daemon.sh stop resourcemanager
  1. 删除HDFS上已经存在的输出文件

    1. [hadoop001]$ hdfs dfs -rm -R /wcoutput
  2. 执行WordCount程序

    1. [hadoop001]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /wcinput /wcoutput

image.png
image.png

hadoop001 hadoop002 hadoop003
start-dfs.sh/stop-dfs.sh

mr-jobhistory-daemon.sh stop|start historyserver | | yarn-daemon.sh stop|start resourcemanager
start-yarn.sh/stop-yarn.sh |