大数据技术之Hadoop-分布式计算和资源调度

 一、分布式计算概述

1、什么是(数据)计算

  • 计算:对数据进行处理,使用统计分析等手段得到需要的结果
  • 分布式计算:多台服务器协同工作,共同完成一个计算任务

2、分布式计算常见的2种工作模式

  • 分散->汇总  MapReduce就是这种模式)
  • 中心调度->步骤执行 (大数据体系的SparkFlink等是这种模式)

 二、MapReduce概述

1、分布式计算框架 - MapReduce

MapReduce是“分散->汇总”模式的分布式计算框架,可供开发人员开发相关程序进行分布式数据计算。
MapReduce提供了2个编程接口:

  • Map
  • Reduce 

其中

  • Map功能接口提供了“分散”的功能, 由服务器分布式对数据进行处理
  • Reduce功能接口提供了“汇总(聚合)”的功能,将分布式的处理结果汇总统计

用户如需使用MapReduce框架完成自定义需求的程序开发
只需要使用Java、Python等编程语言,实现Map Reduce功能接口即可。

2、MapReduce执行原理

现在, 我们借助一个案例,简单分析一下,MapReduce是如何完成分布式计算的。
假设有如下文件,内部记录了许多的单词。且已经开发好了一个MapReduce程序,功能是统计每个单词出现的次数。

假定有4台服务器用以执行MapReduce任务

可以3台服务器执行Map1台服务器执行Reduce 

 三、YARN概述

1、YARN & MapReduce

MapReduce是基于YARN运行的,即没有YARN”无法运行MapReduce程序

2、分布式资源调度 - YARN

3、资源调度

3.1、什么是资源调度? 我们为什么需要资源调度?

资源       

         服务器硬件资源,如:CPU、内存、硬盘、网络等

资源调度        

        管控服务器硬件资源,提供更好的利用率

分布式资源调度        

        管控整个分布式服务器集群的全部资源,整合进行统一调度

对于资源的利用,有规划、有管理的调度资源使用,是效率最高的方式

3.2、YARN的资源调度

YARN 管控整个集群的资源进行调度, 那么应用程序在运行时,就是在YARN的监管(管理)下去运行的。

这就像:全部资源都是公司(YARN)的,由公司分配给个人(具体的程序)去使用。

比如,一个具体的MapReduce程序。
我们知道, MapReduce程序会将任务分解为若干个Map任务和Reduce任务。

假设,有一个MapReduce程序, 分解了3个Map任务,和1个Reduce任务,那么如何在YARN的监管(管理)下运行呢?

 四、YARN架构

核心架构

1、YARN架构
HDFS 主从架构,有 2 个角色
  • 主(Master)角色:NameNode
  • 从(Slave)角    色 :DataNode

 

YARN ,主从架构,有 2 个角色
        
  • 主(Master)角色:ResourceManager
  • 从(Slave) 角色:NodeManager

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

2、YARN容器 
        

 

 

  • 容器(Container)是YARN的NodeManager在所属服务器上分配资源的手段
  • 创建一个资源容器,即由NodeManager占用这部分资源
  • 然后应用程序运行在NodeManager创建的这个容器内
  • 应用程序无法突破容器的资源限制
  • ps:容器是虚拟化的相关机制,后续我们会详细讲解 

辅助架构

1、YARN辅助角色

YARN的架构中除了核心角色,即:

  • ResourceManager:集群资源总管家
  • NodeManager:单机资源管家

还可以搭配2个辅助角色使得YARN集群运行更加稳定

  • 代理服务器(ProxyServer):Web Application Proxy Web应用程序代理
  • 历史服务器(JobHistoryServer): 应用程序历史信息记录服务
2、Web应用代理(Web Application Proxy)

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

对外提供WEB 站点会有安全性问题, 而代理服务器的功能就是最大限度保障对WEB UI的访问是安全的。 比如: 

  • 警告用户正在访问一个不受信任的站点
  • 剥离用户访问的Cookie等

开启代理服务器,可以提高YARN在开放网络中的安全性 (但不是绝对安全只能是辅助提高一些)

代理服务器默认集成在了ResourceManager

也可以将其分离出来单独启动,如果要分离代理服务器

        1. yarn-site.xml中配置 yarn.web-proxy.address 参数即可 (部署环节会使用到)

        2. 并通过命令启动它即可 $HADOOP_YARN_HOME/sbin/yarn-daemon.sh start proxyserver(部署环节会使用到) 

3.JobHistoryServer历史服务器

历史服务器的功能很简单: 记录历史运行的程序的信息以及产生的日志并提供WEB UI站点供用户使用浏览器查看。

JobHistoryServer历史服务器

 

