После прочтения некоторого документа на http://spark.apache.org/docs/0.8.0/cluster-overview.html у меня возник вопрос, который я хочу уточнить.
Возьмем этот пример из Spark:
JavaSparkContext spark = new JavaSparkContext(
new SparkConf().setJars("...").setSparkHome....);
JavaRDD<String> file = spark.textFile("hdfs://...");
// step1
JavaRDD<String> words =
file.flatMap(new FlatMapFunction<String, String>() {
public Iterable<String> call(String s) {
return Arrays.asList(s.split(" "));
}
});
// step2
JavaPairRDD<String, Integer> pairs =
words.map(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});
// step3
JavaPairRDD<String, Integer> counts =
pairs.reduceByKey(new Function2<Integer, Integer>() {
public Integer call(Integer a, Integer b) {
return a + b;
}
});
counts.saveAsTextFile("hdfs://...");
Итак, скажем, у меня есть кластер из 3 узлов, а node 1 работает как master, а вышеприведенная программа драйвера была правильно вписана (скажем, application-test.jar). Итак, теперь я запускаю этот код на master node, и я считаю, что сразу после создания SparkContext
файл application-test.jar будет скопирован на рабочие узлы (и каждый работник создаст каталог для этого приложение).
Итак, теперь мой вопрос:
Являются ли шаги step1, step2 и step3 в примерах задач, которые отправляются работникам? Если да, то как рабочий выполняет это? Как java -cp "application-test.jar" step1
и так далее?