来自dataproc客户端的纱线状态 - 为什么它总是一个列表对象?

时间:2017-01-21 01:35:21

标签: google-cloud-dataproc

我们在带有纱线的数据中心集群上运行了火花作业 - 我们在python中有一个包装程序,它对作业的状态进行持续轮询,我们正在监控纱线的作业状态 - 如下所示:

dataproc = discovery.build('dataproc', 'v1', credentials=credentials)
job_id = '8873a82c-6201-48d4-8ad3-d8f236ef9c49'
projectId='dev-111111'
REGION = 'global'

result = dataproc.projects().regions().jobs().get(projectId=projectId,region=REGION,jobId=job_id).execute()

print result['yarnApplications'][0]['state']

根据Google dataproc的文档here

的建议

上面的“结果”是一个JSON对象,在JSON对象中有一个名为“yarnApplications”的字段,它是一个列表对象,其第一个也是唯一一个元素包含我们感兴趣的作业状态。

问题是 - 为什么这个“yarnApplications”对象总是一个列表对象,即使我们只有一个纱线作业在运行?我们已经看到纱线多次尝试启动工作的情况 - “yarnApplications”字段在这种情况下是否包含多个元素?

另外,是否保证 - 如果我们只在纱线上运行一个作业,“yarnApplications”列表对象将只包含一个元素?

我们知道这只是dataproc客户端的测试版 - 但由于我们在其上运行生产系统,所以我们将非常感谢任何输入和建议。

由于

1 个答案:

答案 0 :(得分:1)

根据Dataproc API job definition,作业包含YarnApplications的“集合”,通常这个定义不能根据运行时内容更改它的类型。例如,Job.getYarnApplications() returns a java.util.List的Java接口,无论列表是仅恰好有一个元素还是零或多个。

此API定义旨在适应各种作业类型,每个作业可以提交多个YARN应用程序,例如Hive或Pig。在某些情况下,Hadoop jarfiles还提交多个作业,例如,如果驱动程序是Apache Crunch程序,或者您运行Gridmix。

确实如果你只有一个作业在YARN中运行,那么列表对象只包含一个元素;列表中的YARN应用程序仅是给定作业调用创建的应用程序。即使您同时运行多个Dataproc作业,每个作业提交不同的并发YARN应用程序,每个作业也只包含作业自己提交的特定YARN应用程序。