大数据Hadoop学习四

分布式计算和资源调度

分布式计算概述

广义上的计算就是基于数据得出结论的过程(内容分析或者说数据分析)
分布式计算,就是以分布式的形式完成数据的统计,得到需要的结果(靠数据取胜)即多台服务器协同工作,共同完成一个计算任务
分布式计算模式
分散->汇总模式
分片分成多个部分
image
分散->汇总模式:
1.将数据分片,多台服务器各自负责一部分数据处理
2.然后将各自的结果,进行汇总处理
3.最终得到想要的计算结果
生活中的“人口普查”
就是典型的分散汇总的分布式统计模式

中心调度->步骤执行模式
对比上面的模式而言就是复杂在会进行一个数据交换的过程
中心调度->步骤执行模式:
1.由一个节点作为中心调度管理者
2.将任务划分为几个具体步骤
3.管理者安排每个机器执行任务
4.最终得到结果数据
生活中的各类项目的:项目经理和项目成员
就是这种模式,一个管理分配任务,其余人员领取任
务工作

MapReduce概述(是分散汇总模式)

MapReduce是Hadoop中的分布式计算组件
MapReduce提供了2个编程接口:
Map(翻译为映射)
Reduce(翻译为聚合)
其中
·Map功能接口提供了“分散”的功能,由服务器分布式对数据进行处理
·Reduce.功能接口提供了“汇总(聚合)”的功能,将分布式的处理结果汇总统计
用户如需使用MapReduce框架完成自定义需求的程序开发
只需要使用ava、Python等编程语言,实现Map Reduce功能接口即可。

MapReduce执行原理

假设有文件,内部记录了很多单词,而且已经开发好了一个MapReduce程序,功能是统计每个单词出现的次数
假设有四台服务器用来执行MapReduce任务,可以三台服务器执行Map,一台服务器执行Reduce

MapReduce的运行机制

·将要执行的需求,分解为多个MapT水和Reduce Tas水
·将Ma即Ta水和Reduce Tas水分配到对应的服务器去执行
image
完成任务分配,执行任务
image
完成分散任务,接着进行(汇总)聚合
image

YARN概述(分布式资源调度-YARN)

MapReduce是基于YARN运行的,即没有YARN无法运行MapReduce程序
YARN即Hadoop内提供的进行分布式资源调度的组件

资源调度

资源:
服务器硬件资源,如:CPU、内存、硬盘、网络等
资源调度:
管控服务器硬件资源,提供更好的利用率
分布式资源调度:
管控整个分布式服务器集群的全部资源,整合进行统一调度

image

image

image

YARN管控整个集群的资源进行调度,那么应用程序在运行时,就是在YARN的监管(管理)下去运行的。
程序如何在YARN内运行?
程序向YARN申请所需资源
YARN为程序分配所需资源供程序使用

这就像:全部资源都是公司(YARN)的,由公司分配给个人(具体的程序)去使用。
比如,一个具体的MapReduce程序。
我们知道,MapReduce程序会将任务分解为若干个Map任务和Reduce任务。
假设,有一个MapReduce程序,分解了3个Map任务,和1个Reduce任务,那么如何在YARN的监管(管理)下运行
呢?

image

image

YARN架构

借助前面学习的HDFS架构完成学习
image

核心架构

ResourceManager:整个集群的资源调度者,负责协调调度各个程序所需的资源。
NodeManager:单个服务器的资源调度者,负责调度单个服务器上的资源提供给应用程序使用。

image
程序要运行具体流程是什么?

image
如何实现以上服务器上精准的分配如下的硬件资源呢?
开辟的空间,称之为:容器
容器就是NodeManager预先占用这一部分资源,然后将这一部分资源提供给程序使用
程序运行在容器(集装箱中),无法突破容器的资源限制

image

辅助架构

YARN的架构中除了核心角色,即:
·ResourceManager:集群资源总管家
·NodeManager:单机资源管家
还可以搭配2个辅助角色使得YARN集群运行更加稳定
·代理服务器(ProxyServer):Web Application Proxy Web应用程序代理
历史服务器(obHistoryServer):应用程序历史信息记录服务

