Samza附录一 工作资源

2018-08-18 17:29 更新

在作业范围(而不是集群,容器或任务范围)上展开操作。初始实施包括列出所有作业,获取特定作业的状态以及启动或停止单个作业的功能。

API

以下各节提供有关每个请求的响应结构和详细描述的一般信息。

响应结构

所有回复将包含作业状态或错误消息。

工作状态

工作状态将以下列形式:

{
    "status":"STOPPED",
    "statusDetail":"KILLED",
    "jobName":"wikipedia-parser",
    "jobId":"1"
}

status 是这个工作的抽象 Samza 状态。最初,它将是{开始,启动,停止,未知}之一。

statusDetail 是作业的实现特定状态。对于 YARN,它将是 YarnApplicationState 枚举中的值之一。

错误信息

每个错误响应都具有以下结构:

{
    "message": "Unrecognized status parameter: null"
}

message 是响应中唯一的字段,并包含对该问题的描述。 

获取所有工作

列出主机上安装的所有作业,并提供其状态。

请求

GET /v1/jobs

响应

Status: 200 OK
[

    {
        "status":"STOPPED",
        "statusDetail":"KILLED",
        "jobName":"wikipedia-parser",
        "jobId":"1"
    },
    {
        "status":"STARTED",
        "statusDetail":"RUNNING",
        "jobName":"wikipedia-feed",
        "jobId":"1"
    },
    {
        "status":"STOPPED",
        "statusDetail":null,
        "jobName":"wikipedia-stats",
        "jobId":"1"
    }
]

响应码

状态描述
200好操作成功完成,并返回每个作业的当前作业状态。
500服务器错误
在服务器上执行该命令时发生错误。例如命令超时。
{
    "message": "Timeout waiting for job status."
}

获得工作

获取指定作业的状态。

格式

GET /v1/jobs/{jobName}/{jobId}

该参数 {jobName} 和 {jobId} 路径参数反映作业配置中 “job.name” 和 “job.id” 的值。

请求

GET /v1/jobs/wikipedia-feed/1

响应

Status: 200 OK
{
    "status":"STARTED",
    "statusDetail":"RUNNING",
    "jobName":"wikipedia-feed",
    "jobId":"1"
}

响应码

