MapReduce

Flink: DataSet.count() is bottleneck - How to count parallel?

送分小仙女□ 提交于 2020-05-27 12:07:12
问题 I am learning Map-Reduce using Flink and have a question about how to efficiently count elements in a DataSet. What I have so far is this: DataSet<MyClass> ds = ...; long num = ds.count(); When executing this, in my flink log it says 12/03/2016 19:47:27 DataSink (count())(1/1) switched to RUNNING So there is only one CPU used (i have four and other commands like reduce use all of them). I think count() internally collects the DataSet from all four CPUs and counts them sequentially instead of

Flink: DataSet.count() is bottleneck - How to count parallel?

主宰稳场 提交于 2020-05-27 12:06:55
问题 I am learning Map-Reduce using Flink and have a question about how to efficiently count elements in a DataSet. What I have so far is this: DataSet<MyClass> ds = ...; long num = ds.count(); When executing this, in my flink log it says 12/03/2016 19:47:27 DataSink (count())(1/1) switched to RUNNING So there is only one CPU used (i have four and other commands like reduce use all of them). I think count() internally collects the DataSet from all four CPUs and counts them sequentially instead of

MongoDB allowDiskUse not working..

纵饮孤独 提交于 2020-05-24 21:28:06
问题 Experts. I'm new to MongoDB, but know enough to get my self in trouble.. case in point: db.test.aggregate( [ {$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}}, {$group: {_id: "$_id.email", cnt: {$sum: 1}}}, {$match: {cnt: 2}} ], {allowDiskUse : true} ) and no matter what variations I try, I keep getting the same error ("Pass allowDiskUse:true to opt in"): Error("Printing Stack Trace")@:0 ()@src/mongo/shell/utils.js:37 ([object Array],[object Object])@src/mongo/shell

How to create a date counter ? i tried it using reduce function

