如何在提交后退出spark-submit

时间:2016-05-13 02:39:07

标签: apache-spark yarn

使用spark-submit(YARN模式)提交火花流程序时 它继续轮询状态,永不退出

提交后,spark-submit中是否有任何选项退出?

===为什么这会让我烦恼===

流媒体节目将永远运行,我不需要状态更新

如果我手动启动它,我可以按ctrl + c来停止它 但我有很多流媒体上下文开始,我需要使用脚本

启动它们

我可以将spark-submit程序放在后台, 但是经过大量的后台java进程创建后,用户对应,将无法运行任何其他java进程,因为JVM无法创建GC线程

3 个答案:

答案 0 :(得分:60)

我知道这是一个老问题,但现在可以通过在--conf spark.yarn.submit.waitAppCompletion=false使用spark-submit时设置--deploy-mode来实现此目的。这样,客户端将在成功提交申请后退出。

  

在YARN群集模式下,控制客户端是否等待直到退出   应用程序完成。如果设置为true,则客户端进程将   报告应用程序的状态。否则,客户端   进程将在提交后退出。

此外,您可能需要将cluster设置为public class WebApiApplication : System.Web.HttpApplication { /// <summary> /// Entry point of the application. /// </summary> protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); } } public static void Register(HttpConfiguration config) { // IoC configuration var container = new UnityContainer(); UnityContainerConfigurator.Configure(container, new PerRequestLifetimeManager()); // Set the dep resolver config.DependencyResolver = new UnityDependencyResolver(container); // Web API routes config.MapHttpAttributeRoutes(); // Only supports JSON formatter config.Formatters.Clear(); config.Formatters.Add(new JsonMediaTypeFormatter()); config.Formatters.JsonFormatter.SerializerSettings = CustomJsonSerializerSettings.Create(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); // Custom filter var providers = config.Services.GetFilterProviders().ToList(); var defaultprovider = providers.Single(i => i is ActionDescriptorFilterProvider); config.Services.Remove(typeof(IFilterProvider), defaultprovider); config.Services.Add(typeof(IFilterProvider), new UnityFilterProvider(container)); }

  

在群集模式下,Spark驱动程序在应用程序主机内运行   由YARN在集群上管理的进程,客户端可以进入   在启动申请后离开。

更多https://spark.apache.org/docs/1.6.1/running-on-yarn.html

答案 1 :(得分:1)

有趣。我从没想过这个问题。不确定是否有一种干净的方法可以做到这一点,但我只是杀死机器上的提交过程,纱线作业继续运行,直到你专门停止它。因此,您可以创建一个执行spark submit的脚本,然后将其杀死。当你真的想要停止工作时使用纱线技能。肮脏但有效。

答案 2 :(得分:0)

命令timeout TIME CMD将在TIME

之后关闭CMD