Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA


今日课程学习目标
理解分布式计算分而治之的思想
学会提交MapReduce程序
掌握MapReduce执行流程
掌握YARN功能与架构组件
掌握程序提交YARN交互流程
理解YARN调度策略
掌握Hadoop HA实现原理
今日课程内容大纲
#1、初识MapReduce
	MapReduce背后的思想	先分再合,分而治之
	MapReduce设计构思
	官方MapReduce示例
    MapReduce Python接口
    	
#2、MapReduce基本原理
	整体流程梳理
	map阶段执行流程
	reduce阶段执行流程
	shuffle机制
	
#3、Hadoop YARN
	介绍:集群资源管理 任务调度
	3大组件 架构
	程序在yarn运行流程:以mr程序提交为例
	yarn调度器
    
#4、Hadoop HA集群
	高可用概念:持续可用 一直可用
		解决单点故障问题  主备集群
	Hadoop HDFS HA实现方案--QJM、YARN HA
	搭建HA集群

一、初识MapReduce
1.1、MapReduce思想
  • 核心:先分再合,分而治之

  • 使用场景:面对复杂的任务、庞大的任务如何高效处理?

  • 步骤

    • 分的阶段(局部并行计算)–map

      把复杂的任务拆分成若干个小的任务。
      拆分的目的以并行方式处理小任务提高效率。
      
      #前提:任务可以拆分,拆分之后没有依赖关系。
      结果:每个任务处理完都是一个局部的结果。
       
      map侧重于映射(对应关系)  任务1-->结果1  任务2-->结果2
      
    • 汇总阶段(全局汇总计算)–reduce

      把上一个分的阶段局部结果进行全局汇总 得到最终结果。
      
      reduce指的是结果数量的减少 汇总。
      
1.2、Hadoop MapReduce 设计构思
  • 如何面对大数据场景

    #使用MapReduce思路来处理大数据。
    
    先把数据集拆分若干个小的数据集,前提是可以拆分并且拆分之后没有依赖。
    拆分之后可以并行计算提高计算。
    
    再通过全局汇总计算得出最终结果。
    
  • 构建了函数式编程模型Map Reduce

    #函数本质就是映射。
    f(x)=2x+1
    	当x=1 f(1)=3
    	当x=2 f(2)=5
    x-->f(x) 一一对应的映射关系。	
    
    #对应MapReduce来说 每个阶段都是输入数据经过处理对应着输出。
     MapReduce处理的数据类型是<key,value>键值对。
     实际使用中 考虑每个阶段输入输出 key value是什么。
    
  • 统一构架,隐藏系统层细节

    精准的把技术问题和业务问题区分。  技术是通用的 业务不通用的。
    	hadoop实现了底层所有的技术问题。 --->90%代码   怎么做(how to do)
    	用户实现业务问题               --->10%代码    做什么(what need to do)
    	
    使用简单不代表技术简单 只能说MapReduce底层封装太漂亮。
    
1.3、MapReduce官方示例

最终MR程序需要用户的代码和Hadoop自己实现的代码整合在一起 才能叫做完整MR程序。

由于当下企业中MapReduce计算引擎已经日薄西山,所以很少涉及到MapReduce编程了。

可以通过官方提供的示例来感受MapReduce。

  • MR程序从运行层面看,分3个部分

    • maptask map阶段运行的task 处理map阶段的任务
    • reducetask reduce阶段运行的task 处理reduce阶段的任务
    • MrAppMaster 程序内部的老大 负责资源申请和task监督。

如何提交MapReduce程序: hadoop jar xxxxx.jar 参数1 参数2

也可以说使用yarnjar xxxxx.jar 参数1 参数2

  • 示例1:评估圆周率π(PI)

    • mr程序的执行需要硬件资源(cpu ram) 而yarn正好管理这些资源 所以第一步首先连接yarn申请资源
    • mr程序分为两步
      • map阶段
      • reduce阶段
    • 每个阶段都会运行task任务 把map阶段的任务叫做maptask 同理 reduce阶段的任务叫做reducetask.
  • 示例2:单词统计Wordcount

    • 背景

      网页倒排索引 统计关键字在页面中出现的次数。
      
    • 业务需求

      统计文件中每个单词出现的总次数。
      

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA_第1张图片

1.4、MapReduce Python接口接入
  • Python3的Linux安装

    #详细步骤见课程附件资料
    
    #注意 如果需要Python2和3版本同时存在 那么就不要删除之前的软链接  创建Python3即可
    
    ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
    ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
    
  • 代码的本地测试

  • 代码提交集群执行


二、MapReduce基本原理
2.1、MapReduce输入和输出
  • 数据都是以键值对的形式存在的。不管是输入还是输出。

  • 关于inputpath

    • 指向的是一个文件,mr就处理这一个文件
    • 指向的是一个目录,mr就处理该目录下所有的文件 整体当做数据集处理。
  • 关于outputpath

    • 要求指定的目录为空目录 不能够存储 否则执行校验失败
    FileAlreadyExistsException: Output directory file:/D:/datasets/wordcount/output already exists
    
