在纱线中启动/停止火花流工作的正确方法是什么?

Kev*_*uli 11 hadoop cloudera hadoop-yarn apache-spark spark-streaming

我一直在试验和谷歌搜索几个小时,没有运气.

我有一个火花流应用程序,在本地火花群中运行良好.现在我需要在cloudera 5.4.4上部署它.我需要能够启动它,让它在后台持续运行,并能够阻止它.

我试过这个:

$ spark-submit --master yarn-cluster --class MyMain my.jar myArgs
Run Code Online (Sandbox Code Playgroud)

但它只是无休止地印刷这些线条.

15/07/28 17:58:18 INFO Client: Application report for application_1438092860895_0012 (state: RUNNING)
15/07/28 17:58:19 INFO Client: Application report for application_1438092860895_0012 (state: RUNNING)
Run Code Online (Sandbox Code Playgroud)

问题1:因为它是一个流媒体应用程序,它需要连续运行.那么我该如何在"后台"模式下运行呢?我发现在纱线上提交火花作业的所有例子似乎都假设应用程序会做一些工作并终止,因此你想要在前台运行它.但流媒体并非如此.

接下来......此时应用程序似乎无法正常运行.我认为这可能是我的错误或配置错误,所以我试着查看日志以查看发生了什么:

$ yarn logs -applicationId application_1438092860895_012
Run Code Online (Sandbox Code Playgroud)

但它告诉我:

/tmp/logs/hdfs/logs/application_1438092860895_0012does not have any log files.
Run Code Online (Sandbox Code Playgroud)

所以,问题编号为2:如果应用程序正在运行,为什么它没有日志文件?

所以最终我不得不杀了它:

$ yarn application -kill application_1438092860895_012
Run Code Online (Sandbox Code Playgroud)

这提出了问题3:假设我最终可以在后台启动并运行应用程序,"纱线应用程序 - 杀手"是阻止它的首选方式吗?

van*_*jar 8

  1. 您可以关闭spark-submit控制台.写出RUNNING状态时,作业已在后台运行.
  2. 应用程序完成后,日志即可见.在运行期间,所有日志都可以在本地的工作节点直接访问(您可以在YARN资源管理器Web UI上看到),并在作业完成后聚合到HDFS .
  3. yarn application -kill可能是阻止Spark流应用程序的最佳方法,但它并不完美.最好做一些优雅的关闭以停止所有流接收器并停止流式上下文,但我个人不知道该怎么做.