MapReduce

sparkCore源码解析之shuffle

大城市里の小女人 提交于 2019-12-29 17:38:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Shuffle Map的过程,即Shuffle Stage的ShuffleTask按照一定的规则将数据写到相应的文件中,并把写的文件"位置信息" 以MapOutput返回给DAGScheduler ,MapOutput将它更新到特定位置就完成了整个Shuffle Map过程. 在Spark中,Shuffle reduce过程抽象化为ShuffledRDD,即这个RDD的compute方法计算每一个分片即每一个reduce的数据是通过拉取ShuffleMap输出的文件并返回Iterator来实现的 1. 对比MapReduce 1.1. 宏观比较 两者差别不大,度分为map和reduce两个阶段 。 从 high-level 的角度来看,两者并没有大的差别。 都是将 mapper(Spark 里是 ShuffleMapTask)的输出进行 partition,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一个 stage 里的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以内存作缓冲区,边 shuffle 边 aggregate 数据,等到数据 aggregate 好以后进行 reduce() (Spark

Hadoop中MapReduce多种join实现实例分析

一笑奈何 提交于 2019-12-29 17:33:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、概述 对于RDBMS中的join操作大伙一定非常熟悉,写sql的时候要十分注意细节,稍有差池就会耗时巨久造成很大的性能瓶颈,而在Hadoop中使用MapReduce框架进行join的操作时同样耗时,但是由于hadoop的分布式设计理念的特殊性,因此对于这种join操作同样也具备了一定的特殊性。本文主要对MapReduce框架对表之间的join操作的几种实现方式进行详细分析,并且根据我在实际开发过程中遇到的实际例子来进行进一步的说明。 二、实现原理 1、在Reudce端进行连接。 在Reudce端进行连接是MapReduce框架进行表之间join操作最为常见的模式,其具体的实现原理如下: Map端的主要工作:为来自不同表(文件)的key/value对打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 reduce端的主要工作:在reduce端以连接字段作为key的分组已经完成,我们只需要在每一个分组当中将那些来源于不同文件的记录(在map阶段已经打标志)分开,最后进行笛卡尔只就ok了。原理非常简单,下面来看一个实例: (1)自定义一个value返回类型: package com.mr.reduceSizeJoin; import java.io

map join 和 reduce join

倖福魔咒の 提交于 2019-12-29 17:27:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在大数据处理场景中,多表Join是非常常见的一类运算。为了便于求解,通常会将多表join问题转为多个两表连接问题。两表Join的实现算法非常多,一般我们会根据两表的数据特点选取不同的join算法,其中,最常用的两个算法是map-side join和reduce-side join。本文将介绍如何在apache spark中实现这两种算法。 Map-side Join Map-side Join使用场景是一个大表和一个小表的连接操作,其中,“小表”是指文件足够小,可以加载到内存中。该算法可以将join算子执行在Map端,无需经历shuffle和reduce等阶段,因此效率非常高。 在Hadoop MapReduce中, map-side join是借助DistributedCache实现的。DistributedCache可以帮我们将小文件分发到各个节点的Task工作目录下,这样,我们只需在程序中将文件加载到内存中(比如保存到Map数据结构中),然后借助Mapper的迭代机制,遍历另一个大表中的每一条记录,并查找是否在小表中,如果在则输出,否则跳过。 Reduce-side Join 当两个文件/目录中的数据非常大,难以将某一个存放到内存中时,Reduce-side Join是一种解决思路

Reading images from HDFS using mapreduce

不打扰是莪最后的温柔 提交于 2019-12-29 09:41:30
问题 Please help me in this code. I am trying to reiad images from HDFS. I am using WholeFileInputFormat. with WholeFileRecordreader. No compile time errors.But the code is giving runtime errors. The output is saying: cannot create the instance of the given class WholeFileInputFormat. I have written this code according to the comments on How to read multiple image files as input from hdfs in map-reduce? Please help me in this code.It contains 3 classes.How to debug it? Or any other way? import

Query in a MongoDB Map Reduce Function

本秂侑毒 提交于 2019-12-29 09:22:08
问题 I have streamed and saved about 250k tweets into MongoDB and here, I am retrieving it, as you can see, based on a word, or keyword, present in the tweet. Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("TwitterData"); DBCollection collection = db.getCollection("publicTweets"); BasicDBObject fields = new BasicDBObject().append("tweet", 1).append("_id", 0); BasicDBObject query = new BasicDBObject("tweet", new BasicDBObject("$regex", "autobiography")); DBCursor cur=collection

what difference between execute a map-reduce job using hadoop and java command

百般思念 提交于 2019-12-29 07:34:09
问题 Find many option for run a map-reduce program. Can any one explain difference between theses below commands. And what impact on Map-reduce job if any. java -jar MyMapReduce.jar [args] hadoop jar MyMapReduce.jar [args] yarn jar MyMapReduce.jar [args] In these command which one best or other in any? Can make configuration like display all information about job using Yarn and Job History (like as display Hadoop and yarn command) on Web service normal using port for web service 8088(YARN) on

Hadoop : Provide directory as input to MapReduce job

扶醉桌前 提交于 2019-12-29 05:27:07
问题 I'm using Cloudera Hadoop. I'm able to run simple mapreduce program where I provide a file as input to MapReduce program. This file contains all the other files to be processed by mapper function. But, I'm stuck at one point. /folder1 - file1.txt - file2.txt - file3.txt How can I specify the input path to MapReduce program as "/folder1" , so that it can start processing each file inside that directory ? Any ideas ? EDIT : 1) Intiailly, I provided the inputFile.txt as input to mapreduce

Hadoop学习之路(6)MapReduce自定义分区实现

…衆ロ難τιáo~ 提交于 2019-12-29 05:11:31
MapReduce自带的分区器是HashPartitioner 原理 :先对map输出的key求hash值,再模上reduce task个数,根据结果,决定此输出kv对,被匹配的reduce任务取走。 自定义分分区需要继承 Partitioner ,复写 getpariton() 方法 自定义分区类: 注意 :map的输出是<K,V>键值对 其中 int partitionIndex = dict.get(text.toString()) , partitionIndex 是获取K的值 附:被计算的的文本 Dear Dear Bear Bear River Car Dear Dear Bear Rive Dear Dear Bear Bear River Car Dear Dear Bear Rive 需要在main函数中设置,指定自定义分区类 自定义分区类: import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Partitioner; import java.util.HashMap; public class CustomPartitioner extends Partitioner<Text,

spark

让人想犯罪 __ 提交于 2019-12-28 20:28:03
Apache Spark 什么是Spark? Spark是 Lightning-fast unified analytics engine - 快如闪电的统一的分析引擎(不参与数据持久化)。 快 (1)Spark基于内存的计算引擎,相比于MapReduce磁盘计算,速度自然 快 - 大众认知 (2)Spark使用先进的DAG(矢量计算)计算模型,将一个复杂的任务拆分成若干个stage(阶段), 这样复杂的任务Spark只需要一个job即可完成。(如果使用MapReduce计算模型可能需要串连若干个Job) (3) Spark实现DAG计算将任务划分为若干个阶段,同时也提供了对stage阶段计算数据的缓存能力,这样就极大提升计算效率和容错。 统一 :Spark统一大数据常见计算例如:批处理(替代MapReduce)、流处理(替代Storm)、统一SQL(替代了Hive)、Machine Learning(替代Mahout 基于MapReduce计算方案)、支持GraphX存储-图形关系存储(存储数据结构)(替代了早期Neo4j的功能) Spark VS Hadoop Spark的诞生仅仅是为了替换早期的Hadoop的MapReduce计算引擎。Spark并没有存储解决方案,在Spark的架构中,底层存储方案依然延续Hadooop的HDFS/Hbase

MapReduce总结

此生再无相见时 提交于 2019-12-28 18:55:04
1. MapReduce概述: MapReduce是一个分布 式运算程序的编程框架,是用户开发“ 基于Hadoop的 数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个 完整的分布式运算程序,并发运行在一个Hadoop集群 上。 1.2 MapReduce优缺点 优点 MapReduce易于编程 它简单的实现- -些接口,就可以完成一一个分布式程序,这个分布式程序可 以份布到大量廉价的PC机器上运行。也就是说你写一个分布式程序, 跟写 -一个简单的串行程序是一模一样的。就是因为这个特点使得MapReduce编 程变得非常流行。 2.良好的扩展性 当你的计算资源不能得到满足的时候,你可以通过简单的增加机器来扩展 它的计算能力。 3.高容错性 MapReduce设计的初衷就是使程序能够部署在廉价的PC机器上,这就要求 它具有很高的容错性。比如其中一台机器挂了,它可以把上面的计算任务 转移到另外一个节点上运行,不至于这个任务运行失败,而且这个过程不 需要人工参与,而完全是由Hadoop内部完成的。 4.适合PB级以上海量数据的离线处理 可以实现上千台服务器集群并发工作,提供数据处理能力。 缺点 1.不擅长实时计算 MapReduce无法像MySQL- -样,在毫秒或者秒级内返回结果。 2.不擅长流式计算 流式计算的输入数据是动态的