MapReduce

Hadoop MapReduce运行过程

大憨熊 提交于 2020-02-04 21:21:45
整个MapReduce的过程大致分为 Map --> Combine --> Reduce(先Shuffle) 三个部分。 Input and Output types of a MapReduce job: (input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output) mapreduce实际的处理过程可以理解为 Input->Map->Sort->Combine->Partition->Reduce->Output 。 例如输入为两行的文本: Hello World Bye World Hello Hadoop Goodbye Hadoop 1)Input阶段,通过InputFormat接口从HDFS中读取数据,每一行解析成一个<k,v>,然后输入到map中。 <0, Hello World Bye World> , <1, Hello Hadoop Goodbye Hadoop> 2)Map阶段,对输入的(key,value)对进行处理,生成新的<Key, Value>。 对于示例中的第一行输入,map过程输出是: < Hello, 1> < World, 1> < Bye, 1> < World, 1> 对第二行输入,map过程输出是: < Hello, 1>

Hadoop集群大数据解决方案之MapReduce 程序实战进阶(自定义partition&sort&group)(六)

半世苍凉 提交于 2020-02-04 02:48:17
准 备    在上一篇博客举了个简单的word count,重在说明mapreduce的流程,但是针对mapreduce的编程,程序员能控制的,远远不止map和reduce,还有诸如partition,sort,group 以及combiner都是可以控制的,这里就举个例子来说明这些,这个例子不太适合combiner,这个下次有机会再说明,目的在说明:    1.自定义排序;    2.自定义分区;    3.自定义分组。 需 求    1 ) 样例数据(日期时间 温度[日期时间和温度之间用的Tab键隔开]) : · 1949-05-01 14:21:01 38℃ 1949-06-03 13:45:01 40℃ 1950-01-23 14:21:01 38℃ 1950-10-23 08:21:01 12℃ 1951-12-18 14:21:01 40℃ 1950-10-24 13:21:01 42℃ 1950-10-26 14:21:01 45℃ 1951-08-01 14:21:01 40℃ 1951-08-02 14:21:01 48℃ 1953-07-01 14:21:01 45℃ 1953-08-06 14:21:01 48℃ 1954-06-02 14:21:01 36℃ 1952-08-02 14:21:01 45℃ 1955-06-02 14:21:01 42℃

初学大数据不知从何入手?总结十章大数据学习指南(建议收藏)

醉酒当歌 提交于 2020-02-04 00:24:43
近三年,大数据这个词出现的频次非常高,不仅纳入各大互联网巨头公司的战略规划中,同时也在国家的政府报告中多次提及,大数据已无疑成为当今时代的新宠。大数据给大多数人的感觉是,专业性强,门槛高,完全属于“高大上”的技术。好奇的人或许会通过网络了解一些概念,而有一些人则看到了大数据带来的机遇,投入大数据学习的洪流当中,投身大数据行业为自己带来利益。经历“坎坷”的学习大数据历程后,在求学之路上有哪些具体 容易掉入的“坑”? 让我们一一盘点下。 ​ 1 在这里相信有许多想要学习大数据的同学,大家可以+下大数据学习裙:740041381,即可免费领取套系统的大数据学习教程 我们一起经历的那些坑 大多的初学者在入门初期,基本是在网上各种社区“大海捞针”的到处 知乎、百度: “大数据学习路径是怎么样的?” “学生党,会java,只有一台电脑!!如何学习大数据开发?” “ 语言是学R还是Python?” “我没时间有没钱,自学能学的会吗?” “现在大数据开发挺火的,谁知道大数据开发学习机构哪家靠谱?” “零基础学习大数据,想成为大数据开发工程师,请问该如何入门,有没有推荐网络教程,书籍或者大牛博客?” 自学过程中走过很多弯路,比如环境搭建,总会遇到各种奇葩问题,找不到答案;比如网上扑来各种资料不知道怎么分辨质量,也不知道如何科学利用,很痛苦又很困惑,毫无一点成就感,走了许多冤枉路,踩坑无数…… 第一