2.2、整体流程

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA_第2张图片

2.3、map阶段流程

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA_第3张图片

  • maptask并行度个数机制:逻辑切片机制。

  • 影响maptask个数的因素有

    文件的个数
    文件的大小
    split size=block size  切片的大小受数据块的大小控制 
    
2.4、reduce阶段流程

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA_第4张图片

  • 影响reducetask个数的因素

    • 只要用户不设置 永远默认1个

    • 用户也可以通过代码进行设置 设置为几 就是几

      当reducetask>=2,数据就会分区了。
      
2.5、shuffle机制

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA_第5张图片


三、Apache Hadoop YARN
3.1、YARN的概述
  • yarn是一个通用资源管理系统调度平台。 详细解释见课堂画图

    资源指的跟程序运行相关的硬件资源  比如:CPU RAM 
    
3.2、YARN组件–3大组件
  • 物理层面上-2个组件

    • 主角色 resourcemanager RM

      ResourceManager 负责整个集群的资源管理和分配,是一个全局的资源管理系统。
      是程序申请资源的唯一入口 负载调度。
      
    • 从角色 nodemanager NM

      nodemanager 负责每台机器上具体的资源管理 负责启动 关闭container容器
      
  • 程序内部–1个组件

    • ApplicationMaster AM
    yarn作为通用资源管理系统 不关心程序的种类和程序内部的执行情况?
    
    谁来关心程序内部执行情况?
    比如MapReduce程序来说,先maptask 再运行reducetask.
    
    需要一个组件来管理程序执行情况  程序内部的资源申请 各阶段执行情况的监督
    
    #为了解决这个问题 yarn提供了第三个组件 applicationmaster 
    ()主人,雇主; 主宰; 主人; 有控制力的人; 能手; 擅长…者;
    
    #把applicationmaster称之为程序内部的老大角色 负责程序内部的执行情况
    
    #AM针对不同类型的程序有不同的具体实现
    yarn默认实现了MapReduce的AM  名字叫做MrAppMaster.
    其他软件比如spark flink需要实现自己的AM 才能在yarn运行。
    
    
    #结论:在上述设计模式下  任何种类程序在yarn运行,首先都是申请资源运行AM角色,然后由AM控制程序内部具体的执行。
    
3.3、client提交程序到yarn运行流程
  • 以MapReduce程序为例

Python+大数据-hadoop(四)-Hadoop MapReduce、YARN、HA_第6张图片

3.4、YARN schduler
  • 所谓的调度器指的是当集群繁忙的时候 如何给申请资源的程序分配资源

  • scheduler属于ResourceManager功能

  • YARN3大调度策略

    • FIFO Scheduler 先进先出策略
    • capacity Scheduler 容量调度策略
    • Fair Sheduler 公平调度策略
  • Apache Hadoop版本默认策略是capacity 。CDH商业版本默认策略是Fair。

    • 默认情况下,整个yarn集群在capacity策略下,划分为一个队列 名字叫做default,占整个集群资源的100.
  • 决定调度策略的参数

    #yarn-site.xml
    
    yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    
    #还可以在yarn 8088页面查看
    
  • prod 生产环境 线上环境

  • dev 开发环境


四、Hadoop HA集群
  • HA叫做高可用模式 注意解决的是单点故障问题。 SPOF

  • Hadoop中单点故障

    • NameNode
    • Resourcemanager
  • NameNode HA —QJM共享日志集群方案

    • zkfc 实现主备切换避免脑裂
    • jn集群 editslog编辑日志同步
  • Resourcemanager HA --基于zk实现

    • RM需要维护的数据量很少 不像NN需要同步文件系统大量的元数据。直接基于zk即可完成
    • 别忘了 zk也是一个分布式小文件存储系统。
  • Hadoop HA集群搭建 难点就是配置文件的编写

  • 听懂原理 可以不搭建 后面使用非HA集群。

    • 针对当下集群进行逻辑删除 备份
    • 使用新的安装包进行编辑
  • HA 主备切换错误 缺少依赖

    2021-05-30 17:02:40,372 WARN org.apache.hadoop.ha.SshFenceByTcpPort: PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8020 via ssh: bash: fuser: command not found
    
    #yum install -y fuser  猜想行为
    
    yum install -y psmisc
    

今日作业
理解分布式计算分而治之的思想
学会提交MapReduce程序
掌握MapReduce执行流程
掌握YARN功能与架构组件
掌握程序提交YARN交互流程
理解YARN调度策略
掌握Hadoop HA实现原理

你可能感兴趣的:(python+大数据,linux,大数据,hadoop,python,apache)