赞
踩
理解分布式计算分而治之的思想
学会提交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集群
核心:先分再合,分而治之。
使用场景:面对复杂的任务、庞大的任务如何高效处理?
步骤
分的阶段(局部并行计算)–map
把复杂的任务拆分成若干个小的任务。
拆分的目的以并行方式处理小任务提高效率。
#前提:任务可以拆分,拆分之后没有依赖关系。
结果:每个任务处理完都是一个局部的结果。
map侧重于映射(对应关系) 任务1-->结果1 任务2-->结果2
汇总阶段(全局汇总计算)–reduce
把上一个分的阶段局部结果进行全局汇总 得到最终结果。
reduce指的是结果数量的减少 汇总。
如何面对大数据场景
#使用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底层封装太漂亮。
最终MR程序需要用户的代码和Hadoop自己实现的代码整合在一起 才能叫做完整MR程序。
由于当下企业中MapReduce计算引擎已经日薄西山,所以很少涉及到MapReduce编程了。
可以通过官方提供的示例来感受MapReduce。
MR程序从运行层面看,分3个部分
如何提交MapReduce程序: hadoop jar xxxxx.jar 参数1 参数2
也可以说使用yarnjar xxxxx.jar 参数1 参数2
示例1:评估圆周率π(PI)
示例2:单词统计Wordcount
背景
网页倒排索引 统计关键字在页面中出现的次数。
业务需求
统计文件中每个单词出现的总次数。
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
代码的本地测试
代码提交集群执行
数据都是以<key,value>键值对的形式存在的。不管是输入还是输出。
关于inputpath
关于outputpath
FileAlreadyExistsException: Output directory file:/D:/datasets/wordcount/output already exists
maptask并行度个数机制:逻辑切片机制。
影响maptask个数的因素有
文件的个数
文件的大小
split size=block size 切片的大小受数据块的大小控制
影响reducetask个数的因素
只要用户不设置 永远默认1个
用户也可以通过代码进行设置 设置为几 就是几
当reducetask>=2,数据就会分区了。
yarn是一个通用资源管理系统和调度平台。 详细解释见课堂画图
资源指的跟程序运行相关的硬件资源 比如:CPU RAM
物理层面上-2个组件
主角色 resourcemanager RM
ResourceManager 负责整个集群的资源管理和分配,是一个全局的资源管理系统。
是程序申请资源的唯一入口 负载调度。
从角色 nodemanager NM
nodemanager 负责每台机器上具体的资源管理 负责启动 关闭container容器
程序内部–1个组件
yarn作为通用资源管理系统 不关心程序的种类和程序内部的执行情况? 谁来关心程序内部执行情况? 比如MapReduce程序来说,先maptask 再运行reducetask. 需要一个组件来管理程序执行情况 程序内部的资源申请 各阶段执行情况的监督 #为了解决这个问题 yarn提供了第三个组件 applicationmaster (男)主人,雇主; 主宰; 主人; 有控制力的人; 能手; 擅长…者; #把applicationmaster称之为程序内部的老大角色 负责程序内部的执行情况 #AM针对不同类型的程序有不同的具体实现 yarn默认实现了MapReduce的AM 名字叫做MrAppMaster. 其他软件比如spark flink需要实现自己的AM 才能在yarn运行。 #结论:在上述设计模式下 任何种类程序在yarn运行,首先都是申请资源运行AM角色,然后由AM控制程序内部具体的执行。
所谓的调度器指的是当集群繁忙的时候 如何给申请资源的程序分配资源
scheduler属于ResourceManager功能
YARN3大调度策略
Apache Hadoop版本默认策略是capacity 。CDH商业版本默认策略是Fair。
决定调度策略的参数
#yarn-site.xml
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
#还可以在yarn 8088页面查看
prod 生产环境 线上环境
dev 开发环境
HA叫做高可用模式 注意解决的是单点故障问题。 SPOF
Hadoop中单点故障
NameNode HA —QJM共享日志集群方案
Resourcemanager HA --基于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实现原理
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。