MapReduce执行过程

↘锁芯ラ 提交于 2020-02-04 00:07:10
一、分析MapReduce执行过程 MapReduce运行的时候,会通过Mapper运行的任务读取HDFS中的数据文件,然后调用自己的方法,处理数据,最后输出。Reducer任务会接收Mapper任务输出的数据,作为自己的输入数据,调用自己的方法,最后输出到HDFS的文件中。整个流程如图: 二、Mapper任务的执行过程详解 每个Mapper任务是一个java进程,它会读取HDFS中的文件,解析成很多的键值对,经过我们覆盖的map方法处理后,转换为很多的键值对再输出。整个Mapper任务的处理过程又可以分为以下几个阶段,如图所示。 在上图中,把Mapper任务的运行过程分为六个阶段。 第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的。默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相同的。如果数据块(Block)的大小是默认值64MB,输入文件有两个,一个是32MB,一个是72MB。那么小的文件是一个输入片,大文件会分为两个数据块,那么是两个输入片。一共产生三个输入片。每一个输入片由一个Mapper进程处理。这里的三个输入片,会有三个Mapper进程处理。 第二阶段是对输入片中的记录按照一定的规则解析成键值对。有个默认规则是把每一行文本内容解析成键值对。“键”是每一行的起始位置(单位是字节),“值

MongoDB Calculate Values from Two Arrays, Sort and Limit

一笑奈何 提交于 2020-02-03 12:14:13
问题 I have a MongoDB database storing float arrays. Assume a collection of documents in the following format: { "id" : 0, "vals" : [ 0.8, 0.2, 0.5 ] } Having a query array, e.g., with values [ 0.1, 0.3, 0.4 ] , I would like to compute for all elements in the collection a distance (e.g., sum of differences; for the given document and query it would be computed by abs(0.8 - 0.1) + abs(0.2 - 0.3) + abs(0.5 - 0.4) = 0.9 ). I tried to use the aggregation function of MongoDB to achieve this, but I can

Fastest way to get the average of a specific field in MongoDB

▼魔方 西西 提交于 2020-02-03 05:22:51
问题 Let's say I have a dataset like the following: { "_id" : ObjectId("4dd51c0a3f42cc01ab0e6506"), "views" : 1000, "status" : 1 } { "_id" : ObjectId("4dd51c0e3f42cc01ab0e6507"), "views" : 2000, "status" : 1 } { "_id" : ObjectId("4dd51c113f42cc01ab0e6508"), "views" : 3000, "status" : 1 } { "_id" : ObjectId("4dd51c113f42cc01ab0e6508"), "views" : 4000, "status" : 0 } What is the fastest way (performance-wise) to get the average number of views for all documents with a status of 1? Is Map/Reduce

MapReduce——shuffle

喜欢而已 提交于 2020-02-03 04:20:29
Shuffle 过程是 MR 的一个核心。 简答了解 Shuffle 的作用: 需求场景:   在集群环境下,Map task和Reduce task运行在不同的节点上,这个情况下Reduce执行时需要跨节点从其他节点上拉取Map task的输出结果。如果集群上又很多任务在运行,会在运行时消耗很严重的网络资源(这属于正常现象),这种现象无法改变,只能最大化的减少资源的消耗。在数据拉取过程中怎么改变?   1.完整的从Map task 端拉取数据到Reduce端   2.在跨节点拉取数据时,尽可能减少对带宽的不必要消耗   3.减少磁盘IO对Task的影响 shuffle在Map阶段的操作:   整个流程主要分四部:每个map task都有一个内存的缓冲区,存储着map的输出结果。当缓存区快满的时候需要把缓存区的数据以一个临时文件的方式存储放在 磁盘 。当整个map task结束之后再对磁盘中map task产生的文件进行合并,生成最终的输出文件,等待Reduce的拉取。 map阶段只能做 加1 的相加操作 把Map输出结果写入到文件,把key value 进行分组相加   内存缓存区默认 100MB 。如果 map task 的输出结果大于 100M 的时候可能会撑爆内存。所以有一定情况下把临时数据 ( 内存缓存区的数据 ) 写入到磁盘。重新利用这个这块缓存区。内存写入磁盘的过程叫