我只是一个虾纸丫 提交于 2020-05-17 07:45:09
问题 using id, billStatus and tDate need to make a daycounter which counts date of days leads are received. Example => for id:"1" 2 Billable against 8th of may AND 3 Billable for 9th of may than day counter will become => 1+1 = 2 Note: if I get 1 lead or 7 leads for a single day daycount will be 1 and increment the next day when there will be any new lead on a new day. data: [ { id: "1", billStatus: "Billable", tDate: "05/08/2020", dayCounter: 0 }, { id: "1", billStatus: "Billable", tDate: "05/08

spark为什么比hadoop的mr要快?

|▌冷眼眸甩不掉的悲伤 提交于 2020-05-08 19:58:36
1.前言 Spark是基于内存的计算,而Hadoop是基于磁盘的计算;Spark是一种内存计算技术。 但是事实上,不光Spark是内存计算,Hadoop其实也是内存计算。 Spark和Hadoop的根本差异是多个任务之间的数据通信问题:Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘。 Spark SQL比Hadoop Hive快,是有一定条件的,而且不是Spark SQL的引擎一定比Hive的引擎快,相反,Hive的HQL引擎还比Spark SQL的引擎更快。 2.内存计算技术 内存计算技术是指将数据持久化至内存RAM中进行加工处理的技术。Spark并不支持将数据持久化至内存中,我们通常所说的是spark的数据缓存技术,如将RDD数据缓存至内存,但并没有实现持久化。缓存数据是可以擦除的,擦除后同样是需要我们重新计算的。Spark的数据处理是在内存中进行的,这话并没有错,其实当前的所有操作系统的数据处理都是在内存中进行的。所以,这内存计算并不是Spark的特性。 Spark是允许我们利用缓存技术和LRU算法缓存数据的。Spark的所有运算并不是全部都在内存中,当shuffle发生的时候,数据同样是需要写入磁盘的。所以,Spark并不是基于内存的技术,而是使用了缓存机制的技术。 3. 那Spark主要快在哪里呢? Spark最引以为豪的就是官网介绍的经典案例

MapReduce Shuffle 和 Spark Shuffle 原理概述

蓝咒 提交于 2020-05-08 19:57:34
##Shuffle简介 Shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,Shuffle更像是洗牌的逆过程,指的是将map端的无规则输出按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理。其在MapReduce中所处的工作阶段是map输出后到reduce接收前,具体可以分为map端和reduce端前后两个部分。 在shuffle之前,也就是在map阶段,MapReduce会对要处理的数据进行分片(split)操作,为每一个分片分配一个MapTask任务。接下来map会对每一个分片中的每一行数据进行处理得到键值对(key,value)此时得到的键值对又叫做“中间结果”。此后便进入reduce阶段,由此可以看出Shuffle阶段的作用是处理“中间结果”。 由于Shuffle涉及到了磁盘的读写和网络的传输,因此Shuffle性能的高低直接影响到了整个程序的运行效率。 ##MapReduce Shuffle Hadoop的核心思想是MapReduce,但shuffle又是MapReduce的核心。shuffle的主要工作是从Map结束到Reduce开始之间的过程。shuffle阶段又可以分为Map端的shuffle和Reduce端的shuffle。 ###Map端的shuffle 下图是MapReduce

大数据软件比较MapReduce和Spark

拥有回忆 提交于 2020-05-08 19:56:40
大数据软件比较 分布式的简单理解 在分布式系统出现之前,只有通过不断增加单个处理机的频率和性能来缩短数据的处理时间,分布式则将一个复杂的问题切割成很多的子任务,分布到多台机器上并行处理,在保证系统稳定性的同时,最大限度提高系统的运行速度。 MapReduce 模型整体分析 关于MapReduce的内容参照即将发布的博文MapReduce 将大规模数据处理作业拆分成多个可独立运行的Map任务,分布到多个处理机上进行运行,通过shuffle机制处理并产生一定的中间结果,在通过Reduce任务混洗合并产生最终的输出文件。 优势与不足分析 优势分析: MapReduce编程模型使得任务执行和任务通信之间变得简单且规范,实现任务并行化,扩展性良好; 每次Map操作之后,产生的中间结果会保存在磁盘上,不会永久的留在内存中,这样减少内存的消耗,避免了内存溢出带来的数据丢失,同时可以更好的容错; 但是这种设计会产生一定的缺点: 一些不适合使用Map和Reduce操作来完成的问题,如处理图或者网络问题时,这些数据结构包含着各种隐性的关系:图的边、子树、节点之间的父子关系、权重等,而这些关系很难被分解为键值对在一次计算中完全表示,同时各任务依赖关系比较复杂时,会产生为了适应该处理模型对任务分解造成效率降低的情况。 另外MapReduce的明显不足: 为了保证较好的扩展性

spark和 mapreduce的比较

北慕城南 提交于 2020-05-08 19:55:57
网上查阅一些资料,收集整理如下: 1、 通用性 spark更加通用,spark提供了transformation和action这两大类的多个功能api,另外还有流式处理sparkstreaming模块、图计算GraphX等等;mapreduce只提供了map和reduce两种操作,流计算以及其他模块的支持比较缺乏。 2、 内存利用和磁盘开销 MapReduce的设计:中间结果需要写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据,,可以提高可靠性,减少内存占用,但是牺牲了性能。 Spark默认把结果写到内存, Spark的DAGScheduler相当于一个改进版的MapReduce,如果计算不涉及与其他节点进行数据交换,Spark可以在内存中一次性完成这些操作,也就是中间结果无须落盘,减少了磁盘IO的操作。(但是,如果计算过程中涉及数据交换,Spark也是会把shuffle的数据写磁盘的!!!),还有一方面就是对shuffle操作的优化,spark提供Cache机制来支持需要反复迭代计算或者多次数据共享,减少中间文件的生成,减少数据读取的IO开销。另外DAG相比MapReduce在大多数情况下可以减少shuffle次数。 3、 任务调度 mapreduce任务调度和启动开销大; spark线程池模型减少task启动开销 4、 排序 Spark 避免不必要的排序操作

mapReduce和spark的shuffle

假装没事ソ 提交于 2020-05-08 16:58:13
MapReduce的shuffle 1.input map shuffle reduce output 2.shuffle的实现的功能:分区 分组 排序(key字典序) 3.map端的shuffle context.write() 写入到环形缓冲区(内存区域),假设缓冲区设置的是100M,当达到缓冲区的80%的时候,就会溢写出一个小文件,溢出到磁盘之前做了二件事,分区 排序 两个reduce merge 将小文件进行合并 合并之后 分区内有序 merge之后 maptask结束 ,会通知appmaster我已经结束任务,am通知reduce拉取数据。 reduce shullfe: reduce启动线程通过网络到每台机器上拉取属于自己的数据 reduce1会拉取属于自己的数据: 将整体分区的数据进行排序 MapReduce shuffle 优化 1.合理设置partition 使用多个reduce处理输出结果 2.减少reducer从map拉取的数据量 (1)将map数据进行压缩(snappy 压缩质量不高 但是读取速度快,) 也可以在reduce输出的时候增加gzip 压缩实现 保证压缩率快速输出 (2)合理使用combiner(减少reducer输入数据量) spark 的shuffle ShuffleManager管理 HashShuffleManager

extract English words from string in python

做~自己de王妃 提交于 2020-05-08 14:41:02
问题 I have a document that each line is a string. It might contain digits, non-English letters and words, symbols(such as ! and *). I want to extract the English words from each line(English words are separated by space). My code is the following, which is the map function of my map-reduce job. However, based on the final result, this mapper function only produces letters(such as a,b,c) frequency count. Can anyone help me find the bug? Thanks import sys import re for line in sys.stdin: line = re