簡體   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