hadoop-mapreduce 详解
mapreduce 完整流程解析
1. 在客户端启动一个 job;
hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.6.5.jar -files tmp/example1/mapper.py,tmp/example1/reducer.py -mapper 'python mapper.py' -reducer 'python
reducer.py' -input /usr/mr/example1/input/* -output /usr/mr/example1/output10
2. 该 job 向 jobtrack 申请一个 job id;
3. 将运作该 job 所需的资源上传至 hdfs,包括:jar 文件、配置文件、客户端计算所得的计算划分信息;
jobtrack 为这些文件创建一个 文件夹,名字为 job id;
jar 文件默认为 10 个副本; 【由 mapred.submit.replication 属性控制】
输入划分信息 告诉 jobtrack 应该为这个 job 启动 多少个 map 任务;
4. jobtrack 收到 job 后,将其放入一个 消息队列;
5. 该 job 被 get 时,jobtrack 根据 输入划分信息 为其创建对应个 map 任务,并将 map 任务 分发给 tasktrack;
// 注意,在分发 map 任务时,需要把 map 任务 发送到 存有对应数据 block 的 tasktrack;
// 同时发送过去的还有 jar 包等文件;
// 这在 mr 中叫 运算移动,数据不移动;
6. tasktrack 定时向 jobtrack 发送心跳,证明自己还活着,并且告诉 jobtrack map进度 等多个信息;
7. jobtrack 收到 job 的 最后一个任务完成 信息时,将该作业标记为 完成,并给用户发送信息
map 流程解析
map 中有几个主要概念:
分区:partition,根据 key 进行分区,一般是 hash 方法
排序:sort,对 key 进行排序,排序在 hadoop 中起到核心作用
溢写:spill,把数据从内存写入磁盘
流程图-单个 map 任务
本次描述以 wordcount 为例进行阐述
1. input split 输入切片,其实就是一个 block,我们可以理解为一个 文件;
一个 split 对应一个 map;
默认情况下,一个 block 大小 为 64M,当然可以自定义;
aaa
bbb
aaa
aaa
ccc
aaa
ccc
2. map 的输出 存放在 缓存 中, 【缓冲区 默认 大小为 100M,由 io.sort.mb 属性控制】
当缓存快要溢出时, 【默认为 缓冲区 的 80%,由 io.sort.spill.percent 属性控制】
在本地创建一个临时文件,将 缓冲区的数据 写入 文件;
map 就是 逐个处理,比如 work 为 key,value 为 1,直接扔到 标准输出;
3. 在 完成 spill 之前,需要 partition 和 sort,这是 核心,为什么呢,看下图
如果 设置了 Combiner,会将 sort 的结果 combiner 后再 spill 到磁盘,以节省磁盘空间;
分区的数目 等于 reducer 任务的个数;
4. 如果 block 很大,需要 溢写 多个 文件,就行 上图中第四列所示;
5. map 完毕 有多个 溢写文件时,需要将这些 文件 根据 key 进行合并为一个带分区的文件;
合并的过程 也有 sort 和 combiner 操作;
为了减少 网络传输,这里还可以将 合并后的文件 压缩; 【只要将 mapred.compress.map.out 设置为true就可以】
6. 将分区中的数据 拷贝到 对应的 renducer 任务;
reducer 流程解析
这里放一张 中文图,其实和上图一样
1. 将 多个 map 传过来的数据 进行 sort ,然后 合并;
2. reducer 处理;
3. 将结果输出到 hdfs;
最后再来几张图,再看已是一目了然
参考资料:
https://www.cnblogs.com/laowangc/p/8961946.html#top
https://www.jianshu.com/p/461f86936972
https://www.cnblogs.com/52mm/p/p15.html
hadoop-mapreduce 详解的更多相关文章
- hadoop之mapreduce详解(进阶篇)
上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...
- Hadoop Pipeline详解[摘抄]
最近使用公司内部的一个框架写map reduce发现没有封装hadoop streaming这些东西,查了下pipeline相关的东西 Hadoop Pipeline详解 20. Aug / had ...
- Hadoop Streaming详解
一: Hadoop Streaming详解 1.Streaming的作用 Hadoop Streaming框架,最大的好处是,让任何语言编写的map, reduce程序能够在hadoop集群上运行:m ...
- hadoop框架详解
Hadoop框架详解 Hadoop项目主要包括以下四个模块 ◆ Hadoop Common: 为其他Hadoop模块提供基础设施 ◆ Hadoop HDFS: 一个高可靠.高吞吐量的分布式文件系统 ◆ ...
- Python API 操作Hadoop hdfs详解
1:安装 由于是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的 >pip install hdfs 2:Client——创建集群连接 ...
- hadoop之mapreduce详解(基础篇)
本篇文章主要从mapreduce运行作业的过程,shuffle,以及mapreduce作业失败的容错几个方面进行详解. 一.mapreduce作业运行过程 1.1.mapreduce介绍 MapRed ...
- 大数据入门第八天——MapReduce详解(三)MR的shuffer、combiner与Yarn集群分析
/mr的combiner /mr的排序 /mr的shuffle /mr与yarn /mr运行模式 /mr实现join /mr全局图 /mr的压缩 今日提纲 一.流量汇总排序的实现 1.需求 对日志数据 ...
- 大数据入门第七天——MapReduce详解(一)入门与简单示例
一.概述 1.map-reduce是什么 Hadoop MapReduce is a software framework for easily writing applications which ...
- Hadoop基本命令详解
调用文件系统(FS)Shell命令应使用bin/hadoop fs <args>的形式.所有的的FS shell命令使用URI路径作为参数.URI路径详解点击这里. 1.cat 说明:将路 ...
- 大数据入门第九天——MapReduce详解(六)MR其他补充
一.自定义in/outputFormat 1.需求 现有一些原始日志需要做增强解析处理,流程: 1. 从原始日志文件中读取数据 2. 根据日志中的一个URL字段到外部知识库中获取信息增强到原始日志 3 ...
随机推荐
- 「雅礼集训 2017 Day5」远行
题目链接 问题分析 要求树上最远距离,很显然就想到了树的直径.关于树的直径,有下面几个结论: 如果一棵树的直径两个端点为\(a,b\),那么树上一个点\(v\)开始的最长路径是\(v\rightarr ...
- Unity3D_(游戏)甜品消消乐03_游戏UI设计
甜品消消乐01_游戏基础界面 传送门 甜品消消乐02_游戏核心算法 传送门 甜品消消乐03_游戏UI设计 传送门 (源码在文章最下面~) 实现过程 游戏界面UI 分数与时间的UI显示 有关游戏U ...
- scala实战学习-快速排序
def qSort(a:List[Int]):List[Int]={ if(a.length < 2) a else qSort(a.filter(a.head > _)) ++ a.fi ...
- python3笔记十一:python数据类型-List列表
一:学习内容 列表概念 列表创建:创建空列表.创建带有元素的列表 列表访问:取值 列表修改:替换元素.追加元素.追加列表.插入元素 列表删除:移除列表中指定下标处的元素.移除匹配条件的第一个元素.移除 ...
- 有关C#写一个WindowsService的两篇文章
1.http://blog.csdn.net/yysyangyangyangshan/article/details/10515035 上面的这篇文章一共两段,第二段讲的是使用代码来安装发布这个Win ...
- html 行内元素和块级元素
行内元素一般是内容的容器,而块级元素一般是其他容器的容器.一般情况下,行内元素只能包含内容或者其它行内元素,宽度和长度依据内容而定,不可以设置,可以和其它元素和平共处于一行:而块级元素可以包含行内元素 ...
- Macpro搭建java自动化(selenium+chrome)
准备工作: 1.下载安装eclipse,并安装培训jdk软件及环境变量: 2.下载selenium,系工具包: http://seleniumhq.org/download/ selenium-ser ...
- spark 源码编译 standalone 模式部署
本文介绍如何编译 spark 的源码,并且用 standalone 的方式在单机上部署 spark. 步骤如下: 1. 下载 spark 并且解压 本文选择 spark 的最新版本 2.2.0 (20 ...
- leetcode-easy-math-13 Roman to Integer
mycode 97.21% class Solution(object): def romanToInt(self, s): """ :type s: str :rty ...
- DeepWalk 安装指南
DeepWalk 安装指南 创建 conda 虚拟环境 conda create -n deepwalk pip python=3.5 conda activate deepwalk 安装 deepw ...