gpt4 book ai didi

apache-spark - Spark 中的任务是什么? Spark Worker如何执行jar文件?

转载 作者:行者123 更新时间:2023-12-03 06:42:53 25 4
gpt4 key购买 nike

阅读了有关 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 个节点集群,节点 1 作为主节点运行,并且上述驱动程序已正确 jared(例如 application-test.jar)。因此,现在我在主节点上运行此代码,并且我相信在创建 SparkContext 后,application-test.jar 文件将被复制到工作节点(并且每个工作节点将创建一个该应用程序的目录)。

现在我的问题是:发送给工作人员的示例任务中的步骤 1、步骤 2 和步骤 3 是吗?如果是,那么 worker 如何执行呢?像java -cp“application-test.jar”step1等等?

最佳答案

当您创建 SparkContext 时,每个工作线程都会启动一个执行器。这是一个单独的进程(JVM),它也会加载您的 jar。执行器连接回您的驱动程序。现在驱动程序可以向它们发送命令,例如示例中的 flatMapmapreduceByKey。当驱动程序退出时,执行程序就会关闭。

RDD 有点像被分成多个分区的大数组,每个执行器都可以保存其中一些分区。

任务是通过序列化Function对象从驱动程序发送到执行器的命令。执行器反序列化命令(这是可能的,因为它已经加载了您的 jar),并在分区上执行它。

(这是一个概念性概述。我掩盖了一些细节,但我希望它有所帮助。)

<小时/>

回答您的具体问题:不,每个步骤都不会启动新流程。构造 SparkContext 时,每个工作进程都会启动一个新进程。

关于apache-spark - Spark 中的任务是什么? Spark Worker如何执行jar文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com