apache-spark - Spark Client 和 Spark Driver 有什么区别?

标签 apache-spark

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/

相关文章:

apache-spark - Spark Sql 抛出 PermGen 空间错误

python - 为什么pyspark中两种不同的数据处理方式会产生不同的结果?

apache-spark - SparkSQL : Can I explode two different variables in the same query?

apache-spark - Hive 查询以查找中间几周的计数

apache-spark - Spark 中 RowMatrix 的矩阵转置

python - flatMap 函数 : rdd. flatMap(lambda x : map(lambda e: (x[0], e), x[1])) 中 lambda 函数的解释?

java - 如何使用 Spark 和 JavaRDD 检索特定行?

scala - 在 Apache Spark 中,如何将慢速 RDD/数据集转换为流?

apache-spark - 更新 RDD 中的广播变量

apache-spark - Hive vs Spark Hash 函数产生不同的结果