大数据(2g)MapReduce补充

大数据分析技术之MapReduce实践:词频统计(九) 写在开头:目前已经陆陆续续搭建好了Linux、Hadoop相关的环境,可以开始一些简单的实例演示了。后面也会陆续更新这个系列了。 学习内容安排 本阶段学习内容的安排的话可能没有具体的内容规划,不会去涉及环境配置、软件安装的内容,主要是以介绍使用为主,以实例出发。大数据需要在Linux系统上进行,然后现在电脑使用的软件如下(部分软件由于学习原因选择的老版本), 软件名称 备注 NetBeans IDE 8.2 JAVA编译器 CentOS 6.6 Linux系统 VMware Wo. 阅读详情

概述

  • MapReduce是分布式计算框架
    适用于海量数据的离线批处理
    不适合实时计算、DAG计算、迭代式计算的场景
    是HIVE引擎之一

数据输入

切片与MapTask并行度机制

  • 数据块:Block是HDFS物理上把数据分成一块一块
  • 数据切片:数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储

  1. 一个Job的Map阶段并行度由客户端在提交Job时的切片数决定
  2. 每一个Split切片分配一个MapTask实例,并行处理
  3. 默认, 切 片 大 小 = B l o c k S i z e 切片大小=BlockSize 切片大小=BlockSize

FileInputFormat切片机制

  1. 切片是针对文件,而不是数据的整体
  2. 一个文件至少一个MapTask,如果小文件过多,就会有很多MapTask,开销很大

CombineTextInputFormat切片机制

  • 将输入目录下所有文件大小,依次跟setMaxInputSplitSize设置值比较
    如果小于设置值,逻辑上划分一个块;
    如果输入文件大于设置值且大于两倍,那么以最大值切割一块,
    直到 设 置 值 < 剩 余 数 据 大 小 < 设 置 值 × 2 设置值<剩余数据大小<设置值 \times 2 设置值<剩余数据大小<设置值×2,将文件均分成2个虚拟存储块。

例如setMaxInputSplitSize值为4M,输入文件大小为9M,则先逻辑上分成一个4M,剩余的大小为5M,如果按照4M逻辑划分,就会出现1M的小的虚拟存储文件,所以将剩余的5M文件切分成2.5M和2.5M两个文件

MapReduce工作流程

Shuffle机制

分区

默认分区是根据key的hashCode对ReduceTasks个数取模得到的

public class HashPartitioner<K, V> extends Partitioner<K, V> {
  public int getPartition(K key, V value, int numReduceTasks) {
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
  }
}
  1. 如果 R e d u c e T a s k 数 量 > g e t P a r t i t i o n 的 结 果 数 ReduceTask数量>getPartition的结果数 ReduceTask数量>getPartition的结果数,就会产生多个空的输出文件part-r-000xx
  2. 如果 1 < R e d u c e T a s k 数 量 < g e t P a r t i t i o n 的 结 果 数 1<ReduceTask数量<getPartition的结果数 1<ReduceTask数量<getPartition的结果数,一些分区就会无处安放,会报异常
  3. 如果 R e d u c e T a s k 的 数 量 = 1 ReduceTask的数量=1 ReduceTask的数量=1,则不管MapTask端输出多少个分区文件,最终结果都交给这一个ReduceTask,最终也就只会产生一个结果文件part-r-00000
  4. 分区号从零开始,逐一累加

例子:假设自定义分区数为5
job.setNumReduceTasks(1);正常运行,只产生一个输出文件
job.setNumReduceTasks(2);报错
job.setNumReduceTasks(6);正常运行,会产生空文件

排序

  • MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为
    默认排序是按照字典顺序排序,且实现该排序的方法是快速排序

  • MapTask
    会将处理的结果暂时放到环形缓冲区,当环形缓冲区使用率达到阈值,再对缓冲区中的数据进行一次快速排序,并将这些有序数据溢写到磁盘;
    而当数据处理完毕后,它会对磁盘上所有文件进行归并排序

  • ReduceTask
    从每个MapTask上远程拷贝相应的数据文件,如果文件大小超过一定阈值,就溢写磁盘,否则存储在内存中。
    如果磁盘上文件数目达到阈值,就进行一次归并排序以生成一个更大文件;
    如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据溢写到磁盘上。
    当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行一次归并排序

