Spark Client 和 Spark Driver 有什么区别?我一直听说 Spark 客户端是执行 spark-submit 的客户端,但我从来没有这样做过,我所做的只是在 public static void main(String[] args)
下安装 Spark Libraries 和 Initialize spark context像下面的代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.*;
import org.apache.spark.SparkConf;
import scala.Tuple2;
public class JavaWordCount {
public static void main(String[] args) {
// create Spark context with Spark configuration
JavaSparkContext sc = new JavaSparkContext(new SparkConf()
.setAppName("Spark Count"))
.setMaster(master_url)
.setJars(JavaSparkContext.jarOfClass(JavaWordCount.class));
// get threshold
final int threshold = Integer.parseInt(args[1]);
// read in text file and split each document into words
JavaRDD<String> tokenized = sc.textFile(args[0]).flatMap(
new FlatMapFunction() {
public Iterable call(String s) {
return Arrays.asList(s.split(" "));
}
}
);
// count the occurrence of each word
JavaPairRDD<String, Integer> counts = tokenized.mapToPair(
new PairFunction() {
public Tuple2 call(String s) {
return new Tuple2(s, 1);
}
}
).reduceByKey(
new Function2() {
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
}
);
// filter out words with fewer than threshold occurrences
JavaPairRDD<String, Integer> filtered = counts.filter(
new Function, Boolean>() {
public Boolean call(Tuple2 tup) {
return tup._2 >= threshold;
}
}
);
// count characters
JavaPairRDD<Character, Integer> charCounts = filtered.flatMap(
new FlatMapFunction<Tuple2<String, Integer>, Character>() {
@Override
public Iterable<Character> call(Tuple2<String, Integer> s) {
Collection<Character> chars = new ArrayList<Character>(s._1().length());
for (char c : s._1().toCharArray()) {
chars.add(c);
}
return chars;
}
}
).mapToPair(
new PairFunction<Character, Character, Integer>() {
@Override
public Tuple2<Character, Integer> call(Character c) {
return new Tuple2<Character, Integer>(c, 1);
}
}
).reduceByKey(
new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
}
);
System.out.println(charCounts.collect());
}
}
在这段代码中,我没有看到任何 spark-submit 那么哪个是客户端,哪个是这里的驱动程序?另外我真的不明白 SparkConf.setJars 发生了什么?为什么需要它,它有什么作用?
最佳答案
Master 是创建 Task 并将其提交给 Workers 并在不同作业阶段之间进行协调的人,而 Driver 位于 Master 之上一级,Master 参与创建上下文和创建 RDD Graph,然后它提交给主人。
Spark Driver 是一个程序,它在数据的 RDD 上声明转换和操作,并将此类请求提交给 master。它基本上创建了您的 SparkContext。
因此,Driver 使用 RDD Transformations 和 Actions 准备上下文并“声明”数据操作。然后 Driver 将这个序列化的 RDD 图提交给 Master。 Master 然后从中创建 Task 并将它们提交给 Worker 执行。它还协调不同的 Job 阶段。
关于apache-spark - Spark Client 和 Spark Driver 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39633874/