状态描述
200好操作成功完成,并返回当前作业状态。
错误(404
找不到指定的job +实例。
{
"message": "Job wikipedia-¯\_(ツ)_/¯-feed instance 1 is not installed on this host."
}
500服务器错误
在服务器上执行该命令时发生错误。例如命令超时。
{
    "message": "Timeout waiting for job status."
}

开始工作

如果尚未启动,请使用指定的应用程序名称启动作业。命令将在启动启动操作时返回。

格式

PUT /v1/jobs/{jobName}/{jobId}?status=started

Form 参数 status 是请求结束时作业的预期状态。

PUT /v1/jobs/wikipedia-feed/1?status=started

响应

Status: 202 Accepted
{
    "status":"STARTING",
    "statusDetail":"ACCEPTED",
    "jobName": "wikipedia-feed",
    "jobId": "1"
}

响应码

状态描述
200好操作成功完成,并返回当前作业状态。
400错误请求
请求有问题。例如无效状态参数。
{
"message": "Unrecognized status parameter: null"
}
错误(404
找不到指定的job +实例。
{
"message": "Job wikipedia-¯\_(ツ)_/¯-feed instance 1 is not installed on this host."
}
500服务器错误
在服务器上执行该命令时发生错误。例如命令超时。
{
    "message": "Timeout waiting for job status."
}

停止工作

如果尚未停止,则停止具有指定应用程序名称的作业。

格式

PUT /v1/jobs/{jobName}/{jobId}?status=stopped

Form 参数 status 是请求结束时作业的预期状态。

PUT /v1/jobs/wikipedia-feed/1?status=stopped

响应

Status: 202 Accepted
{
    "status":"STOPPED",
    "statusDetail":"KILLED",
    "jobName": "wikipedia-feed",
    "jobId": "1"
}

响应码

状态描述
200好操作成功完成,并返回当前作业状态。
400错误请求
请求有问题。例如无效状态参数:
{
"message": "Unrecognized status parameter: null"
}
错误(404
找不到指定的job +实例。
{
"message": "Job wikipedia-¯\_(ツ)_/¯-feed instance 1 is not installed on this host."
}
500服务器错误
在服务器上执行该命令时发生错误。例如命令超时:
{
    "message": "Timeout waiting for job status."
}

设计

抽象

JobsResource 使用三个主要抽象,用户可以实现这些抽象,以处理其环境特有的任何细节。

  1. JobProxy:JobProxy 是与 Samza 工作交互的中心点。它暴露了通用方法来启动,停止并获取 Samza 作业的状态。该接口的实现可以使用自定义代码来实现针对任何集群管理器针对特定 API 定制的这些方法。
  2. InstallationFinder:InstallationFinder 提供了一个通用接口来发现所有安装的作业,在作业包结构及其位置(例如本地对远程主机)中隐藏任何自定义。InstallationFinder 还解决了用于验证和识别作业的作业配置。
  3. JobStatusProvider:该 JobStatusProvider 允许 JobProxy 得到一个通用的方式工作的状态。可以使用相同的界面在纱线,Mesos 或独立作业上获取作业状态。它还可以为同一个群集实现不同的实现。例如,使用Yarn,一个实现可以通过命令行获得作业状态,另一个通过 ResourceManager REST API 获得。

配置必须明确指定一个 JobProxy 工厂类。相比之下,InstallationFinder 和 JobStatusProvider 抽象是 JobProxy 的自然扩展,仅用于演示发现已安装作业和获取作业状态的模式。但是,这并不是明确的要求。

该 SimpleYarnJobProxy 附带 Samza REST 的目的是展示 JobProxy 的功能实现与 Hello Samza 工作。看教程,试试看。您可以实现自己的 JobProxy,使 JobsResource 适应作业打包和部署模型的具体细节。

请求流程

在验证每个请求后,JobsResource 将调用相应的 JobProxy 命令。JobProxy 使用 InstallationFinder 枚举已安装的作业和 JobStatusProvider 来获取作业的运行时状态。

所提供的 SimpleInstallationFinder 会从文件系统中搜索,从 job.installations.path 寻找有效的 Samza 作业配置文件指定的目录开始。它提取 job.name和job.id 属性值,并为每个作业实例创建一个 InstallationRecord。InstallationRecord 包含启动,停止和获取作业状态所需的所有信息。

提供的 YarnCliJobStatusProvider 利用 ScriptRunner 使用 Yarn ApplicationCLI 获取作业状态。

该 SimpleYarnJobProxy 依赖于 InstallationRecord scriptFilePath(脚本/bin)的目录来启动和停止作业。

以下是Samza REST附带的实现描述:

作业资源组件图

组态

JobsResource 属性应该在与 Samza REST配置相同的文件中指定。为了清楚起见,这里是指定的。

名称描述
job.proxy.factory.class必需:将用于创建作业代理以控制作业的作业代理工厂。该值是必须实现JobProxyFactory的完全限定类名称。Samza配有一个实现:
org.apache.samza.rest.proxy.job.SimpleYarnJobProxy
  • 执行shell脚本来启动,停止和获取作业的状态,主要依赖于YARN ApplicationCLI。它使用
    SimpleInstallationRecord
    与安装在磁盘上的Samza作业交互的抽象。
  • job.installations.path必需:包含Samza作业安装的文件系统路径。路径必须与Samza REST Service在同一主机上。每个安装必须是一个目录,其结构符合JobProxy使用的InstallationRecord实现的期望。
    job.config.factory.class
    用于阅读Samza作业配置的配置工厂。这用于获取InstallationRecord中每个作业实例的job.name和job.id属性。它还用于验证安装路径中的特定目录实际包含Samza作业。如果没有指定
    org.apache.samza.config.factories.PropertiesConfigFactory
    将会被使用。
    以上内容是否对您有帮助:
    在线笔记
    App下载
    App下载

    扫描二维码

    下载编程狮App

    公众号
    微信公众号

    编程狮公众号