【问题标题】:how to get Application ID from Submission ID or Driver ID programmatically如何以编程方式从提交 ID 或驱动程序 ID 获取应用程序 ID
【发布时间】:2015-11-13 16:40:54
【问题描述】:

我正在集群部署模式下提交 Spark 作业。我在我的代码中获得了提交 ID。为了使用 Spark rest Api,我们需要 applicationId。那么我们如何以编程方式通过 Submission ID 获取 Application Id

【问题讨论】:

标签: apache-spark


【解决方案1】:

要回答这个问题,假设已知可以使用以下函数获取证书 ID:

scala> spark.sparkContext.applicationId

如果你想得到它有点不同。通过其余的 API,可以发送命令。例如,在以下关于 Apache REST API 的有用教程中:http://arturmkrtchyan.com/apache-spark-hidden-rest-api 另一种解决方案是自己编程。您可以使用以下样式发送 Spark 提交:

$SPARK_HOME/bin/spark-submit \
--class org.apache.spark.examples.SparkPi  \
--master spark://my-cluster:7077 \
--deploy-mode cluster \
/path/to/examples.jar 1000

在终端后台,您应该会看到正在生成的日志文件。在日志文件中有应用程序 ID (App_ID)。 $SPARK_HOME 是指向 spark 所在文件夹的环境变量。

例如 Python 可以在下面描述的代码中获取 App_ID。首先,我们创建一个列表以使用 Python 的 subprocess 模块发送命令。 subprocess 模块可以创建一个 PIPE,您可以从中提取日志信息,而不是使用 Spark 作为标准选项将其发布到终端。确保在 Popen 之后使用communicate(),以防止等待操作系统。然后将其分成几行并刮过它以找到App_ID。示例如下:

submitSparkList=['$SPARK_HOME/bin/spark-submit','--class','org.apache.spark.examples.SparkPi','--master spark://my-cluster:7077','--deploy-mode cluster','/path/to/examples.py','1000']
sparkCommand=subprocess.Popen(submitSparkList,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
stdout, stderr = sparkCommand.communicate()
stderr=stderr.splitlines() 
for line in stderr:      
     if "Connected to Spark cluster" in  line: #this is the first line from the rest API that contains the ID. Scrape through the logs to find it. 
        app_ID_index=line.find('app-')
        app_ID=line[app_ID_index:] #this gives the app_ID
        print('The app ID is ' + app_ID)

遵循 Python 指南,这包含不使用communicate() 函数时的警告: https://docs.python.org/2/library/subprocess.html

警告这将在使用 stdout=PIPE 和/或 stderr=PIPE 时发生死锁,并且子进程会向管道生成足够的输出,从而阻塞等待 OS 管道缓冲区接受更多数据。使用communicate() 来避免这种情况。

【讨论】:

  • 当前 spark-submit (2.4.x) 在集群部署模式下仅返回 Spark 独立的驱动程序 ID。要获取应用程序 ID,您必须进入客户端模式(或 grep 主日志,如果您有访问权限)。
猜你喜欢
  • 1970-01-01
  • 2011-12-01
  • 2018-12-26
  • 1970-01-01
  • 2016-01-09
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
相关资源
最近更新 更多