第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Spark-Core源碼精讀(4)、對(duì)Main類的補(bǔ)充說明

標(biāo)簽:
Spark

上一篇博客中提到了org.apache.spark.launcher.Main这个类,用来生成供spark-class中exec执行的具体的command,本文我们就来具体看一下这个类的实现机制。

首先使用一张图来概括一下Main的实现原理和机制,然后再进行详细说明,俗话说“有图有真相!”

webp

下面我们对这张图进行说明:

1、首先在spark-class中通过Main [class] [classArgs]的方式将SparkSubmit或者Master、Worker以参数的方式传入

2、Main中的main方法获取到spark-class传过来的className,判断是否为SparkSubmit

3、如果是SparkSubmit就通过实例化SparkSubmitCommandBuilder并调用buildCommand方法来创建供spark-class中exec执行的command

4、如果是其他的类(例如Master或者Worker等)就会实例化SparkClassCommandBuilder并调用buildCommand方法来创建供spark-class中exec执行的command

5、3和4生成的command最终都会交给spark-class中的exec来执行,生成具体的进程:根据3生成的command创建的就是SparkSubmit进程,用来提交应用程序;根据4生成的command创建的就是Master、Worker等进程。

下面是Main类的main()方法,供大家参考:

public static void main(String[] argsArray) throws Exception {
  checkArgument(argsArray.length > 0, "Not enough arguments: missing class name.");
  List<String> args = new ArrayList<String>(Arrays.asList(argsArray));
  String className = args.remove(0);  boolean printLaunchCommand = !isEmpty(System.getenv("SPARK_PRINT_LAUNCH_COMMAND"));
  AbstractCommandBuilder builder;  if (className.equals("org.apache.spark.deploy.SparkSubmit")) {    try {
      builder = new SparkSubmitCommandBuilder(args);
    } catch (IllegalArgumentException e) {
      printLaunchCommand = false;
      System.err.println("Error: " + e.getMessage());
      System.err.println();
      MainClassOptionParser parser = new MainClassOptionParser();      try {
        parser.parse(args);
      } catch (Exception ignored) {        // Ignore parsing exceptions.
      }
      List<String> help = new ArrayList<String>();      if (parser.className != null) {
        help.add(parser.CLASS);
        help.add(parser.className);
      }
      help.add(parser.USAGE_ERROR);
      builder = new SparkSubmitCommandBuilder(help);
    }
  } else {
    builder = new SparkClassCommandBuilder(className, args);
  }
  Map<String, String> env = new HashMap<String, String>();
  List<String> cmd = builder.buildCommand(env);  if (printLaunchCommand) {
    System.err.println("Spark Command: " + join(" ", cmd));
    System.err.println("========================================");
  }  if (isWindows()) {
    System.out.println(prepareWindowsCommand(cmd, env));
  } else {    // In bash, use NULL as the arg separator since it cannot be used in an argument.
    List<String> bashCmd = prepareBashCommand(cmd, env);    for (String c : bashCmd) {
      System.out.print(c);
      System.out.print('\0');
    }
  }
}

有兴趣的朋友可以深入研究一下command构造的内部机制,本文只是上一篇博客的补充,避免大家对Main的内部工作机制产生疑惑。

接下来的文章我们将对Spark的内核架构进行分析。

本文为原创,欢迎转载,转载请注明出处、作者,谢谢!



作者:sun4lower
链接:https://www.jianshu.com/p/399fb2ba79fa


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消