代理服务器

ProxpServer,保证web UI 访问的安全性
Web代理服务器
代理服务器,即Web应用代理是YARN的一部分。默认情况下,它将作为资源管理器(RM)的一部分运行,但是可以配置为在独立模式下运行。使用代理的原
因是为了减少通过YARN进行基于网络的攻击的可能性。
这是因为,YARN在运行时会提供一个WEB UI站点(同HDFS的WEB UI站点一样)可供用户在浏览器内查看YARN的运行信息

对外提供WEB站点会有安全性问题,而代理服务器的功能就是最大限度保障对WEBU的访问是安全的。比如:
·警告用户正在访问一个不受信任的站点
·剥离用户访问的Cookie等
开启代理服务器,可以提高YARN在开放网络中的安全性

image

历史服务器

JobHistoryServer历史服务器(简单理解为统计零散的日志)
功能简单:
记录历史运行的程序的信息以及产生的日志并提供WEB UI站点供用户使用浏览器查看,可以保留历史数据,随时查看历史运行程序信息

image

MapReduce&YARN的部署

image
MapReduce运行在YARN容器内,无需启动独立进程

image

集群规划

有三台服务器,其中node1配置较高
集群规划如下:

主机 角色
node1 ResourceManager、 NodeManager、 ProxyServer、 JobHistoryServer
node2 NodeManager
node3 NodeManager

MapReduce配置文件

在¥HADOOP_HOME/etc/hadoop文件夹内,修改:
mapred-env.sh文件,添加如下环境变量

#设置JDK路径
export JAVA_HOME=/export/server/jdk
#设置JobHistoryServer进程内存为lG
export HADOOP_J0B_HISTORYSERVER_HEAPSIZE=1000
#设置日志级别为INFO
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA

image

mapred-site.xml文件添加如下配置信息:

<!-- 指定MapReduce运行在YARN框架上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>MapReduce的运行框架设置为YARN</description>
    </property>

    <!-- 历史服务器通信地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
        <description>历史服务器通讯端口 node1:10020</description>
    </property>

    <!-- 历史服务器Web UI地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
        <description>历史服务器web端口为node1的19888</description>
    </property>

    <!-- 历史信息在HDFS的临时记录路径 -->
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/data/mr-history/tmp</value>
        <description>历史信息在HDFS的记录临时路径</description>
    </property>

    <!-- 历史信息在HDFS的最终记录路径 -->
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/data/mr-history/done</value>
        <description>历史信息在HDFS的记录路径</description>
    </property>

    <!-- 设置MapReduce ApplicationMaster的环境变量 -->
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
        <description>MapReduce_HOME 设置为HADOOP_HOME</description>
    </property>

    <!-- 设置Map Task的环境变量 -->
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
        <description>MapReduce_HOME 设置为HADOOP_HOME</description>
    </property>

    <!-- 设置Reduce Task的环境变量 -->
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
        <description>MapReduce_HOME 设置为HADOOP_HOME</description>
    </property>

image
image

YARN配置文件

在¥HADOOP_HOME/etc/hadoop文件夹内,修改:
yarn-env.sh文件,添加如下4行环境变量内容:

#设置JDK路径的环境变量
export JAVA_HOME=/export/server/jdk

#设置HADOOP HOME的环境变量
export HADOOP_HOME=/export/server/hadoop

#设置配置文件路径的环境变量
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

#设置日志文件路径的环境变量
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

image

image

yarn-site.xml文件

  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
    <description>ResourceManage设置在node1节点</description>
  </property>

  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    <description>选择公平调度器</description>
  </property>

  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/nm-local</value>
    <description>NodeManager中间数据本地存储路径</description>
  </property>


  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
    <description>NodeManager数据日志本地存储路径</description>
  </property>


  <property>
    <name>yarn.nodemanager.log.retain-seconds</name>
    <value>10800</value>
    <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
  </property>



  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>为MapReduce程序开启Shuffle服务</description>
  </property>

<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
    <description>历史服务器URL</description>
