gpt4 book ai didi

java - 是否可以从代码运行 spark yarn cluster?

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:56 24 4
gpt4 key购买 nike

我有一个 MapReduce 任务,我想通过我的 Java 代码在 Spark YARN 集群上运行它。我还想在我的 java 代码中检索减少结果(字符串和数字对,元组)。像这样的东西:

// I know, it's wrong setMaster("YARN"), but just to describe what I want.
// I want to execute job ob the cluster.
SparkConf sparkConf = new SparkConf().setAppName("Test").setMaster("YARN");
JavaSparkContext sc = new JavaSparkContext(sparkConf);

JavaRDD<Integer> input = sc.parallelize(list);

// map
JavaPairRDD<String, Integer> results = input.mapToPair(new MapToPairExample());

// reduce
String max = results.max(new MyResultsComparator())._1();

如果我将 master 设置为本地、local[] 或 spark://master:7707,它会起作用。

所以问题是:我能以某种方式对 yarn cluster 做同样的事情吗?

最佳答案

通常,当将 master 作为 yarn 并将部署模式 作为 cluster< 传递时,spark-submit 命令的工作方式如下/strong>(来源:Github code base for spark):

  1. spark-submit 脚本调用 Main.java
  2. Main.java 调用 SparkSubmit.java
  3. SparkSubmit.java 通过确定 masterdeploy 参数调用 YarnClusterApplication
  4. YarnClusterApplication 调用 Client.java
  5. Client.javaResource Manager 对话并移交ApplicationMaster
  6. Resource Manager 在节点管理器上的容器中实例化 ApplicationMaster.java
  7. ApplicationMaster.java:
    1. 使用ExecutorRunnablesexecutors 分配容器
    2. 使用反射 API 找出用户提供的 jar 中的 main 方法
    3. 通过调用 步骤 6.2 中的 main 方法生成一个线程来执行用户应用程序。这是您的代码执行的地方

在此流程中,第 1-5 步发生在客户端/网关机器上。从第 6 步开始,一切都在 Yarn 集群上执行。

现在,为了回答你的问题,我从未尝试过在 yarn-cluster 模式下从代码中执行 spark,但是根据上面的流程,你的如果您希望它以 yarn-cluster 模式运行,则代码只能在 Yarn 集群的节点管理器机器中的应用程序主容器中运行。而且,只有当您从命令行指定 spark-submit --master yarn --deploy-mode cluster 时,您的代码才能到达那里。所以在代码中指定它并:

  1. 运行作业,例如从 IDE 将失败。
  2. 使用 spark-submit --master yarn --deploy-mode cluster 运行作业将意味着在节点上运行的 ApplicationMaster 中的线程中执行您的代码Yarn 集群中的管理器机器,它最终将重新执行您的 setMaster("yarn-cluster") 行代码,这行代码现在是多余的,但您的其余代码将成功运行。

欢迎对此进行任何更正!

关于java - 是否可以从代码运行 spark yarn cluster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35522999/

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