【Hadoop】Hadoop的运行模式

目录

Hadoop 的运行模式

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

1.本地模式

1.1官方 Grep 案例

  1. 在/hadoop 文件下面创建一个 input 文件夹
mkdir -p /hadoop/input
cd /hadoop
  1. 将 Hadoop 的 xml 配置文件复制到 input
cp /hadoop/hadoop-2.7.7/etc/hadoop/*.xml input
  1. 在 /hadoop 目录下,执行 /hadoop/hadoop-2.7.7/share 目录下的 MapReduce 程序
hadoop jar /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input/ output 'dfs[a-z.]+'

在这里插入图片描述

  1. 查看结果
    在这里插入图片描述

1.2官方 WordCount 案例

  1. 在 /hadoop文件下面创建一个 wcinput 文件夹
mkdir -p /hadoop/wcinput 
  1. 在 wcinput 文件下创建一个 wc.input 文件,在文件中输入以下内容:
vim wc.input

hadoop yarn
hadoop mapreduce
spark
spark
susheng
susheng hadoop
susheng csdn
  1. 在 /hadoop 目录下,执行 /hadoop/hadoop-2.7.7/share 目录下的 MapReduce 程序
hadoop jar /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount wcinput/ wcoutput
  1. 查看结果
    在这里插入图片描述

2.伪分布式运行模式

2.1启动 HDFS 并运行 MapReduce 程序

2.1.1 配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目录下)
  1. core-site.xml
<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://susheng:9000</value>
  </property>

  <!-- 指定Hadoop运行时产生文件的存储目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>
  1. hadoop-env.sh。修改 JAVA_HOME 路径:
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_151

在这里插入图片描述

  1. hdfs-site.xml
<configuration>
  <!-- 指定HDFS副本的数量 -->
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
2.1.2 启动集群
  1. 格式化 NameNode(第一次启动时格式化,以后就不要总格式化)
hdfs namenode -format

在这里插入图片描述

  1. 启动 NameNode
hadoop-daemon.sh start namenode

在这里插入图片描述

  1. 启动 DataNode
hadoop-daemon.sh start datanode

在这里插入图片描述

2.1.3 查看集群
  1. 查看是否启动成功:jps
    在这里插入图片描述

  2. web 端查看 HDFS 文件系统:http://192.168.29.200:50070
    在这里插入图片描述

2.1.4 操作集群
  1. 在 HDFS 文件系统上创建一个 input 文件夹
cd /hadoop/wcinput
hdfs dfs -mkdir -p /user/susheng/input
  1. 将测试文件内容上传到文件系统上
hdfs dfs -put wc.input /user/susheng/input/
  1. 在 hadoop-2.7.7 目录下,运行 MapReduce 程序
hadoop jar /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/susheng/input/ /user/susheng/output

在这里插入图片描述在这里插入图片描述

  1. 查看输出结果
    命令行:
hdfs dfs -cat /user/susheng/output/*

在这里插入图片描述浏览器页面:
在这里插入图片描述

2.2启动 YARN 并运行 MapReduce 程序

2.21. 配置集群,修改 Hadoop 的配置文件(/hadoop/hadoop-2.7.7/etc/hadoop 目录下)
  1. yarn-site.xml
<configuration>
  <!-- Reducer获取数据的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>susheng</value>
  </property>
</configuration>
  1. yarn-env.sh。修改 JAVA_HOME 路径:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
  1. mapred-env.sh。修改 JAVA_HOME 路径:
export JAVA_HOME=/usr/local/java/jdk1.8.0_151
  1. 将 mapred-site.xml.template 重新命名为 mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
<configuration>
  <!-- 指定MR运行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
2.2.2 启动集群
  1. 启动前必须保证 NameNode 和 DataNode 已经启动
    在这里插入图片描述

  2. 启动 ResourceManager

yarn-daemon.sh start resourcemanager

在这里插入图片描述

  1. 启动NodeManager
yarn-daemon.sh start nodemanager

在这里插入图片描述

2.2.3 查看集群
  • 命令行:
    在这里插入图片描述
  • web 端查看 YARN 页面:
    http://192.168.29.200:8088
    在这里插入图片描述
2.2.4 操作集群
  1. 删除 HDFS 文件系统上的 output 文件
hdfs dfs -rm -R /user/susheng/output
  1. 在 hadoop-2.7.7 目录下,运行 MapReduce 程序
hadoop jar /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/susheng/input  /user/susheng/output
  1. 查看运行结果
  • 命令行查看:

    hdfs dfs -cat /user/susheng/output/*
    

    在这里插入图片描述

  • 浏览器页面查看:
    在这里插入图片描述

2.3配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。

2.3.1 配置 mapred-site.xml

在该文件里面增加以下配置:

  <!-- 历史服务器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>susheng:10020</value>
  </property>

  <!-- 历史服务器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>susheng:19888</value>
  </property>
2.3.2 启动历史服务器
mr-jobhistory-daemon.sh start historyserver

在这里插入图片描述

2.3.3 查看历史服务器是否启动

在这里插入图片描述

2.3.4 查看 JobHistory http://192.168.29.200:19888/

在这里插入图片描述

2.4配置日志的聚集

日志聚集:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上。
作用:可以方便的查看到程序运行详情,方便开发调试。
注意开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和 HistoryManager

2.4.1 关闭 NodeManager 、ResourceManager 和 HistoryManager
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager
mr-jobhistory-daemon.sh stop historyserver

在这里插入图片描述

2.4.2 配置 yarn-site.xml

在该文件里面增加以下配置:

  <!-- 日志聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 日志保留时间设置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
2.4.3 启动 NodeManager 、ResourceManager 和 HistoryManager
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
mr-jobhistory-daemon.sh start historyserver

在这里插入图片描述

2.4.4 删除HDFS上已经存在的输出文件
hdfs dfs -rm -R /user/susheng/output
2.4.5 在 hadoop-2.7.7 目录下,执行 WordCount 程序
hadoop jar /hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /user/susheng/input  /user/susheng/output
2.4.6 查看日志

在这里插入图片描述在这里插入图片描述

3.完全分布式运行模式

3.1虚拟机准备

3.1.1 准备(克隆) 3 台客户机
主机名称 IP地址
master 192.168.29.200
slave1 192.168.29.31
slave2 192.168.29.32
3.1.2 每台机器分别修改 /etc/hosts 文件,将每个机器的 hostname 和 ip 对应
vim /etc/hosts

#master的host
192.168.217.200 master
#slave1的host
192.168.217.31   slave1
#slave2的host
192.168.217.32   slave2
3.1.3 修改slave设备配置
  1. 修改静态ip,重启网关服务

    systemctl restart network
    
  2. 修改主机名称

    hostnamectl set-hostname susheng
    
  3. 关闭防火墙

    systemctl stop firewalld
    

3.2 编写集群分发脚本 xsync

3.2.1 scp(secure copy)安全拷贝
  • scp 定义:scp 可以实现服务器与服务器之间的数据拷贝。

  • 基本语法:

    scp -r 要拷贝的文件路径/名称  目的用户@主机:目的路径/名称
    
3.2.2 rsync(remote synchronize)远程同步工具
  • rsync 定义:rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。

  • 基本语法:

    rsync -rvl 要拷贝的文件路径/名称  目的用户@主机:目的路径/名称
    

    说明:-v:显示复制过程 、-l:拷贝符号链接

3.2.3 xsync 集群分发脚本

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

  • 在 /usr/local/bin 目录下创建 xsync 文件

    vim xsync
    
  • 在文件中输入以下内容:

    #!/bin/bash
    #1 获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    	echo no args;
    	exit;
    fi
    
    #2 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    
    #3 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir
    
    #4 获取当前用户名称
    user=`whoami`
    
    #5 循环
    for i in master slave1 slave2
      do
        echo "****************** $i *********************"
        rsync -rvl $pdir/$fname $user@$i:$pdir
      done
    
  • 修改脚本 xsync 具有执行权限

    chmod 777 xsync
    
  • 调用脚本形式:xsync 文件名称

3.3 集群配置

3.3.1 集群部署规划
  master slave1 slave2
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager
3.3.2 配置集群
  1. 配置核心文件:配置 core-site.xml
<configuration>
  <!-- 指定HDFS中NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master:9000</value>
  </property>

  <!-- 指定Hadoop运行时产生文件的存储目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop/hadoop-2.7.7/data/tmp</value>
  </property>
</configuration>
  1. HDFS 配置文件
  • 配置 hadoop-env.sh:修改 JAVA_HOME 路径:

    # The java implementation to use.
    export JAVA_HOME=/usr/local/java/jdk1.8.0_151
    
  • 配置 hdfs-site.xml

    <configuration>
      <!-- 指定HDFS副本的数量 -->
      <property>
        <name>dfs.replication</name>
        <value>3</value>
      </property>
      
      <!-- 指定Hadoop辅助名称节点主机配置 -->
      <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave2:50090</value>
      </property>
    </configuration>
    
  1. YARN 配置文件
  • 配置 yarn-env.sh:修改 JAVA_HOME 路径:

    # The java implementation to use.
    export JAVA_HOME=/usr/local/java/jdk1.8.0_151
    
  • 配置 yarn-site.xml

<configuration>
  <!-- Reducer获取数据的方式 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 指定YARN的ResourceManager的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>slave1</value>
  </property>

  <!-- 日志聚集功能使能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 日志保留时间设置7天 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
  </property>
</configuration>
  1. MapReduce 配置文件
  • 配置 mapred-env.sh:修改 JAVA_HOME 路径:
    # The java implementation to use.
    export JAVA_HOME=/usr/local/java/jdk1.8.0_151
    
  • 配置 mapred-site.xml
<configuration>
  <!-- 指定MR运行在YARN上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

  <!-- 历史服务器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value>
  </property>

  <!-- 历史服务器web端地址 -->
  <property>
     <name>mapreduce.jobhistory.webapp.address</name>
     <value>master:19888</value>
  </property>
</configuration>
3.3.3 在集群上分发配置好的 Hadoop 目录
xsync /hadoop/

3.4 在集群上分发配置好的 Hadoop 目录

3.4.1 如果集群是第一次启动,需要格式化 NameNode
hadoop namenode -format
3.4.2 在 master上启动 NameNode
hadoop-daemon.sh start namenode
3.4.3 在 master、slave1 和 slave2 上分别启动 DataNode
hadoop-daemon.sh start datanode

3.5 配置 SSH 无密登录

3.5.1 免密登录原理

在这里插入图片描述

3.5.2 生成公钥和私钥

在 /root 目录下输入以下命令,然后敲(三个回车),就会在 .ssh 目录下生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥):

ssh-keygen -t rsa
3.5.3 将公钥拷贝到要免密登录的目标机器上
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
3.5.4 在另两台机器上也做 2、3 操作

3.6 群起集群

3.6.1 配置 slaves(/hadoop/hadoop-2.7.7/etc/hadoop/slaves)
  1. 在该文件中增加如下内容:

    master
    slave1
    slave2
    

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

  2. 同步所有节点配置文件

    xsync slaves
    
3.6.2 启动集群
  1. 如果集群是第一次启动,需要格式化 NameNode (注意格式化之前,一定要先停止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据)

    hdfs namenode -format
    
  2. 启动 HDFS

    start-dfs.sh
    
  3. 启动 YARN(slave1 上)
    注意NameNode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 YARN,应该在 ResouceManager 所在的机器上启动 YARN

    start-yarn.sh
    
3.6.3 编写查看集群所有节点 jps 脚本 alljps
  1. 在 /usr/local/bin 目录下创建文件 alljps

    vim alljps
    
    #!/bin/bash
    
    for i in master slave1 slave2
      do
        echo "****************** $i *********************"
        ssh $i "source /etc/profile && jps"
      done
    
  2. 修改脚本 alljps 具有执行权限

    chmod 777 alljps
    
  3. 调用脚本形式:alljps
    在这里插入图片描述

3.7 集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

3.7.1 时间服务器配置(必须 root 用户)
  1. 安装 ntp

    yum install ntp
    
  2. 修改 ntp 配置文件

    vim /etc/ntp.conf
    

修改内容如下:
   ⑴ 授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查询和同步时间

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

⑵ 集群在局域网中,不使用其他互联网上的时间

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

⑶ 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步

server 127.127.1.0
fudge 127.127.1.0 stratum 10
  1. 修改/etc/sysconfig/ntpd 文件

    vim /etc/sysconfig/ntpd
    #添加内容如下(让硬件时间与系统时间一起同步)
    SYNC_HWCLOCK=yes
    
  2. 重新启动 ntpd 服务

    systemctl restart ntpd.service
    
  3. 设置 ntpd 服务开机启动

    systemctl enable ntpd.service
    
3.7.22 其他机器配置(必须root用户)

在其他机器配置10分钟与时间服务器同步一次

crontab -e

编写定时任务如下:

*/10 * * * * /usr/sbin/ntpdate master

相关推荐

  1. Docker:容器两种运行模式(Foreground、Detached)

    2024-03-19 12:12:03       52 阅读
  2. ARM Cortex-A 内核运行模式切换

    2024-03-19 12:12:03       51 阅读
  3. Python写UI自动化--playwright运行模式

    2024-03-19 12:12:03       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 12:12:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 12:12:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 12:12:03       87 阅读
  4. Python语言-面向对象

    2024-03-19 12:12:03       96 阅读

热门阅读

  1. 【Selenium(三)】

    2024-03-19 12:12:03       40 阅读
  2. 将VSCode添加至右键的菜单栏

    2024-03-19 12:12:03       58 阅读
  3. 【安全类书籍-6】僵尸网络:网络程序杀手

    2024-03-19 12:12:03       42 阅读
  4. Bash Shell中双引号中的感叹号问题详解

    2024-03-19 12:12:03       37 阅读
  5. MongoDB聚合运算符:$filter

    2024-03-19 12:12:03       41 阅读
  6. 找出字符串中第一个匹配项的下标-力扣

    2024-03-19 12:12:03       42 阅读
  7. C#-用于Excel处理的程序集

    2024-03-19 12:12:03       44 阅读