繁体   English   中英

Apache Spark和Map reduce之间有什么关系

[英]What's the relationship between Apache spark and Map reduce

我对Spark框架有一些疑问。

首先,如果我想编写一些在Spark集群上运行的应用程序,是否不可避免要遵循map-reduce过程? 由于遵循map-reduce过程,必须更改许多代码以并行化表单,我正在寻找一些简单的方法来将当前项目移动到集群中,而无需更改代码。

其次是火花壳。 我尝试使用以下代码在集群上启动spark-shell: MASTER=spark://IP:PORT ./bin/spark-shell 然后,我在spark-shell上编写一些scala代码,例如:

var count1=0
var ntimes=10000
var index=0
while(index<ntimes)
{
index+=1
val t1 = Math.random()
val t2 = Math.random()
if (t1*t1 + t2*t2 < 1) 
        count1+=1
}
var pi= 4.0 * count1 / ntimes

val count2 = spark.parallelize(1 to NUM_SAMPLES).map{i =>
  val x = Math.random()
  val y = Math.random()
  if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count2 / NUM_SAMPLES)

这些代码包含两个不同的Pi计算程序。 我在徘徊是否所有这些代码都在群集上运行。 我猜只有map {}函数包围的这些代码在集群上执行,而其他代码仅在主节点上执行。 但我不确定这是否正确。

Spark提供了比简单的Map&Reduce更通用的框架。 如果您检查API ,则会发现许多其他更通用的功能,例如聚合。 此外,Spark支持广播变量和累加器等功能,这些功能使并行编程更加有效。

第二个问题(您确实应该将两者分开):是的,这两个代码的执行方式不同。 如果要利用Spark的并行功能,则必须使用RDD数据结构。 在您了解RDD的分布方式以及操作如何影响RDD之前,很难有效地使用Spark。

没有在RDD的方法中执行的任何代码都不是并行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM