Samza附录一 工作资源
在作业范围(而不是集群,容器或任务范围)上展开操作。初始实施包括列出所有作业,获取特定作业的状态以及启动或停止单个作业的功能。
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服务器错误 | 在服务器上执行该命令时发生错误。例如命令超时。
|
获得工作
获取指定作业的状态。
格式
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 +实例。
|
500服务器错误 | 在服务器上执行该命令时发生错误。例如命令超时。
|
开始工作
如果尚未启动,请使用指定的应用程序名称启动作业。命令将在启动启动操作时返回。
格式
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错误请求 | 请求有问题。例如无效状态参数。
|
错误(404 | 找不到指定的job +实例。
|
500服务器错误 | 在服务器上执行该命令时发生错误。例如命令超时。
|
停止工作
如果尚未停止,则停止具有指定应用程序名称的作业。
格式
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错误请求 | 请求有问题。例如无效状态参数:
|
错误(404 | 找不到指定的job +实例。
|
500服务器错误 | 在服务器上执行该命令时发生错误。例如命令超时:
|
设计
抽象
JobsResource 使用三个主要抽象,用户可以实现这些抽象,以处理其环境特有的任何细节。
- JobProxy:JobProxy 是与 Samza 工作交互的中心点。它暴露了通用方法来启动,停止并获取 Samza 作业的状态。该接口的实现可以使用自定义代码来实现针对任何集群管理器针对特定 API 定制的这些方法。
- InstallationFinder:InstallationFinder 提供了一个通用接口来发现所有安装的作业,在作业包结构及其位置(例如本地对远程主机)中隐藏任何自定义。InstallationFinder 还解决了用于验证和识别作业的作业配置。
- 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 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将会被使用。 |
更多建议: