hadoop—缓存是spark over map的唯一优势吗?

ar7v8xwq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(5)|浏览(373)

我已经开始学习apachespark,对这个框架印象深刻。尽管有一件事一直困扰着我,那就是在所有spark演示中,他们都谈到spark如何缓存rdd,因此需要相同数据的多个操作比map reduce等其他方法更快。
所以我的问题是,如果是这样的话,那么就在mr框架中添加一个缓存引擎,比如yarn/hadoop。
为什么要创建一个新的框架呢?
我确信我在这里遗漏了一些东西,您可以给我指出一些文档,这些文档可以让我更了解spark。

bgibtngc

bgibtngc1#

所以它不仅仅是缓存。阿龙曼写了很多,所以病得只加上他错过了什么。
原始性能w/o缓存速度提高了2-10倍,这是由于一个通常更高效且架构良好的框架。e、 使用akka线程的每个节点1个jvm比为每个任务分叉整个进程要好。
scala api。scala代表可伸缩语言,显然是并行处理的最佳选择。他们说scala减少了2-5倍的代码,但根据我在其他语言中重构代码的经验,尤其是java mapreduce代码,它的代码减少了10-100倍。说真的,我已经把100个loc从java重构成了scala/spark。它也更容易阅读和推理。spark甚至比pig&hive等hadoop抽象工具更简洁、更易于使用,甚至比烫伤更好。
spark有一个repl/shell。为了运行简单的作业,不需要编译部署周期。可以交互地处理数据,就像使用bash在系统中漫游一样。
最后想到的是易于与大表dbs集成,如cassandra和hbase。在cass中,为了做一些分析而读一张表

sc.cassandraTable[MyType](tableName).select(myCols).where(someCQL)

hbase也有类似的情况。现在尝试在任何其他mpp框架中这样做!!
更新思想指出这只是spark的优点,上面还有不少有用的东西。e、 graphx用于图形处理,mllib用于简单的机器学习,sparksql用于bi,blinkdb用于疯狂的快速apprx查询,以及前面提到的sparkstreaming

plicqrtu

plicqrtu2#

我认为主要有三个原因。
主要的两个原因源于这样一个事实:通常情况下,一个不运行单个mapreduce作业,而是按顺序运行一组作业。
mapreduce的一个主要限制是,它在运行每个作业之后将完整的数据集持久化到hdfs。这是非常昂贵的,因为它会导致磁盘i/o中数据集大小的三倍(对于复制),以及类似数量的网络i/o。spark从更全面的Angular 看待业务流程。当一个操作的输出需要输入到另一个操作时,spark直接传递数据而不写入持久存储器。这是对mapreduce的一项创新,它来自微软的dryad paper,并不是spark的原创。
spark的主要创新是引入了内存缓存抽象。这使得spark非常适合于多个操作访问相同输入数据的工作负载。用户可以指示spark将输入数据集缓存在内存中,这样就不需要每次操作都从磁盘读取它们。
如果spark工作可以归结为一个mapreduce工作呢?在许多情况下,它们在spark上的运行速度也比在mapreduce上快。spark的主要优势在于它可以更快地启动任务。mapreduce为每个任务启动一个新的jvm,加载jar、jiting、解析配置xml等可能需要几秒钟的时间。spark使每个节点上都有一个executor jvm运行,因此启动一个任务只需向它生成一个rpc,并向线程池传递一个runnable,这个过程以毫秒为单位。
最后,一个可能值得一提的常见误解是,spark以某种方式完全在内存中运行,而mapreduce则没有。事实并非如此。spark的shuffle实现与mapreduce的工作原理非常相似:每个记录在map端序列化并写入磁盘,然后在reduce端获取并反序列化。

6tqwzwtp

6tqwzwtp3#

阿龙曼和萨姆贝斯特报道了很多。我还有几点。
spark的每项作业和每项任务的开销要低得多。它使它能够应用于hadoop mr不适用的情况。这是一种需要在1-30秒内回复的情况。
较低的每项任务开销使spark对于包含大量短任务的大任务也更有效。作为一个非常粗略的估计-当任务需要1秒时,spark的效率将是hadoop的2倍。
spark的抽象性比mr低,它是计算图。因此,有可能实现比mr更高效的处理—特别是在不需要排序的情况下。换句话说,在mr中,我们总是为分类付费,但在spark中,我们不必付费。

n53p2ov0

n53p2ov04#

缓存+内存计算对spark来说绝对是件大事,不过还有其他事情。
rdd(弹性分布式数据集):rdd是spark的主要抽象。它允许通过重新计算dag来恢复失败的节点,同时还通过检查点支持与hadoop更相似的恢复方式,以减少rdd的依赖性。将spark作业存储在dag中允许延迟rdd的计算,还允许spark的优化引擎以在性能上产生巨大差异的方式调度流。
sparkapi:hadoopmapreduce有一个非常严格的api,不允许多功能性。由于spark抽象掉了许多低层次的细节,因此它可以提高生产率。此外,广播变量和累加器比分布式缓存和计数器更通用。
spark-streaming:spark-streaming是一种基于离散流的论文,它提出了一种新的模型,用于使用微批量对流进行窗口计算。hadoop不支持这样的东西。
作为内存计算的一个产品,spark可以充当自己的流调度器。而对于标准mr,您需要一个外部作业调度器(如azkaban或oozie)来调度复杂的流
hadoop项目由mapreduce、yarn、commons和hdfs组成;然而,深度学习lib库正在尝试创建一个统一的大数据平台,其中有一个用于机器学习、图形处理、流媒体、多个SQL类型库的库(同样的回购),我相信一个深度学习库处于初始阶段。虽然这些都不是严格意义上的spark特性,但它是spark计算模型的产物。超光速子和blinkdb是围绕spark构建的另外两种技术。

mbyulnm0

mbyulnm05#

apachespark处理内存中的数据,而hadoopmapreduce在执行map或reduce操作后会持久化回磁盘。但是spark需要很多记忆
spark将进程加载到内存中,并将其保留在内存中,直到有进一步的通知,以便缓存。
弹性分布式数据集(rdd),它允许您透明地将数据存储在内存中,并在需要时将其持久化到光盘上。
因为spark使用内存,所以没有同步障碍会让你慢下来。这是spark表现出色的主要原因。
spark不仅可以像mapreduce那样处理一批存储的数据,还可以使用spark流实时处理数据。
dataframesapi的灵感来自于r和python(pandas)中的Dataframe,但它是作为现有rddapi的扩展而设计的。
dataframe是一个分布式的数据集合,它被组织成命名的列,但是在引擎盖下有更丰富的优化,支持spark的速度。
使用rddsspark可以简化join和groupby等复杂操作,在后端,您可以处理零碎的数据。这种碎片化使得spark能够并行执行。
spark允许使用有向无环图(dag)模式开发复杂的多步骤数据管道。它支持跨DAG的内存数据共享,以便不同的作业可以使用相同的数据。DAG是Spark速度的主要组成部分。
spark代码库要小得多。

希望这有帮助。

相关问题