JobHistoryServer历史服务器功能:

  • 提供WEB UI站点,供用户在浏览器上查看程序日志
  • 可以保留历史数据,随时查看历史运行程序信息 

JobHistoryServer需要配置:

  • 开启日志聚合,即从容器中抓取日志到HDFS集中存储
  • 配置历史服务器端口和主机

 

YARN的架构有哪些角色

  • 核心角色:ResourceManager和NodeManager
  • 辅助角色:ProxyServer,保障WEB UI访问的安全性
  • 辅助角色:JobHistoryServer,记录历史程序运行信息和日志

 五、MapReduce & YARN 的部署

1、部署说明

Hadoop HDFS分布式文件系统,我们会启动:

  • NameNode进程作为管理节点

  • DataNode进程作为工作节点

  • SecondaryNamenode作为辅助

同理,Hadoop YARN分布式资源调度,会启动: 

  • ResourceManager进程作为管理节点
  • NodeManager进程作为工作节点
  • ProxyServer、JobHistoryServer这两个辅助节点

那么,MapReduce呢?

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

所以关于MapReduceYARN的部署,其实就是2件事情:

  • 关于MapReduce: 修改相关配置文件,但是没有进程可以启动
  • 关于YARN: 修改相关配置文件, 并启动ResourceManager、NodeManager进程以及辅助进程(代理服务器、历史服务器)

通过表格进行汇总

 

组件

配置文件

启动进程

备注

Hadoop HDFS

需修改

需启动

NameNode 作为主节点
DataNode 作为从节点
SecondaryNameNode 主节点辅助

分布式文件系统

Hadoop YARN

需修改

需启动

ResourceManager 作为集群资源管理者
NodeManager 作为单机资源管理者
ProxyServer 代理服务器提供安全性
JobHistoryServer 记录历史信息和日志

分布式资源调度

Hadoop MapReduce

需修改

无需启动任何进程

MapReduce程序运行在YARN容器内

分布式数据计算

集群规划 

3台服务器,其中node1配置较高 

 集群规划如下:

主机

角色

node1

ResourceManager

NodeManager

ProxyServer

JobHistoryServer

node2

NodeManager

node3

NodeManager

2、 MapReduce配置文件

在 $HADOOP_HOME/etc/hadoop 文件夹内,修改:

mapred-env.sh文件,添加如下环境变量

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

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description></description>
  </property>

  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/data/mr-history/tmp</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/data/mr-history/done</value>
    <description></description>
  </property>
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
</configuration>



3、YARN配置文件 

$HADOOP_HOME/etc/hadoop 文件夹内,修改:

yarn-env.sh 文件,添加如下 4 行环境变量内容:

yarn-site.xml文件,配置如图属性

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
    <description></description>
</property>

  <property>
    <name>yarn.web-proxy.address</name>
    <value>node1:8089</value>
    <description>proxy server hostname and port</description>
  </property>


  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>

  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>


<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
    <description></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>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
  </property>


  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
    <description>Comma-separated list of paths on the local filesystem where logs are written.</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>Shuffle service that needs to be set for Map Reduce applications.</description>
  </property>
</configuration>



4、分发配置文件 

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

5、集群启动命令介绍 

常用的进程启动命令如下:

一键启动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

6、开始启动YARN集群

node1服务器,以hadoop用户执行

首先执行:$HADOOP_HOME/sbin/start-yarn.sh,一键启动所需的:

  • ResourceManager
  • NodeManager
  • ProxyServer(代理服务器)

其次执行:$HADOOP_HOME/bin/mapred --daemon start historyserver 启动:

  • HistoryServer(历史服务器)

 6、 查看YARNWEB UI页面

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

六、MapReduce & YARN 初体验

 1、一键启动脚本

 启动:

$HADOOP_HOME/sbin/start-yarn.sh

  • 从yarn-site.xml中读取配置,确定ResourceManager所在机器,并启动它
  • 读取workers文件,确定机器,启动全部的NodeManager
  • 在当前机器启动ProxyServer(代理服务器)

关闭

  • $HADOOP_HOME/sbin/stop-yarn.sh

2、单进程启停

除了一键启停外,也可以单独控制进程的启停。

  • $HADOOP_HOME/bin/yarn,此程序也可以用以单独控制所在机器的进程的启停

用法:yarn --daemon (start|stop) (resourcemanager|nodemanager|proxyserver)

  • $HADOOP_HOME/bin/mapred,此程序也可以用以单独控制所在机器的历史服务器的启停

用法:mapred --daemon (start|stop) historyserver

3、提交MapReduce程序至YARN运行

在部署并成功启动YARN集群后,我们就可以在YARN上运行各类应用程序了。
YARN作为资源调度管控框架,其本身提供资源供许多程序运行,常见的有:

  • MapReduce程序
  • Spark程序
  • Flink程序
  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值