大数据Hadoop学习四
分布式计算和资源调度
分布式计算概述
广义上的计算就是基于数据得出结论的过程(内容分析或者说数据分析)
分布式计算,就是以分布式的形式完成数据的统计,得到需要的结果(靠数据取胜)即多台服务器协同工作,共同完成一个计算任务
分布式计算模式
分散->汇总模式
分片分成多个部分

分散->汇总模式:
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水分配到对应的服务器去执行

完成任务分配,执行任务

完成分散任务,接着进行(汇总)聚合

YARN概述(分布式资源调度-YARN)
MapReduce是基于YARN运行的,即没有YARN无法运行MapReduce程序
YARN即Hadoop内提供的进行分布式资源调度的组件
资源调度
资源:
服务器硬件资源,如:CPU、内存、硬盘、网络等
资源调度:
管控服务器硬件资源,提供更好的利用率
分布式资源调度:
管控整个分布式服务器集群的全部资源,整合进行统一调度



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


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

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

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

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

辅助架构
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在开放网络中的安全性

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

MapReduce&YARN的部署

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

集群规划
有三台服务器,其中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

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>


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


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>


分发配置文件
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`/

集群启动命令介绍
常用的进程启动命令如下:
一键启动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

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


完成以上操作就完成了YARN的集群部署
MapReduce&YARN初体验
集群启停命令
一键启动脚本

单进程启停

提交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

这个文件内。
可以通过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中

创建文件夹
一定记得开启HDFS和YARN

将文件上传到/input文件夹里

进行提交(记得写协议头)

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

最终结果:
查看结果数据


在上述的网页中点击history,显示结果如下

当然在页面中也能看见历史记录(日志),借助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越准确,但是速度越慢)

最终结果:

在网页中可以看见是运行成功的

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

示例:

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

浙公网安备 33010602011771号