Comment exécuter une application Spark simple à partir d'Eclipse / Intellij IDE?

Afin de faciliter le développement de ma carte de réduire les tâches en cours d'exécution sur Hadoop avant le déploiement en fait des tâches Hadoop je test l'aide d'une simple carte réducteur, j'ai écrit :

object mapreduce {
import scala.collection.JavaConversions._
val intermediate = new java.util.HashMap[String, java.util.List[Int]]
//> intermediate  : java.util.HashMap[String,java.util.List[Int]] = {}
val result = new java.util.ArrayList[Int]       //> result  : java.util.ArrayList[Int] = []
def emitIntermediate(key: String, value: Int) {
if (!intermediate.containsKey(key)) {
intermediate.put(key, new java.util.ArrayList)
}
intermediate.get(key).add(value)
}                                               //> emitIntermediate: (key: String, value: Int)Unit
def emit(value: Int) {
println("value is " + value)
result.add(value)
}                                               //> emit: (value: Int)Unit
def execute(data: java.util.List[String], mapper: String => Unit, reducer: (String, java.util.List[Int]) => Unit) {
for (line <- data) {
mapper(line)
}
for (keyVal <- intermediate) {
reducer(keyVal._1, intermediate.get(keyVal._1))
}
for (item <- result) {
println(item)
}
}                                               //> execute: (data: java.util.List[String], mapper: String => Unit, reducer: (St
//| ring, java.util.List[Int]) => Unit)Unit
def mapper(record: String) {
var jsonAttributes = com.nebhale.jsonpath.JsonPath.read("$", record, classOf[java.util.ArrayList[String]])
println("jsonAttributes are " + jsonAttributes)
var key = jsonAttributes.get(0)
var value = jsonAttributes.get(1)
println("key is " + key)
var delims = "[ ]+";
var words = value.split(delims);
for (w <- words) {
emitIntermediate(w, 1)
}
}                                               //> mapper: (record: String)Unit
def reducer(key: String, listOfValues: java.util.List[Int]) = {
var total = 0
for (value <- listOfValues) {
total += value;
}
emit(total)
}                                               //> reducer: (key: String, listOfValues: java.util.List[Int])Unit
var dataToProcess = new java.util.ArrayList[String]
//> dataToProcess  : java.util.ArrayList[String] = []
dataToProcess.add("[\"test1\" , \"test1 here is another test1 test1 \"]")
//> res0: Boolean = true
dataToProcess.add("[\"test2\" , \"test2 here is another test2 test1 \"]")
//> res1: Boolean = true
execute(dataToProcess, mapper, reducer)         //> jsonAttributes are [test1, test1 here is another test1 test1 ]
//| key is test1
//| jsonAttributes are [test2, test2 here is another test2 test1 ]
//| key is test2
//| value is 2
//| value is 2
//| value is 4
//| value is 2
//| value is 2
//| 2
//| 2
//| 4
//| 2
//| 2
for (keyValue <- intermediate) {
println(keyValue._1 + "->"+keyValue._2.size)//> another->2
//| is->2
//| test1->4
//| here->2
//| test2->2
}
}

Cela me permet d'exécuter mes tâches mapreduce dans mon IDE Eclipse sous Windows avant de les déployer sur le réel cluster Hadoop. J'aimerais réaliser quelque chose de similaire pour l'Allumage ou avoir la capacité à écrire Étincelle code de l'intérieur de l'Éclipse de test avant le déploiement de l'Étincelle de cluster. Est-ce possible avec Étincelle ? Depuis Étincelle s'exécute au-dessus d'Hadoop est-ce à dire que je ne peut pas exécuter Étincelle sans avoir d'abord Hadoop installé ? Donc, en d'autres mots puis-je exécuter le code à l'aide de l'Étincelle bibliothèques ? :

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object SimpleApp {
def main(args: Array[String]) {
val logFile = "$YOUR_SPARK_HOME/README.md" //Should be some file on your system
val sc = new SparkContext("local", "Simple App", "YOUR_SPARK_HOME",
List("target/scala-2.10/simple-project_2.10-1.0.jar"))
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}

prises de https://spark.apache.org/docs/0.9.0/quick-start.html#a-standalone-app-in-scala

Si oui, quelle est l'Étincelle bibliothèques j'ai besoin de les inclure dans mon projet ?

source d'informationauteur blue-sky