MapReduce——数据切片与MapTask并行度决定机制

MapReduce——数据切片与MapTask并行度决定机制


MapReduce 数据切片和 Map 任务的并行度决定机制是 MapReduce 框架中两个重要的概念,它们直接影响作业的执行效率和性能。

1.数据切片(Data Splits

  • 数据切片是指将输入数据拆分成更小的块或片段,以便并行处理。

  • 在 MapReduce 中,数据切片是由 InputFormat 定义的,InputFormat 是负责将输入数据逻辑上分成独立的块并交给 Map 任务处理的组件。

  • 切片时不考虑数据集整体,而是逐个针对每一个文件单独切片

  • 数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储

  • 数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask

  • 数据切片的大小取决于多个因素,包括文件的大小、输入格式以及 Hadoop 配置中的一些参数。

  • 通常情况下,数据切片的大小会被设置为 HDFS 块大小的整数倍,以便尽可能地利用 Hadoop 分布式文件系统的数据复制和数据本地性特性。


2.并行度问题

MapTask 的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度。

思考:

  • 1G的数据,启动8个MapTask,可以提高集群的并发处理能力。
  • 那么1K的数据,也启动8个MapTask,会提高集群性能吗?
  • MapTask并行任务是否越多越好呢?
  • 哪些因素影响了MapTask并行度?

3.Map 任务的并行度决定机制

  • Map 任务的并行度取决于数据切片的数量和集群的可用资源。

  • 在运行时,MapReduce 框架会为每个数据切片启动一个 Map 任务,这些任务可以并行执行。

  • 但是,并不是每个数据切片都会有一个独立的 Map 任务,因为有时候数据切片的数量可能会超过集群中可用的 Map 任务槽(slots)数量

  • 在 Hadoop 中,默认情况下,一个数据切片会有一个 Map 任务来处理,但是这个规则并不是绝对的。

  • 有时候,框架可能会选择将多个数据切片分配给一个 Map 任务,以减少任务启动和管理的开销。这种情况下,一个 Map 任务会处理多个数据切片,但是任务的处理时间可能会更长。

  • Map 任务的并行度也受到集群资源的限制,包括可用的计算节点数量、每个节点的 CPU 和内存资源等。

  • 如果集群资源有限,那么可能无法同时启动足够数量的 Map 任务,这样就会影响作业的并行度和执行效率。


4.TextInputFormat

FileInputFormat 实现类

  • 思考:在运行MapReduce 程序时,输入的文件格式包括:基于行的日志文件、二进制格式文件、数据库表等。
  • 那么,针对不同的数据类型,MapReduce是如何读取这些数据的呢?
  • FileInputFormat 常见的接口实现类包括TextInputFormatKeyValueTextInputFormat、NLineInputFormat、CombineTextInputFormat 和自定义 InputFormat 等。

TextInputFormat 是 Hadoop 中的一种输入格式类,用于处理文本文件。它将文本文件视为一系列的行(即文本文件中的每一行都作为一个记录),并将每行作为一个键值对的键,其中键是文件中的偏移量(即行在文件中的位置),值是文本行内容。

工作原理

TextInputFormat 的工作原理如下:

  1. 切片: 切片是输入数据在 MapReduce 作业中的基本处理单元。TextInputFormat 默认按文件进行切片,每个文件作为一个切片。(大量小文件则处理效率很低)因此,如果输入目录包含多个文件,每个文件将会被视为一个独立的切片。

  2. 记录读取: 在每个切片内部,TextInputFormat 会将文本文件按行进行读取。它将每一行文本作为一个记录,并将文件中的偏移量作为记录的键。因此,每个键值对的键是一个长整型数值,表示文本行在文件中的位置;值是一个字符串,表示文本行的内容。

  3. 生成键值对: TextInputFormat 将每一行文本转换为一个键值对,其中键是文件中的偏移量,值是文本行内容。

  4. 传递给 Mapper: 生成的键值对将会作为 Mapper 的输入。Mapper 将会按照用户定义的逻辑对每个键值对进行处理,并生成中间结果。

示例

假设有一个文本文件包含以下内容:

Hello, world!
This is a sample text file.

使用 TextInputFormat 作为输入格式,该文件将被切分为两个记录(即两行文本),每个记录将被表示为一个键值对:

  • 键:0,值:“Hello, world!”
  • 键:15,值:“This is a sample text file.”

这些键值对将作为 Mapper 的输入,并根据用户定义的逻辑进行处理。例如,可以编写一个 Mapper,计算每个单词出现的次数,然后将结果传递给 Reducer 进行进一步处理。


5.CombineTextInputFormat 切片机制

框架默认的TextInputFormat 切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个 MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。

CombineTextInputFormat 是 Hadoop 中的一个输入格式类,用于处理文本文件。CombineTextInputFormat 用于小文件过多的场景,它的主要特点是将小文件进行合并,并生成更大的数据块,从而减少作业的 Map 任务数量,提高作业的执行效率。

与普通的 TextInputFormat 不同,CombineTextInputFormat 旨在减少由于小文件过多而导致的 Map 任务数量过多、任务启动慢、作业执行效率低下等问题。

切片机制详解

CombineTextInputFormat 的切片机制主要有以下特点:

  1. 按文件大小切片: 与普通的 TextInputFormat 类似,CombineTextInputFormat 也是按文件为单位进行切片的。每个输入文件都被视为一个独立的切片。

  2. 按行切片: 在文件内部,CombineTextInputFormat 将文件按行进行切片,与 TextInputFormat 相同。每行文本将被视为一个记录,并生成一个键值对。

  3. 合并小文件: CombineTextInputFormat 的一个关键特性是它会尝试合并小文件生成更大的切片。这样可以减少作业中 Map 任务的数量,提高作业的执行效率。合并小文件的具体方式取决于两个参数的配置:

    • mapreduce.input.fileinputformat.split.minsize:指定切片的最小大小。如果一个小文件的大小小于该阈值,它将会被合并到其他切片中。
    • mapreduce.input.fileinputformat.split.maxsize:指定切片的最大大小。如果一个文件过大,超过了该阈值,它将被拆分成更小的切片。
  4. 根据输入目录中文件的大小动态调整切片: CombineTextInputFormat 会根据输入目录中文件的大小动态调整切片的大小和数量,以尽可能地合并小文件。

示例

假设有一个输入目录包含了多个小文件,每个文件都是几百 KB 大小。如果使用 CombineTextInputFormat 作为输入格式,并设置了合适的参数,那么它会将这些小文件合并成更大的切片,并将其作为一个整体交给 Map 任务进行处理。这样做可以大大减少作业中 Map 任务的数量,提高作业的执行效率。

总之,CombineTextInputFormat 的切片机制通过合并小文件,生成更大的切片,从而减少作业的 Map 任务数量,提高作业的执行效率,特别适用于处理大量小文件的场景。

通过合并小文件并生成更大的切片,CombineTextInputFormat 可以减少作业中 Map 任务的数量,从而提高作业的执行效率。同时,它也能够更好地利用 Hadoop 分布式文件系统的数据本地性特性,减少数据传输的开销。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/556200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

六边形酷科技特效单页源码

源码介绍 基于canvas画布绘制多个六边形追踪鼠标&#xff0c;科技感的几何图形酷炫动画特效&#xff0c; 单页html源码&#xff0c;可以做网站动态背景&#xff0c;喜欢的朋友可以拿去 效果截图 完整源码 <!doctype html> <html> <head> <meta charset…

OpenHarmony UI开发-ohos-svg

简介 ohos-svg是一个SVG图片的解析器和渲染器&#xff0c;解析SVG图片并渲染到页面上。它支持大部分 SVG 1.1 规范&#xff0c;包括基本形状、路径、文本、样式和渐变,它能够渲染大多数标准的 SVG 图像。ohos-svg的优点是性能好、内存占用低。 效果展示 SVG图片解析并绘制: …

C++ | Leetcode C++题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution { public:int searchInsert(vector<int>& nums, int target) {int n nums.size();int left 0, right n - 1, ans n;while (left < right) {int mid ((right - left) >> 1) left;if (target < n…

单页面首屏优化,打包后大小减少64M,加载速度快了13.6秒

需求背景 从第三方采购的vue2 ElementUI实现的云管平台&#xff0c;乙方说2011年左右就开始有这个项目了&#xff08;那时候有Vue了吗&#xff0c;思考.jpg&#xff09;。十几年的项目&#xff0c;我何德何能可以担此责任。里面的代码经过多人多年迭代可以用惨不忍睹来形容&a…

面试题:Java中int符号数字的位运算与操作 + 原码、反码、补码之间如何进行转换

题目来源 阿里-淘天-技术1面 问题 -1和4做位运算与操作&#xff0c;结果是多少&#xff1f; 答案 正确答案 4 通过Java代码验证如下&#xff1a; 我的回答 -5&#xff0c;但是-5是错误的答案。 面试的时候&#xff0c;面试官没有告诉我对错。 为什么&#xff1f; 到底…

[生活][杂项] 上班党的注意事项

前言 目前是上班已经接近两年了&#xff0c;目前的状态是&#xff0c;一个人租了一个单间在上班。对于这种情况有以下几点需要注意。 钥匙问题&#xff0c;一定不要陷入钥匙丢失的情况&#xff01;一定不要陷入钥匙丢失的情况&#xff01;一定不要陷入钥匙丢失的情况&#xff…

CSS:filter(滤镜)属性

用途 可以用于img标签&#xff0c;div标签等 图像&#xff0c;背景&#xff0c;边框的调整 常用属性 1. 灰度 grayscale()&#xff0c;默认是0&#xff0c;100%就是黑白 2. blux 给图像设置高斯模糊的程度&#xff0c;radius值设定高斯模糊的程序&#xff0c;表示像素点…

2024年Q1季度冰箱行业线上市场销售数据分析

Q1季度冰箱线上市场表现不如预期。 根据鲸参谋数据显示&#xff0c;2024年1月至3月线上电商平台&#xff08;京东天猫淘宝&#xff09;冰箱累计销量约410万件&#xff0c;环比下降11%&#xff0c;同比下降21%&#xff1b;累计销售额约98亿元&#xff0c;环比下降31%&#xff0…

python爬虫(Selenium案列)第二十四

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

详细分析Python的继承和多态(附Demo)

目录 前言1. 继承2. 多态 前言 入行多年&#xff0c;对于知识点还会混淆&#xff0c;此处主要做一个详细区分 继承&#xff08;Inheritance&#xff09;: 面向对象编程中的一个重要概念&#xff0c;允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff…

工作流JBPM操作API启动实例查询任务

文章目录 8.5 启动实例8.5.1 按照key启动(不加参数)8.5.2 按照key启动(加入参数)8.5.3 启动流程实例的说明 8.6 查询任务8.6.1 查询所有未办理任务8.6.2 查询个人未办理任务8.6.3 查询个人的待办组任务 8.5 启动实例 8.5.1 按照key启动(不加参数) Test // 启动 -- 简单的启…

2024华中杯B题完整思路代码论文解析

2024华中杯B题思路论文汇总 https://www.yuque.com/u42168770/qv6z0d/xpkf6ax8udqq9lt2?singleDoc# 本文针对电子地图服务商利用车辆轨迹数据估计城市路口信号灯周期的问题,提出了一系列数学模型和算法。通过分析车辆行驶轨迹与信号灯的关联性,在不同的约束条件下,实现了对路…

谷歌量化白皮书—PTQ原理

本篇笔记摘抄的原文链接 量化方法 量化粒度 量化模拟 激活层的量化 量化硬件原理 量化范围的设置方法 基于BN的激活层量化范围设置 普通卷积 VS 深度可分离卷积 跨层均衡化 ReLU6比ReLU有什么优势 吸收高偏差、偏差校正、自适应取整 标准PTQ流程 量化模型精度的诊断和性能…

综合大实验

题目&#xff1a; 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两个环回&#xff0c;其…

LeetCode in Python 1338. Reduce Array Size to The Half (数组大小减半)

数组大小减半思路简单&#xff0c;主要是熟悉python中collections.Counter的用法&#xff0c;采用贪心策略即可。 示例&#xff1a; 图1 数组大小减半输入输出示例 代码&#xff1a; class Solution:def minSetSize(self, arr):count Counter(arr)n, ans 0, 0for i, valu…

【ESP32 手机配网教程】

【ESP32 手机配网教程】 1. 前言2. 先决条件2.1 环境配置2.2 所需零件3.3 硬件连接步骤 3. Web热点手动配网3.1. 准备工作3.2. 编译上传程序3.3. 进行手动配网 4. BLE无线配网4.1. 准备工作**4.2. 编译上传程序4.3. 使用手机APP进行无线配网 5. 总结 1. 前言 欢迎使用ESP32进行…

JVM虚拟机(十一)CPU飙高的排查方案与思路

目录 一、排查方案与思路二、总结 一、排查方案与思路 1.一般我们查看 CPU 的使用情况&#xff0c;可以使用 TOP 命令&#xff1a; top执行结果如下所示&#xff0c;这里就可以按照 CPU 使用率进行排序。 2.通过 top 命令查看后&#xff0c;可以查看是哪一个 Java 进程占用 C…

JS中的变量和数据类型及用户输入详解

源码 variate.html<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

详细分析Mysql常用函数(附Demo)

目录 前言1. 聚合函数2. 字符串函数3. 日期函数4. 条件函数5. 数值函数6. 类型转换函数 前言 由于实战中经常运用&#xff0c;索性来一个总结文 创建一个名为 employees 的表&#xff0c;包含以下字段&#xff1a; employee_id&#xff1a;员工ID&#xff0c;整数类型 first…

Redis几种常见的应用方式

1.登录认证 redis最常见的应用就是&#xff0c;登录认证把。再首次登录返回给前端token&#xff0c;把用户名和登录状态缓存到redis一段时间&#xff0c;每次其他请求进来过滤器那这token解析出来的用户名或其他关键的key值&#xff0c;再redis里面查询缓存&#xff0c;有则直…
最新文章