</property>

  <property>
    <name>yarn.web-proxy.address</name>
    <value>node1:8089</value>
    <description>代理服务器主机和端口</description>
  </property>


  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <description>开启日志聚合</description>
  </property>

  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <description>程序日志HDFS的存储路径</description>
  </property>

image

image

分发配置文件

MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中。

scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:pwd'/
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:'pwd'/

分发完成配置文件,就可以启动YARN的相关进程啦。
为了省事也可以

scp * node2:`pwd`/
scp * node3:`pwd`/

image

集群启动命令介绍

常用的进程启动命令如下:
一键启动YARN集群:

$HADOOP_HOME/sbin/start-yarn.sh

会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动resourcemanager
会基于workers文件配置的主机启动NodeManager
一键停止YARN集群:

$HADOOP_HOME/sbin/stop-yarn.sh

在当前机器,单独启动或停止进程

$HADOOP_HOME/bin/yarn --daemon start|stop resourcemanager|nodemanager|proxyserver

start和stop决定启动和停止
可控制resourcemanager、nodemanager、proxyserver三种进程
历史服务器启动和停止

$HADOOP_HOME/bin/mapred --daemon start|stop historyserver

image

查看YARN的WEB UI页面

打开http://node1:8088即可看到YARN集群的监控页面(ResourceManager的WEB UI)

image

image

完成以上操作就完成了YARN的集群部署

MapReduce&YARN初体验

集群启停命令

一键启动脚本

image

单进程启停

image

提交MapReduce任务到YARN执行

在部署并成功启动YARN集群后,我们就可以在YARN上运行各类应用程序了。
YARN作为资源调度管控框架,其本身提供资源供许多程序运行,常见的有:
MapReduce程序(现在写的很少)
Spark程序
Flink程序
Spark和Flink是大数据后续的学习内容,我们目前先来体验一下在YARN上执行MapReduce程序的过程。

提交MapReduce程序至YARN运行

Hadoop官方内置了一些预置的MapReduce程序代码,我们不需要编程,只需要通过命令即可使用
常用的有2个MapReduce内置程序:
wordcount:单词计数程序
统计指定文件内各单词出现的次数
pi:求圆周率
通过蒙特卡罗算法(统计模拟法)求圆周率
这些内置的示例MapReduce程序代码,都在:

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1jar

image
这个文件内。
可以通过hadoop jar命令来运行它,提交MapReduce程序到YARN中。
语法:hadoop jar程序文件java类名[程序参数]...[程序参数]
以上命令中为了确保不出错要写协议头

提交wordcount示例程序

单词计数示例程序的功能很简单:
给定数据输入的路径(HDFS)、给定结果输出的路径(HDFS)
将输入路径内的数据中的单词进行计数,将结果写到输出路径
我们可以准备一份数据文件,并上传到HDFS中。

itheima itcast itheima itcast
hadoop hdfs hadoop hdfs
hadoop mapreduce hadoop yarn
itheima hadoop itcast hadoop
itheima itcast hadoop yarn mapreduce

将以上内容写入word.txt中

image

创建文件夹
一定记得开启HDFS和YARN
image
将文件上传到/input文件夹里
image
进行提交(记得写协议头)

image

提交后可以在http://node1:8088看见正在运行程序

image
最终结果:
查看结果数据

image

image
在上述的网页中点击history,显示结果如下
image
当然在页面中也能看见历史记录(日志),借助historyserver

提交求圆周率示例程序

可以执行如下命令,使用蒙特卡罗算法模拟计算求Pi(圆周率)

hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 3 1000

参数pi表示要运行的Java类,这里表示运行jar包中的求pi程序
参数3,表示设置几个map任务
参数1606,表示模拟求PI的样本数(越大求的PI越准确,但是速度越慢)

image
最终结果:
image
在网页中可以看见是运行成功的

image
蒙特卡罗算法求PI的基础原理
该算法是一个统计算法,需要大量样本,样本越多越精准

image
示例:
image

总结

基本完成对YARN和MapRecduce的学习
下周将进行Hive的学习

posted @ 2025-08-16 23:45  haoyinuo  阅读(5)  评论(0)    收藏  举报