MapTask工作机制

  • 1、Read阶段:MapTask通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value。
  • 2、Map阶段:该节点主要是将解析出的key/value交给用户编写map()函数处理,并产生一系列新的key/value。
  • 3、Collect收集阶段:在用户编写map()函数中,当数据处理完成后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分区(调用Partitioner),并写入一个环形内存缓冲区中。
  • 4、Spill溢写阶段:当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。
    溢写阶段详情:
    • 4.1:利用快速排序算法对缓存区内的数据进行排序,排序方式是,先按照分区编号Partition进行排序,然后按照key进行排序。这样,经过排序后,数据以分区为单位聚集在一起,且同一分区内所有数据按照key有序。
    • 4.2:按照分区编号由小到大依次将每个分区中的数据写入任务工作目录下的临时文件output/spillN.out(N表示当前溢写次数)中。如果用户设置了Combiner,则写入文件之前,对每个分区中的数据进行一次聚集操作。
    • 4.3:将分区数据的元信息写到内存索引数据结构SpillRecord中,其中每个分区的元信息包括在临时文件中的偏移量、压缩前数据大小和压缩后数据大小。如果当前内存索引大小超过1MB,则将内存索引写到文件output/spillN.out.index中。
  • 5、Combine阶段:当所有数据处理完成后,MapTask对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。
  • 6、当所有数据处理完后,MapTask会将所有临时文件合并成一个大文件,并保存到文件output/file.out中,同时生成相应的索引文件output/file.out.index。
  • 7、在进行文件合并过程中,MapTask以分区为单位进行合并。对于某个分区,它将采用多轮递归合并的方式。每轮合并io.sort.factor(默认10)个文件,并将产生的文件重新加入待合并列表中,对文件排序后,重复以上过程,直到最终得到一个大文件。
  • 8、让每个MapTask最终只生成一个数据文件,可避免同时打开大量文件和同时读取大量小文件产生的随机读取带来的开销。

ReduceTask工作机制

  1. Copy阶段:ReduceTask从各个MapTask上远程拷贝一片数据,并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
  2. Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
  3. Sort阶段:按照MapReduce语义,用户编写reduce()函数输入数据是按key进行聚集的一组数据。为了将key相同的数据聚在一起,Hadoop采用了基于排序的策略。由于各个MapTask已经实现对自己的处理结果进行了局部排序,因此,ReduceTask只需对所有数据进行一次归并排序即可。
  4. Reduce阶段:reduce()函数将计算结果写到HDFS上。

设置ReduceTask个数

  • Java
// 默认值是1,手动设置为4
job.setNumReduceTasks(4);
  • HIVE
-- 设置每个reduceTask处理的数据量
SET hive.exec.reducers.bytes.per.reducer;
-- ReduceTask最大数量
SET hive.exec.reducers.max;

-- 设置ReduceTask数量
SET mapred.reduce.tasks;
  1. ReduceTask=0,表示没有Reduce阶段,输出文件个数和Map个数一致
  2. ReduceTask默认值就是1,所以输出文件个数为一个
  3. 如果数据分布不均匀,就有可能在Reduce阶段产生数据倾斜
  4. ReduceTask数量并不是任意设置,还要考虑业务逻辑需求,例如要计算全局汇总结果,就只能有1个ReduceTask
  5. 具体多少个ReduceTask,需要根据集群性能而定
  6. 如果分区数不是1,ReduceTask为1,就不执行分区过程。因为执行分区的前提是先判断ReduceNum个数是否大于1,不大于1肯定不执行

JOIN

Reduce Join

  • Map端的主要工作:
    为来自不同表或文件的key/value对,打标签以区别不同来源的记录
    然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出

  • Reduce端的主要工作:
    在Reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在Map阶段已经打标志)分开,最后进行合并

Map Join

  • Map Join适用于一张小表JOIN一张大表的场景
  • 在HIVE中,MapJoin把小表全部加载到内存在map端进行join,避免reducer处理
