Apache spark和Map reduce之间的关系是什么?

时间:2014-06-11 06:43:27

标签: shell mapreduce apache-spark

我对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 {}函数包围的这些代码才会在集群上执行,而其他代码只在主节点上执行。但我不确定这是否正确。

1 个答案:

答案 0 :(得分:1)

Spark提供了一个更简单的框架,而不仅仅是Map&amp;降低。如果检查API,您可以找到更多通用的其他函数,例如聚合。此外,Spark还支持广播变量和累加器等功能,使并行编程更加有效。

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

任何未通过RDD在方法中执行的代码都不是并行的。