美文网首页
Spark Launcher java 提交代码 windows

Spark Launcher java 提交代码 windows

作者: NazgulSun | 来源:发表于2019-11-08 16:30 被阅读0次

环境准备

  • spark 集群在linux 服务器,个人代码在本地调试,不希望每次就 打jar 包在上传再运行
  • 使用spark Java 的SparkLauncher,本地提交任务到集群,java 中获取 appId 并监控任务状态。
  • 需要在本地搭建 hadoop+ spark 的环境,并且拷贝 cluster 的配置到本地,覆盖本机的配置。
  • 是否成功的检验方法是,在本地运行spark-submit 看能否提交任务。
spark Launcher 的原理。
  • 本质上是从java 程序里面 构建 相应的参数,然后 在java 开启线程调用 exec(cmd)命令,并获取输出。
SparkLauncher launcher = new SparkLauncher()
               .setAppName(job.getName())
               .setAppResource(sparkConfig.getJarPath())
               .setMainClass(job.getMainClass())
               .setMaster(sparkConfig.getMaster())
               .setDeployMode(sparkConfig.getDeployMode());
       if( ! isWindows())
       {
           //can only work in linux
           launcher.setConf("spark.driver.memory", sparkConfig.getDriverMemory())
                   .setConf("spark.executor.memory", sparkConfig.getExecutorMemory())
                   .setConf("spark.executor.cores", sparkConfig.getExecutorCores());
       }


  • 提交并且监控状态
SparkAppHandle handle = launcher.setVerbose(true).startApplication(new SparkAppHandle.Listener()
        {
            @Override
            public void stateChanged(SparkAppHandle sparkAppHandle)
            {
                log.info("appId {} stateChanged:{}", sparkAppHandle.getAppId(), sparkAppHandle.getState().toString());
            }

            @Override
            public void infoChanged(SparkAppHandle sparkAppHandle)
            {
                log.info("appId {} infoChanged:{}", sparkAppHandle.getAppId(),  sparkAppHandle.getState().toString());
            }
        });
        log.info("The task is executing, please wait ....");

遇到的坑

 if( ! isWindows())
        {
            //can only work in linux
            launcher.setConf("spark.driver.memory", sparkConfig.getDriverMemory())
                    .setConf("spark.executor.memory", sparkConfig.getExecutorMemory())
                    .setConf("spark.executor.cores", sparkConfig.getExecutorCores());
        }

在window 环境下,设置 setConf的时候会有问题,主要是 sparkLauncher会把这个参数
用 双引号 引用起来"spark.executor.memory=4G", 当这个传给windows cmd的时候, 就会报错。
所以在window下面,才有一个这样的判断。

相关文章

网友评论

      本文标题:Spark Launcher java 提交代码 windows

      本文链接:https://www.haomeiwen.com/subject/idkwbctx.html