SET hive.auto.convert.join=true;
SET hive.mapjoin.smalltable.filesize;

HIVE的MapJoin原理图

计数器

  • Hadoop为每个作业维护若干内置计数器,以描述多项指标

例如
某些计数器记录已处理的字节数和记录数,使用户可监控已处理的输入数据量和已产生的输出数据量

数据输出

OutputFormat是MapReduce输出的基类

  • TextOutputFormat
    默认的输出格式是TextOutputFormat
    它把每条记录写为文本行。
    它的键和值可以是任意类型,因为TextOutputFormat调用toString()方法把其转换为字符串

  • SequenceFileOutputFormat
    格式紧凑,容易被压缩

大数据Hadoop入门——HDFS、Yarn、MapReduce Hadoop框架详细个人总结——Hadoop入门篇大数据是什么?Hadoop基本概念介绍一、什么是Hadoop?二、Hadoop优势——四高三、Hadoop组成(重点)四、HDFS架构五、YARN架构六、MapReduce架构七、HDFS、YARN、MapReduce 三者关系Hadoop运行环境搭建虚拟机的准备一、安装虚拟机二、虚拟机配置及环境准备Hadoop运行模式一、本地运行模式二、伪分布式模式三、完全分布式模式**1.虚拟机准备****2.准备一个集群分发脚本****3.SSH 无密登录配置**** 阅读详情

相关推荐

大数据面试题:Spark和MapReduce之间的区别?各自优缺点?

Spark的DAGScheduler相当于一个改进版的MapReduce,如果计算不涉及与其他节点进行数据交换,Spark可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘IO的操作。有一个误区,Spark是基于内存的计算,所以快,这不是主要原因,要对数据做计算,必然得加载到内存,Hadoop也是如此,只不过Spark支持将需要反复用到的数据Cache到内存中,减少数据加载耗时,所以Spark跑机器学习算法比较在行(需要对数据进行反复迭代)。

qq_41544550的博客 3762

MapReduce Map的个数分析

1.概述 通常情况下,Map作业会通过input的目录产生一个或者多个map任务 主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M,可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改) 2.举例 假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块),从而产生7个map数 假设input目录下有3个文件a,b,c大小分别为10m,30m,150m

hmi1024@163.com 2843

大数据实训

大数据实训,hadoop分布式集群,mapreduce数据处理,spark数据处理,大数据可视化,企业级项目实战。

weixin_58414150的博客 3059

一个自动修正数据时间和补全缺失数据的MapReduce程序

