[英]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.