浅谈MapReduce工作机制

被刻印的时光 ゝ 提交于 2020-02-03 03:52:15
1.MapTask工作机制   整个map阶段流程大体如上图所示。简单概述:input File通过getSplits被逻辑切分为多个split文件,通通过RecordReader(默认使用lineRecordReader)按行读取内容给map(用户自己实现的map方法),进行处理,数据被map处理结束之后交给OutputCollector收集器,对其结果key进行分区(默认使用hash分区),然后写入buffer,每个map task 都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。 详细步骤: 1.首先, 读取数据组件 InputFormat (默认TextInputFormat)会通过 getSplits 方法对输入目录中文件进行 逻辑切片规划 得到splits,有多少个split就对应启动多少个MapTask。split与block的对应关系可能是一对多,默认是一对一。 2.将输入文件切分为splits之后,由 RecordReader 对象(默认LineRecordReader)进行读取,以"\n"作为分隔符,读取一行数据返回<key,value>

第1节 MapReduce入门:11、mapreduce程序的入门

耗尽温柔 提交于 2020-02-03 02:40:09
1.1、理解MapReduce思想 MapReduce思想在生活中处处可见。或多或少都曾接触过这种思想。MapReduce的思想核心是“ 分而治之 ”,适用于大量复杂的任务处理场景(大规模数据处理场景)。即使是发布过论文实现分布式计算的谷歌也只是实现了这种思想,而不是自己原创。 Map负责“分”,即把复杂的任务分解为若干个“简单的任务”来并行处理。可以进行拆分的前提是这些小任务可以并行计算,彼此间几乎没有依赖关系。 Reduce负责“合”,即对map阶段的结果进行全局汇总。 这两个阶段合起来正是MapReduce思想的体现。 1.2、Hadoop MapReduce设计构思 1.如何对付大数据处理:分而治之 2. 构建抽象模型:Map和Reduce map: (k1; v1) → [(k2; v2)] reduce: (k2; [v2]) → [(k3; v3)] 3.统一构架,隐藏系统层细节 1.3、MapReduce框架结构 1.4、MapReduce编程规范及示例编写 mapReduce编程模型的总结: MapReduce的开发一共有八个步骤其中map阶段分为2个步骤,shuffle阶段4个步骤,reduce阶段分为2个步骤 Map阶段2个步骤 第一步:设置inputFormat类,将我们的数据切分成key,value对 (k1,v1) ,输入到第二步 第二步

第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

本秂侑毒 提交于 2020-02-03 02:37:08
第2节 mapreduce深入学习:7、MapReduce的规约过程combiner 每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 map 和 reduce 节点之间的数据传输量,以提高网络IO 性能,是 MapReduce 的一种优化手段之一。  combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件  combiner 组件的父类就是 Reducer  combiner 和 reducer 的区别在于运行的位置: Combiner 是在每一个 maptask 所在的节点运行 Reducer 是接收全局所有 Mapper 的输出结果;  combiner 的意义就是对每一个 maptask 的输出进行局部汇总,以减小网络传输量  具体实现步骤: 1、自定义一个 combiner 继承 Reducer,重写 reduce 方法 2、在 job 中设置: job.setCombinerClass(CustomCombiner.class) combiner 能够应用的前提是不能影响最终的业务逻辑,而且,combiner 的输出 kv 应该跟 reducer 的输入 kv 类型要对应起来。 代码: SortMain:添加如下代码 //设置第五步:规约job