使用spark-submit(YARN模式)提交火花流程序时 它继续轮询状态,永不退出
提交后,spark-submit中是否有任何选项退出?
===为什么这会让我烦恼===
流媒体节目将永远运行,我不需要状态更新
如果我手动启动它,我可以按ctrl + c来停止它 但我有很多流媒体上下文开始,我需要使用脚本
启动它们我可以将spark-submit程序放在后台, 但是经过大量的后台java进程创建后,用户对应,将无法运行任何其他java进程,因为JVM无法创建GC线程
答案 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在集群上管理的进程,客户端可以进入 在启动申请后离开。
答案 1 :(得分:1)
有趣。我从没想过这个问题。不确定是否有一种干净的方法可以做到这一点,但我只是杀死机器上的提交过程,纱线作业继续运行,直到你专门停止它。因此,您可以创建一个执行spark submit的脚本,然后将其杀死。当你真的想要停止工作时使用纱线技能。肮脏但有效。
答案 2 :(得分:0)
命令timeout TIME CMD
将在TIME