虚拟机环境

192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103 192.168.10.104 hadoop104

搭建前准备

  • 安装 epel-releaseyum install -y epel-release Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方repository 中是找不到的)
  • 关闭防火墙,关闭防火墙开机自启systemctl stop firewalld systemctl disable firewalld.service
  • 卸载虚拟机自带的 JDKrpm -qa | grep -i java | xargs -n1 rpm -e —nodeps
    • rpm -qa:查询所安装的所有 rpm 软件包
    • grep -i:忽略大小写
    • xargs -n1:表示每次只传递一个参数
    • rpm -e –nodeps:强制卸载软件
  • 修改 IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static NAME=”ens33” IPADDR=192.168.10.100 PREFIX=24 GATEWAY=192.168.10.2 DNS1=192.168.10.2
  • 修改主机名vim /etc/hostname hadoop100
  • 配置 Linux 克隆机主机名称映射 hosts 文件,打开/etc/hostsvim /etc/hosts 192.168.10.100 hadoop100 192.168.10.101 hadoop101 192.168.10.102 hadoop102
  • 安装 JDK(略)
  • 重启虚拟机reboot

hadoop101、hadoop102虚拟机步骤和上面一致,但是IP地址和主机名要对应修改

安装 Hadoop

  • 下载Hadoopcd /opt/software/ wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz
  • 解压安装文件到/opt/module 下面tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
  • 将 Hadoop 添加到环境变量vim /etc/profile.d/my_env.sh #HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.1.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
  • 让修改后的文件生效source /etc/profile
  • 测试是否安装成功hadoop version

    Hadoop 目录结构

    总用量 52 drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 bin drwxr-xr-x. 3 atguigu atguigu 4096 5 月 22 2017 etc drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 include drwxr-xr-x. 3 atguigu atguigu 4096 5 月 22 2017 lib drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 libexec -rw-r—r—. 1 atguigu atguigu 15429 5 月 22 2017 LICENSE.txt -rw-r—r—. 1 atguigu atguigu 101 5 月 22 2017 NOTICE.txt -rw-r—r—. 1 atguigu atguigu 1366 5 月 22 2017 README.txt drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 sbin drwxr-xr-x. 4 atguigu atguigu 4096 5 月 22 2017 share
    重要目录

  • bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本

  • etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
  • lib 目录:存放 adoop 的本地库(对数据进行压缩解压缩功能)
  • sbin 目录:存放启动或停止 Hadoop 相关服务的脚本
  • share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

    Hadoop 运行模式

    Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

  • 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。

  • 伪分布式模式:也是单机运行,但是具备 Hadoop 集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
  • 完全分布式模式:多台服务器组成分布式环境。生产环境使用。

    本地运行模式(官方 WordCount)

  • 创建在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹mkdir wcinput

  • 在 wcinput 文件下创建一个 word.txt 文件cd wcinput
  • 编辑 word.txt 文件vim word.txt hadoop yarn hadoop mapreduce atguigu atguigu
  • 回到 Hadoop 目录/opt/module/hadoop-3.1.3
  • 执行程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
  • 查看结果cat wcoutput/part-r-00000 atguigu 2 hadoop 2 mapreduce 1 yarn 1

    完全分布式运行模式

    环境:

  • 准备 3 台客户机(关闭防火墙、静态 IP、主机名称)

  • 安装 JDK
  • 配置环境变量
  • 安装 Hadoop
  • 配置环境变量
  • 配置集群
  • 单点启动
  • 配置 ssh
  • 群起并测试集群

    编写集群分发脚本 xsync

  • 在/home/atguigu/bin 目录下创建 xsync 文件cd /home/atguigu mkdir bin cd bin vim xsync

  • 在该文件中编写如下代码#!/bin/bash
    #1. 判断参数个数
    if [ $# -lt 1 ]
    then
    echo Not Enough Arguement!
    exit;
    fi
    #2. 遍历集群所有机器
    for host in hadoop102 hadoop103 hadoop104
    do
    echo ==================== $host ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
    #4. 判断文件是否存在
    if [ -e $file ]
    then
    #5. 获取父目录
    pdir=$(cd -P $(dirname $file); pwd)
    #6. 获取当前文件的名称
    fname=$(basename $file)
    ssh $host “mkdir -p $pdir”
    rsync -av $pdir/$fname $host:$pdir
    else
    echo $file does not exists!
    fi
    done
    done

  • 修改脚本 xsync 具有执行权限chmod +x xsync

  • 将脚本复制到/bin 中,以便全局调用sudo cp xsync /bin/
  • 同步环境变量配置(root 所有者)sudo ./bin/xsync
  • 让环境变量生效source /etc/profile

    集群配置

    集群部署规划

    注意:

  • NameNode 和 SecondaryNameNode 不要安装在同一台服务器

  • ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。 | | hadoop102 | hadoop103 | hadoop104 | | —- | —- | —- | —- | | HDFS | NameNode
    DataNode | DataNode | SecondaryNameNode
    DataNode | | YARN | NodeManager | ResourceManager
    NodeManager | NodeManager |

配置文件说明

Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

  • 默认配置文件: | 要获取的默认文件 | 文件存放在 Hadoop 的 jar 包中的位置 | | —- | —- | | [core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml | | [hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml | | [yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml | | [mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |

  • 自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

    配置集群

  • 核心配置文件

    • 配置 core-site.xmlcd $HADOOP_HOME/etc/hadoop vim core-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
      <?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>



      fs.defaultFS
      hdfs://hadoop102:8020



      hadoop.tmp.dir
      /opt/module/hadoop-3.1.3/data



      hadoop.http.staticuser.user
      atguigu

    • HDFS 配置文件配置 hdfs-site.xmlvim hdfs-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
      <?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>



      dfs.namenode.http-address
      hadoop102:9870



      dfs.namenode.secondary.http-address
      hadoop104:9868

    • YARN 配置文件配置 yarn-site.xmlvim yarn-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
      <?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>



      yarn.nodemanager.aux-services
      mapreduce_shuffle



      yarn.resourcemanager.hostname
      hadoop103



      yarn.nodemanager.env-whitelist

      JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
      NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
      RED_HOME


    • MapReduce 配置文件配置 mapred-site.xmlvim mapred-site.xml <?xml version=”1.0” encoding=”UTF-8”?>
      <?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>



      mapreduce.framework.name
      yarn

  • 在集群上分发配置好的 Hadoop 配置文件xsync /opt/module/hadoop-3.1.3/etc/hadoop/

    群起集群

  • 配置 workersvim /opt/module/hadoop-3.1.3/etc/hadoop/workers hadoop102 hadoop103 hadoop104 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。同步所有节点配置文件xsync /opt/module/hadoop-3.1.3/etc

  • 启动集群
    • 如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode(注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停 止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。)hdfs namenode -format
    • 启动 HDFSsbin/start-dfs.sh
    • 在配置了 ResourceManager 的节点(hadoop103)启动 YARNsbin/start-yarn.sh
    • Web 端查看 HDFS 的 NameNode
    • Web 端查看 YARN 的 ResourceManager
  • 集群基本测试

    • 上传文件到集群
      • 上传小文件hadoop fs -mkdir /input hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
      • 上传大文件hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /
    • 上传文件后查看文件存放在什么位置
      • 查看 HDFS 文件存储路径pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
      • 查看 HDFS 在磁盘存储文件内容cat blk_1073741825

        配置历史服务器

        为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
  • 配置 mapred-site.xmlvim mapred-site.xml 在该文件里面增加如下配置

    mapreduce.jobhistory.address
    hadoop102:10020



    mapreduce.jobhistory.webapp.address
    hadoop102:19888

  • 分发配置xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

  • 在 hadoop102 启动历史服务器mapred —daemon start historyserver
  • 查看历史服务器是否启动jps
  • 查看 JobHistoryhttp://hadoop102:19888/jobhistory

    配置日志的聚集

    日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
    2.Hadoop 运行环境搭建 - 图1
    日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
    注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryServer。
    开启日志聚集功能具体步骤如下:

  • 配置 yarn-site.xmlvim yarn-site.xml

    yarn.log-aggregation-enable
    true



    yarn.log.server.url
    http://hadoop102:19888/jobhistory/logs



    yarn.log-aggregation.retain-seconds
    604800

  • 分发配置xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

  • 关闭 NodeManager 、ResourceManager 和 HistoryServersbin/stop-yarn.sh mapred —daemon stop historyserver
  • 启动 NodeManager 、ResourceManage 和 HistoryServerstart-yarn.sh mapred —daemon start historyserver
  • 删除 HDFS 上已经存在的输出文件hadoop fs -rm -r /output
  • 执行 WordCount 程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
  • 查看日志

  • 各个模块分开启动/停止(配置 ssh 是前提)

    • 整体启动/停止 HDFSstart-dfs.sh/stop-dfs.sh
    • 整体启动/停止 YARNstart-yarn.sh/stop-yarn.sh
  • 各个服务组件逐一启动/停止

    • 分别启动/停止 HDFS 组件hdfs —daemon start/stop namenode/datanode/secondarynamenode
    • 启动/停止 YARNyarn —daemon start/stop resourcemanager/nodemanager

      编写 Hadoop 集群常用脚本

  • Hadoop 集群启停脚本(包含 HDFS,Yarn,Historyserver):myhadoop.shcd /home/atguigu/bin vim myhadoop.sh #!/bin/bash
    if [ $# -lt 1 ]
    then
    echo “No Args Input…”
    exit ;
    fi
    case $1 in
    “start”)
    echo “ =================== 启动 hadoop 集群 ===================”
    echo “ ———————- 启动 hdfs ———————-“
    ssh hadoop102 “/opt/module/hadoop-3.1.3/sbin/start-dfs.sh”
    echo “ ———————- 启动 yarn ———————-“
    ssh hadoop103 “/opt/module/hadoop-3.1.3/sbin/start-yarn.sh”
    echo “ ———————- 启动 historyserver ———————-“
    ssh hadoop102 “/opt/module/hadoop-3.1.3/bin/mapred —daemon start
    historyserver”
    ;;
    “stop”)
    echo “ =================== 关闭 hadoop 集群 ===================”
    echo “ ———————- 关闭 historyserver ———————-“
    ssh hadoop102 “/opt/module/hadoop-3.1.3/bin/mapred —daemon stop
    historyserver”
    echo “ ———————- 关闭 yarn ———————-“
    ssh hadoop103 “/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh”
    echo “ ———————- 关闭 hdfs ———————-“
    ssh hadoop102 “/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh”
    ;;
    *)
    echo “Input Args Error…”
    ;;
    esac
    保存后退出,然后赋予脚本执行权限chmod +x myhadoop.sh

  • 查看三台服务器 Java 进程脚本:jpsallcd /home/atguigu/bin vim jpsall #!/bin/bash
    for host in hadoop102 hadoop103 hadoop104
    do
    echo =============== $host ===============
    ssh $host jps
    done
    保存后退出,然后赋予脚本执行权限chmod +x jpsall
  • 分发/home/atguigu/bin 目录,保证自定义脚本在三台机器上都可以使用xsync /home/atguigu/bin/

    常用端口号说明

    | 端口名称 | Hadoop2.x | Hadoop3.x | | —- | —- | —- | | NameNode 内部通信端口 | 8020 / 9000 | 8020 / 9000/9820 | | NameNode HTTP UI | 50070 | 9870 | | MapReduce 查看执行任务端口 | 8088 | 8088 | | 历史服务器通信端口 | 19888 | 19888 |