Hadoop :map+shuffle+reduce和YARN分析笔记
yuyutoo 2025-06-04 03:23 4 浏览 0 评论
今天在公司做了一个hadoop分享,包括mapreduce,及shuffle深度讲解,还有YARN框架的详细说明等。
一 引言
1、海量日志数据,提取出某日访问百度次数最多的那个IP
算法思想:分而治之+Hash
1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;
2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;
3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;
4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;
2、Top K:统计最热门的10个查询串
假设目前有一千万个记录,请你统计最热门的10个查询串,要求使用的内存不能超过1G。
第一步、维护一个Key为Query字串,Value为该Query出现次数的HashTable,每次读取一个Query,如果该字串不在Table中,那么加入该字串,并且将Value值设为1;如果该字串在Table中,那么将该字串的计数加一即可。采用Hash Table的原因:查询速度非常的快,几乎是O(1)的时间复杂度。
第二步、堆顶存放的是整个堆中最小的数,现在遍历N个数,把最先遍历到的k个数存放到最小堆中,并假设它们就是我们要找的最大的k个数,X1>X2...Xmin(堆顶),而后遍历后续的N-K个数,一一与堆顶元素进行比较,如果遍历到的Xi大于堆顶元素Xmin,则把Xi放入堆中,而后更新整个堆,更新的时间复杂度为logK,如果Xi<Xmin,则不更新堆
最终的时间复杂度是:O(N) + N'*O(logK)
二 Mapreduce
Hadoop 起源于 google’s 三篇papers:
1 mapreduce;
2 The google file system;
3 big table;
2.1 Mapreduce机制 – from google paper
Mapreduce 是一种处理大数据的编程模式。
1执行概述图Execution Overview
2Master的数据结构Master Data Structures
对于每个map和reduce任务,master中保存着三个状态(idle, in-progress, or completed)和非空闲任务的机器id;master是map 到 reduce的管道;
3容错机制Fault Tolerance
Master会周期性的ping每个worker,如果超时没有收到回应,则认为这个worker死了。
已完成和死掉的worker都会被master置成空闲状态,为了下一次调度
已经完成的map tasks不能重新执行,因为他们的输出保存在本地硬盘里;
已经完成的reduce task不需要重新执行,因为他们的输出已经保存在了全局的HDFS里面;
例如,Map task在worker A 执行失败了,稍后会在worker B再次执行,这时所有的reduce都需要重新执行,以为所有的reducer没有准备好从worker A读出改为从worker B读入;
Map Reduce 是对大范围的worker失败有复原能力的,例如,有80台机器持续是unreachable状态,master为了保证进度的向前推进,简单的使unreachable机器再次执行任务;
4 存储Locality
网络带宽是一个稀缺资源,所以我们利用GFS把文件保存在本地磁盘以节省带宽;
GFS把每个文件划分成64M的block,并且有3个副本在不同的机器上;所以master把map任务分配到有输入文件对应副本的机器上;若这个map任务失败,会转移到具有这个副本的同一网络的其它机器上再次执行;
5 任务粒度Task Granularity
我们把map阶段划分长M pieces,把 reduce阶段划分成Rpieces,理想的M和R均比工作的机器数大很多。M和R应该多大好呢?master需要O(M+R)个调度决策和O(M*R)个状态保存在内存;推荐M=200,000 and R=5,000, using 2,000 工作机器;
6备份任务Backup Tasks
造成总的执行时间过长的原因主要是由某个任务的执行相对其它所有任务过慢,称为掉队者;造成这个任务掉队的可能原因是硬盘读写慢,或者这台机器在调度其它任务,cpu,内存,硬盘或网络带宽资源被占用;
解决办法是当mapreduce任务将要执行完成时,master调度in-progress状态掉队任务的备份执行任务;我们调整这种机制,使占用的计算资源不高于一定的百分比并且实验表明不采用这种机制,时间会增长44%。
2.2 MapReduce 例子 – from yahoo
“Hello World” of MapReduce : the Word Count algorithm :
流程介绍:
Multiple Input files -> Map (Discarded the offset and Split the text) -> Sort and Shuffle(sorts the key-value pairs by key and it “shuffles” all pairs with the same key to the sameReducer) -> Reduce (add up all counts)-> Output to R files
Java中Key-value pair格式:
Map’s input pattern (offset,text) -> (1: ‘Hadoop uses’),(2: ‘ MapReduce‘)
Reduce’s input pattern (word,count) -> (word1:1),(word2,[1,1])
Coding:见ssh
2.3 mapreduce 与机器学习
机器学习算法要是适用于hadoop必须重构算法,改写成mapreduce的分布式程序;有些机器学习算法很好改进,比如朴素贝叶斯就是天然的适用于mapreduce模式,因为先验概率和条件概率可以很好的分布式统计,然而有些机器学习算法却不容易改成分布式。
例子,k-means的分布式程序:
代码: 见ssh
2.4 详解shaffle过程
shuffle总体概述图如上(来自官方文档);shuffle又叫洗牌或打乱,把map结果输入到reduce中,具体过程如下;左半部分细节图如下(来自博客)。
1 一个输入文件会被划分成很多64M的block,split分布式的输入到各个map中;
2 partition的作用是map之后的键值对需要确定分配给哪个reduce,partition会把hash(key)%R的reduce序号追加到map处理后的键值对尾,保存到中间缓存中;
3 spill:sort和combiner组成,网络带宽是十分宝贵的资源,为了节省带宽,排序并合并缓存中的map生成的键值对,例如(a,1)(a,1)合并(a,2);
4 merge:缓存快满的时候,会写入磁盘,上一步spill只是合并了缓存中的键值对,硬盘中有来自不同文件的键值对,需要再次合并相同key的value,也是为了减少带宽;例如 (a,2)(a,3)合并为(a,[2],[3]),再调用combine方法,形成(a,5),最后根据partition的hash地址发送到目标reduce中。
右半部分细节图:
1 copy:通过HTTP方式请求map task所在的TaskTracker获取map task的输出文件,保存在缓存中(map后的结果存储在磁盘,由TaskTracker管理);
2 merge:跟map过程一样,缓存内容溢写到了磁盘,merge磁盘来自不同map的输出,合并相同key的value,输出到reduce中。
3 input:把全部缓存和磁盘的文件形成最终文件,输入到reduce中。
备注:至此两个步骤合起来才是整个shuffle的完整过程。我认为整个mapreduce过程应该是: map + Shuffle+reduce才贴切。
3 hadoop1 和 hadoop2架构对比
由于MRv1 在扩展性、可靠性、资源利用率和多框架等方面存在明显不足,Apache
开始尝试对MapReduce 进行升级改造,于是诞生了更加先进的下一代MapReduce 计算框
架MRv2。由于MRv2 将资源管理模块构建成了一个独立的通用系统YARN,这直接使得
MRv2 的核心从计算框架MapReduce 转移为资源管理系统YARN。
3.1 编程模型对比
YARN 负责资源管理和调度,而ApplicationMaster 仅负责一个作业的管理;MRv1 仅是一个独立的离线计算框架,而MRv2 则是运行于YARN 之上的MapReduce。
YARN上可以支持运行出mapreduce外的多种计算框架,并能够统一管理和调度。
3.2 Hadoop1架构和Hadoop2架构对比
通过将原有JobTracker 中与应用程序相关和无关的模块分开,不仅减轻了JobTracker 负载,也使得Hadoop 支持更多的计算框架。
3.3 YARN基本组成结构
YARN 主要由ResourceManager、NodeManager、ApplicationMaster和Container 等几个组件构成。
1 Resource Manager:主要由两个组件构成:调度器(Scheduler)和(Applications Manager,ASM);调度器:将系统中的资源分配给各个正在运行的应用程序;应用程序管理器:应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控ApplicationMaster 运行状态并在失败时重新启动它等。
2 ApplicationMaster:
1)与RM 调度器协商以获取资源(用 Container 表示);
2)将得到的任务进一步分配给内部的任务;
3)与 NM 通信以启动 / 停止任务;
4)监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
3 NodeManager(NM):NM 是每个节点上的资源和任务管理器;
(NM与ApplicationMaster的区别是NM是控制整台机器资源和任务管理,而AM是控制每个应用的资源和任务管理)
4 Container:是YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、
CPU、磁盘、网络等。
总结:hadoop2统称为YARN,YARN负责资源管理和任务调度,MR2只是上面的一个计算框架,YARN还可以支持Spark和Hbase等框架。
相关推荐
- Docker部署 chatgpt-web-midjourney-proxy:开启一站式AI与绘图
-
ChatGPT和Midjourney的结合无疑是创新性的突破。ChatGPT作为强大的语言模型,能够为用户提供智能的对话和文本生成服务。而Midjourney则以其出色的绘画能力,能够根据...
- Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)
-
具体案例:局域网内有两台主机,一台Linux、一台Windows,现在需要配置一台Cacti监控服务器对这两台主机进行监控...
- 那些少为人知却非常有意思好用的 Chrome 扩展
-
ChromeWebStoreSessionManager要睡觉了,还有网页没看完怎么办?等明天点开歷史记录重新加载?No!有这个保存当前打开的链接,下回直接打开一串网址,好顶赞有木有!!!chr...
- 分享一款轻量级 HTTP(S) 代理 TinyProxy
-
概述众所周知,我们常用的Web服务器Nginx/Apache都可以很方便的用来做为正向或反向代理服务器使用。但是它们都并不支持HTTPS的正向代理。Nginx做为正向代理不支持HT...
- 深入理解 WebSecurityConfigurerAdapter「源码篇」
-
我们继续来撸SpringSecurity源码,今天来撸一个非常重要的WebSecurityConfigurerAdapter。我们的自定义都是继承自WebSecurityConfigurer...
- RPC、Web Service等几种远程监控通信方式对比
-
几种远程监控通信方式的介绍一.RPCRPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.meth...
- 老酒好喝,5G时代数据中心柴油发电机组以GPRS方式接入动环监控
-
背景:随着手机的普及,电信运营商基站越建越多,网络覆盖范围也越来越广,基本上随时随地都能通过运营商的网络上网冲浪,这给我们传统的通过有线方式实现的动环监控也提带来了新的启发:对于不具备有线传输条件的的...
- 为了春节红包大战,微信做了一次成功的预热!
-
经过上午的预告,微信在今天下午17:00正式推出了微信红包新玩法——红包照片。微信用户在朋友圈点击照片发送按钮,会看到“红包照片”选项,用户在选择发布照片之后,这张照片将被模糊处理后,再发送到朋友...
- Proxy-Lite实战:3步部署+2个案例,轻松掌握轻量级网页自动化
-
大家好,我是何三,80后老猿,独立开发者一、Proxy-Lite模型概述...
- 会Python?那么你一定要试一试mitmproxy
-
mitmproxy是一款工具,也可以说是python的一个包,使用这个工具可以在命令行上进行抓包(现在也可以在web页面上查看上抓的数据包了),还可以对所抓到的包进行脚本处理,非常有用。和...
- 十大Web安全扫描工具,你知道哪些?
-
初入门时,喜欢将目标站点直接丢扫描器,慢慢等扫描结果,极度依赖Web扫描器;而有一些漏洞高手,善于运用运用各种工具但并不依赖工具,经常可以找到扫描工具发现不了的漏洞。一款好用的Web扫描器对于白帽子来...
- 鸿蒙5网页开发神器 ArkWeb:让 Web 和原生手拉手跳舞
-
你有没有想过,在鸿蒙应用里既能用原生代码写高性能界面,又能直接塞进一个网页?这听起来有点像把汉堡和披萨拼在一起,但ArkWeb(方舟Web)真的做到了!今天咱们就聊聊这个神奇的工具,看看它如何让...
- MapReduce过程详解及其性能优化(详细)
-
从JVM的角度看Map和ReduceMap阶段包括:第一读数据:从HDFS读取数据1、问题:读取数据产生多少个Mapper??Mapper数据过大的话,会产生大量的小文件,由于Mapper是基于虚拟...
- 大数据平台建设需要掌握的14个知识
-
Q1、大数据分析中的实时推荐是如何实现的?@rein07某证券系统架构师:实时推荐需要使用实时处理框架结合推荐算法,从而做到对数据的实时处理和推荐。实时处理框架有Storm、Flink、Spark...
- HDFS可视化管理系统设计与实现(hdfs的可靠性设计,主要依靠哪些机制来实现)
-
摘要:Hadoop工具核心模块包括分布式文件系统(HadoopDistributedFileSystem,HDFS)和分布式编程模型MapReduce,其中HDFS是Hadoop数据存储处理的...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- Docker部署 chatgpt-web-midjourney-proxy:开启一站式AI与绘图
- Cacti监控服务器配置教程(基于CentOS+Nginx+MySQL+PHP环境搭建)
- 那些少为人知却非常有意思好用的 Chrome 扩展
- 分享一款轻量级 HTTP(S) 代理 TinyProxy
- 深入理解 WebSecurityConfigurerAdapter「源码篇」
- RPC、Web Service等几种远程监控通信方式对比
- 老酒好喝,5G时代数据中心柴油发电机组以GPRS方式接入动环监控
- 为了春节红包大战,微信做了一次成功的预热!
- Proxy-Lite实战:3步部署+2个案例,轻松掌握轻量级网页自动化
- 会Python?那么你一定要试一试mitmproxy
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)