原始数据如下图: 程序: Mapper类: 1 public class DemoMapper extends Mapper<LongWritable,Text,IntWritable,Text>{ 2 IntWritable k = new IntWritable(); 3 Text v = new Text(); 4 ...

376

Hadoop【理论篇】12:Hadoop关于InputSplit

Hadoop【理论篇】12:Hadoop关于InputSplit

weixin_40612128的博客 455

MapReduce边缘计算与大数据分析

MapReduce边缘计算与大数据分析 1. 背景介绍 随着物联网(IoT)和云计算技术的迅猛发展,数据量呈现爆炸性增长。大数据分析已成为企业获取竞争优势的关键。然而,数据的海量性和处理的实时性要求对传统的数据处理模型进行改进。MapReduce作为一种编程模型和处理大规模数据集的实

AI天才研究院 463

项目中Map端内存占用的分析

最近在项目中开展重构活动,对Map端内存尽量要省一些,当前的系统中Map端内存最高占用大概3G左右(设置成2G时会导致Java Heap OOM)。虽然个人觉得占用不算多,但是显然这样的结果想要试图去说服一些对内存占用非常挑剔的C++程序员们理由还是不够,于是便通过一定的方式对内存的占用进行了分析,刨根问底。 关于运行时内存占用可以参考文章:http://brandnewuse...

weixin_30699443的博客 467

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2628

报错问题:分隔符\t识别不出来问题,本地可以分割出,但是MapReduce却报错

对于系统的默认分割符,在MapReduce中的识别与本地的显示存在转码问题。 输入给sys.stdin的是hsql中select出来结果写入hdfs的数据,如果抽取部分数据到本地测试用个下面\t分割能很好分割select出来的数据,但是一旦提交hadoop的MapReduce服务器处理就报错。 for line in sys.stdin: json_dict1 = {} data=line.strip() data_list = data.split('\t') 原因分析与解决:

wangwangstone的博客 1432

Keil5芯片包下载后无法识别?手把手排查教程

遇到Keil5芯片包下载后不被识别的问题别慌,常见原因包括安装路径错误或包未正确注册。通过检查Pack Installer状态和手动更新设备支持列表,轻松排查故障,确保开发环境正常运行。

weixin_35459464的博客 881

高通camx架构学习(零)—— 深入理解Camera 硬件抽象层

从上面的定义可以看出,主要是通过hw_module_t 代表了模块,通过其open方法用来打开一个设备,而该设备是用hw_device_t来表示,其中除了用来关闭设备的close方法外,并无其它方法,由此可见谷歌定义的HAL接口,并不能满足绝大部分HAL模块的需要,所以谷歌想出了一个比较好的解决方式,那便是将这两个基本结构嵌入到更大的结构体内部,同时在更大的结构内部定义了各自模块特有的方法,用于实现模块的功能,这样,一来对上保持了HAL的统一规范,二来也扩展了模块的功能。

图像学习之旅 1670

清华大数据作业MapReduce处理几百个G的JSON数据

链接 :  https://github.com/datamaning/MapReduce   MapReduce 清华大学大数据作业MapReduce处理用户微博JSON数据 Hadoop Experiment 输入数据 输入数据文件已保存在了Hadoop的HDFS(Hadoop Distributed File System)下的目录/input-user中(关于Hadoo...

douglas8287的专栏 1827

PCL 读取和保存点云

PCL (Point Cloud Library) 是一个用于处理 3D 点云数据的开源库。在处理点云数据时,常见的任务包括点云的读写和可视化。PCL 提供了强大的 IO 模块来读取和写入各种格式的点云文件,并且提供了可视化模块来对点云进行渲染和显示。点云的读写与显示是很多 3D 数据处理任务的基础步骤,通过这些步骤,可以对点云进行预处理、分析和操作。

纵马踏花向自由 1740

大数据Hadoop、MapReduce、Hive项目实践

大数据Hadoop、MapReduce、Hive项目实践 一.大数据概述 1.1.大数据概念 而所谓的大数据,就是指大量(Volume),多样(Variety),快速(Velocity),价值密度低(Value)的数据,这四个特性也被称为大数据的4V特性,传统数据库面对此类数据遇到全面挑战,才使得大数据技术飞速发展。1.2.大数据的意义 1.2.1.企业之所以要使用大数据,归根结底还是因为需求,业务需求; 企业切换至大数据平台,一种可能是为了解决现有的RDBMS(关系型数据库管理系统)的瓶颈,无论是存储量瓶

zhhlk的专栏 1399

g2o&PCL 四阶多项式拟合

g2o&PCL 四阶多项式拟合

dayuhaitang1的博客 142

智能测试策略优化:平衡覆盖率、时间和资源

在软件开发过程中,测试是确保软件质量的关键环节。然而,测试工作往往面临着诸多挑战,其中如何在保证测试覆盖率的前提下,合理分配时间和资源是一个核心问题。本文章的目的在于探讨智能测试策略的优化方法,帮助软件测试团队在有限的时间和资源条件下,实现尽可能高的测试覆盖率。文章的范围涵盖了智能测试策略的核心概念、算法原理、数学模型、实际应用案例以及相关工具和资源等方面。本文将按照以下结构进行组织:首先介绍智能测试策略优化的背景和相关概念,包括核心术语和缩略词的定义;

AIGC应用创新大全的博客 621

大数据(Bigdata)必备技能

大纲 本系列主题是大数据开发面试指南,旨在为大家提供一个大数据学习的基本路线,完善数据开发的技术栈,以及我们面试一个大数据开发岗位的时候,哪些东西是重点考察的,这些公司更希望面试者具备哪些技能。 语言基础篇 Java基础篇 整个大数据开发技术栈我们从实时性的角度来看,主要包含了离线计算和实时计算两大部分,而整个大数据生态中的框架绝大部分都是用 Java 开发或者兼容了 Java 的 API 调用,那么作为基于 JVM 的第一语言 Java 就是我们绕不过去的坎,Java 语言的基础也是我们阅读源码和进行代

weixin_45417821的博客 1027

推荐系统(六)双塔模型

双塔模型是推荐场景中常用的粗排模型之一,本节主要介绍几种典型的双塔模型及其变型,如SENet 双塔模型,并联双塔,蒸馏学习,对偶增强双塔,阿里 COLD。

Jin_Kwok的博客 5146

大数据运算系统——MapReduce

本节简要的介绍大数据运算系统——MapReduce. MapReduce/Hadoop简介 搞大数据的都知道MapReduce和Hadoop,那么他们什么关系? MapReduce是谷歌与2004年提出的一个并行分布式计算平台,该平台使用C++实现,Hadoop是其Java版的开源实现。 目前,Hadoop已经广泛应用于各互联网公司,例如BAT,Facebook等。 MapReduce的编程模型 ...

jmhIcoding 1031

一文读懂 SAP BTP Application Router 的 Resource Files:从 xs-app.json 到本地开发的默认设置

本文详解SAP BTP中Application Router的资源文件配置与本地开发实践。核心包括:xs-app.json定义路由规则与安全策略,package.json声明依赖与启动脚本,resources/存放静态资源,default-services.json和local-destinations.json用于本地模拟云服务。文章通过真实案例展示如何配置静态资源直出、反向代理后端服务,并强调本地开发时的注意事项与常见问题解决路径。关键配置均提供示例代码,帮助开发者快速实现业务应用的部署与联调。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 180

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大数据之——Hadoop的HDFS、YARN、MapReduce

如何看他们的关系?首先HDFS将【NameNode】部署到一个节点先,分出多个【DataNode】分布到各个节点上,里面分别存储了将总的海量数据分散了的【子数据】,最后还要有一个节点有【Secondary NameNode】来备份【NameNode】的数据;

m0_73991249的博客 3590

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大数据学习之MapReduce2

/ 1 获取job// 2 设置jar// 3 关联mapper和reducer// 4 设置mapper输出的key和value类型// 5 设置最终数据输出的key和value类型// 指定自定义分区器// 同时指定相应数量的ReduceTask// 6 设置数据的输入路径和输出路径// 7 提交job0 : 1);bean对象做为key传输,需要实现接口重写compareTo方法,就可以实现排序。@Override。

qq_43399188的博客 332

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

大数据开发面试知识点总结

​本文详细介绍大数据hadoop生态圈各部分知识,包括不限于hdfs、yarn、mapreduce、hive、sqoop、kafka、flume、spark、flink等技术,总结内容适合大数据开发者学习,希望能够和大家多多交流。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 2万+

This BigData,Hadoop组成及生态

文章目录引言大数据概述定义数据单位数据意义与价值Hadoop概述Hadoop组成HDFS架构概述YARN架构概述MapReduce架构概述三者之间的关系Hadoop生态圈学习资源 引言 随着科技的发展,我们在网上留下的数据越来越多,大到网上购物、商品交易,小到浏览网页、微信聊天、手机自动记录日常行程等,可以说,在如今的生活里,只要你还在,你就会每时每刻产生数据,但是这些数据能称为大数据么?不,这些还不能称为大数据。那么大数据数据到底是什么呢? 大数据概述 定义 百度百科的定义:大数据是指无法在一定时间范围内

Simon郎的博客 431

大数据(七) --分布式计算框架(MapReduce)

MapReduce分布式计算思想的引入MapReduce概述MapReduce的定义MapReduce的优缺点 分布式计算思想的引入 MapReduce概述 MapReduce的定义 Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data...

七宝.博客 3174

鲲鹏Bigdata pro 之日志分析综合实验-补充细节

鲲鹏Bigdata pro 之日志分析综合实验的补充细节,提供了实验教程中没涉及到的操作细节,以及实验过程中遇到的问题及解决方案。

陈广智的专栏 3082
上一篇: YARN(含MR2)常用配置
下一篇: CDH6.3.2平台使用的端口概览
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值