首先,我们需要了解MapRedurce的基本框架
我们都知道MapReduce主要分为Map阶段和Reduce阶段,我们将Map阶段处理的任务称之为MapTask,Reduce阶段处理的任务称之为ReduceTask
而在处理Mapper之前,需要经历一个数据如何输入的问题,即InputFormat阶段。
InputFormat:(中文翻译:输入格式):是org.apache.hadoop.mapreduce包下的一个抽象类。描述了 Map-Reduce 作业的输入规范。Map-Reduce 框架依赖作业的InputFormat来:验证作业的输入规范
Map-Reduce框架通过FileInputFormat的子类 将输入文件拆分为逻辑InputSplit(数据切片),后将每个切片分配给单独的Mapper,进而形成一个个的MapTask。
默认使用的输入方式为:TextInputFormat
注意:MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度,
如何理解:例:1G的数据,启动8个MapTask,可以提高集群的并发处理能力。那么1K的数据,也启动8个MapTask,会提高集群性能吗?MapTask并行任务是否越多越好呢?哪些因素影响了MapTask并行度?
附:InputFormat层次图
首先,我们要区分数据切片和数据块的概念
数据块:Block,是HDFS物理上将文件分成一块一块进行存储,每一个Block都能在磁盘上找到,是真实存在的。
数据块是HDFS存储数据的单位
数据切片:InputSplit,逻辑概念,只是在数据输入的时候逻辑上对数据进行切片处理,并不会在磁盘上将其进行分配分片存储。
数据切片是MapReduce程序计算输入数据的单位
一个数据切片会对应启动一个MapTask,默认情况下,切片大小等于块大小(BlockSize)
由此可见:一个Job的Map阶段并行度由客户端在提交Job时的切片数决定
此外:当输入数据为多个文件时,此时的切片操作是不考虑数据集的整体的,是逐个针对每个文件单独切片。
首先我们需要了解,用户的一个计算请求就是一个Job(例WordCount),而每一个Job都会被拆分为多个Task(MapTask、ReduceTask)进行处理。
注:在分布式环境下,多Task在多台主机下处理
每一个MapReduce程序中 都需要一个Driver类来执行提交,提交的是一个描述了各种必要信息的Job对象。
/**
WordCount案例的Driver类
*/
//1.获取job
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
//2.设置jar包路径
job.setJarByClass(WordCountDriver.class);
//3.关联mapper、reducer
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
//4.设置map输出的KV类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
//5.设置最终输出的kv类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//6.设置输入路径 输出路径
FileInputFormat.setInputPaths(job, new Path("E:\\hadooptest\\input"));
FileOutputFormat.setOutputPath(job, new Path("E:\\hadooptest\\output\\outputword"));
//7.提交job
boolean result = job.waitForCompletion(true);
System.exit(result ? 0 : 1);
其中,boolean result = job.waitForCompletion(true);
代码的具体底层实现功能大致为:
参考:Job提交流程源码和切片源码详解 - 有心有梦 - 博客园 (cnblogs.com)
通用的是:FileInputFormat
- 按照文件的内容长度进行切片,且默认切片大小 = blocksize
- 每次切片时,都要判断剩下的部分是否大于块的1.1倍,不大于就将剩下的内容划分为一个切片
- 切片信息会被写到一个切片规划文件中,提交切片规划信息到Yarn后,Yarn上的MrAppMaster会根据切片规划文件计算开启MapTask的个数
TextInputFormant为FileInputFormat的子类,是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable类型。值是这行的内容,不包括任何行终止符(换行符和回车符),Text类型。
框架默认的TextInputFormat切片机制是对任务按文件规划切片,不管文件多小,都会是一个单独的切片,都会交给一个MapTask,这样如果有大量小文件,就会产生大量的MapTask,处理效率极其低下。
CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。
CombineTextInputFormat切片过程分为两部分:虚拟存储过程和切片过程。具体切片机制参考:MapReduce-CombineTextInputFormat 切片机制 - 江湖小小白 - 博客园 (cnblogs.com)
文章浏览阅读2k次,点赞3次,收藏25次。1. 导入所需的库import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltfor i in [tf, np]: print(i.__name__,": ",i.__version__,sep="")输出:tensorflow: 2.2.0numpy: 1.17.42. 导入Fashion_MNIST数据集fashion_mnist = tf.keras.datasets.fas_difussion model mnist
文章浏览阅读693次。点击ppt中的某一张图片,上边工具栏会出现压缩图片的选项。_wps ppt压缩
文章浏览阅读9.4k次。如果需要在网页中添加视频,可以参考下面的代码,支持MP4视频自动循环播放。纯HTML5视频自动循环播放HTML>不过火狐浏览器貌似默认禁止自动播放音频视频,需要到选项 → 隐私与安全 → 自动播放,设置允许音频和视频。如果不设置就可以自动播放,可以使用代码二。配合JS自动循环播放html>HTML5视频自动循环播放window.onload=function(){varloca..._video html播放快结束的时候一直循环最后几秒
文章浏览阅读8.2k次,点赞8次,收藏44次。摘自:STM32F4开发板硬件平台简介作者:SKY丶丿平才发布时间: 2021-03-20 10:44:41网址:https://blog.csdn.net/weixin_48264057/article/details/115023309_stm32f4探索者开发板介绍
文章浏览阅读8.1k次。2016.12.20 乐刻运动 体育运动 B轮 亿元及以上人民币2016.12.14 SenseTime商汤科技 企业服务 B轮 1.2亿美元2016.12.13 OL里昂 体育运动 战略投资 1亿欧元2016.12.13 High Fidelity _idg 被投企业清单
文章浏览阅读127次。此外,VR全景看车还可以提供个性化选车服务,根据消费者的喜好和需求来匹配合适的车型,消费者自定义汽车的外观和配置,以此来挑选更符合心意的车辆。消费者通过VR全景技术,身临其境云端看车,720度多角度缩放查看,同传统的图文视频的看车模式相比,VR看车展现的更加详细,3D可视化说明书、热点标注、一键更换外观等,帮助消费者解决了不少的看车难题。除此之外,在VR虚拟车展中,我们还可以适当的添加一些营销活动,例如签到有礼、分享转发、砸金蛋等趣味化游戏,让消费者得到一些购车优惠,这样能更有效提升意向客户的购买率。_vr看车
文章浏览阅读58次。一、前言课程名称:软件工程实践作业要求:团队项目需求分析团队名称:葫芦娃战队本次作业目标:完成项目需求说明书软件规格需求说明书:https://files.cnblogs.com/files/beifengtuanzi/%E8%91%AB%E8%8A%A6%E5%A8%83%E9%9C%80%E6%B1%82%E8%AF%B4%E6%98%8E%E4%B9%A6.zip需求报告PPT...
文章浏览阅读1.4k次。Linux man命令数字含义 1 User Commands 2 System Calls 3 C Library Functions 4 Devices and Special Files 5 File Formats andConventions _man 3 printf与man 1 printf有何区别?这里的数字的意义是什么
文章浏览阅读1.2k次,点赞2次,收藏5次。#include "stc15f2k60s2.h"#include "nrf.h"#include "oled.h"#include "usart.h"#include "motor.h"#define L_UPPER_LIMIT 240 ..._遥控车程序c代码
文章浏览阅读5k次。https://github.com/guanzhi/GmSSL/blob/master/include/openssl/ssl.h#L1673-L1720#define SSLv23_method TLS_method#define SSLv23_server_method TLS_server_method#defi..._tls_server_method
文章浏览阅读666次。EduSoho开源版 播放几分钟就 您的浏览器不能播放此视频,快进也会出现相同的问题。本地视频出现当前浏览器不能播放的原因:1、服务器 php 是否安装 fileinfo组件。2、视频格式编码不是MP4,H264编码,如果不清楚格式编码,用格式工厂重新转码输出MP4,H264编码;3、视频太大或者网络太慢,本地视频没有切片播放功能,加载完全时才能播放,如果在固定时间内没有加载完全,就会出现不能播放提示。处理建议:可以对接第三方云视频,例如阿里云点播、腾讯云点播、七牛云点播、保利威视点播等等._edusoho 视频加载遇到问题
文章浏览阅读74次。在第一课中我们己经介绍过,ActionScript是一部语言,即然是语言它就有它自己的语法[color="#993300"][1b]一、ActionScript语句是区分大小写的:[/1b][/color]在ActionScript中英语字母的大小写具有不同的意义的.我们来看一个例子:打开时间轴第一帧的动作面板,输入: Name="Sanbos"; name="假博士"; ..._前端as语法