Samza附錄一 工作資源

2018-08-18 17:29 更新

在作業(yè)范圍(而不是集群,容器或任務(wù)范圍)上展開操作。初始實(shí)施包括列出所有作業(yè),獲取特定作業(yè)的狀態(tài)以及啟動(dòng)或停止單個(gè)作業(yè)的功能。

API

以下各節(jié)提供有關(guān)每個(gè)請(qǐng)求的響應(yīng)結(jié)構(gòu)和詳細(xì)描述的一般信息。

響應(yīng)結(jié)構(gòu)

所有回復(fù)將包含作業(yè)狀態(tài)或錯(cuò)誤消息。

工作狀態(tài)

工作狀態(tài)將以下列形式:

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

status 是這個(gè)工作的抽象 Samza 狀態(tài)。最初,它將是{開始,啟動(dòng),停止,未知}之一。

statusDetail 是作業(yè)的實(shí)現(xiàn)特定狀態(tài)。對(duì)于 YARN,它將是 YarnApplicationState 枚舉中的值之一。

錯(cuò)誤信息

每個(gè)錯(cuò)誤響應(yīng)都具有以下結(jié)構(gòu):

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

message 是響應(yīng)中唯一的字段,并包含對(duì)該問題的描述。 

獲取所有工作

列出主機(jī)上安裝的所有作業(yè),并提供其狀態(tài)。

請(qǐng)求

GET /v1/jobs

響應(yīng)

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"
    }
]

響應(yīng)碼

狀態(tài)描述
200好操作成功完成,并返回每個(gè)作業(yè)的當(dāng)前作業(yè)狀態(tài)。
500服務(wù)器錯(cuò)誤
在服務(wù)器上執(zhí)行該命令時(shí)發(fā)生錯(cuò)誤。例如命令超時(shí)。
{
    "message": "Timeout waiting for job status."
}

獲得工作

獲取指定作業(yè)的狀態(tài)。

格式

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

該參數(shù) {jobName} 和 {jobId} 路徑參數(shù)反映作業(yè)配置中 “job.name” 和 “job.id” 的值。

請(qǐng)求

GET /v1/jobs/wikipedia-feed/1

響應(yīng)

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

響應(yīng)碼

狀態(tài)描述
200好操作成功完成,并返回當(dāng)前作業(yè)狀態(tài)。
錯(cuò)誤(404
找不到指定的job +實(shí)例。
{
"message": "Job wikipedia-ˉ\_(ツ)_/ˉ-feed instance 1 is not installed on this host."
}
500服務(wù)器錯(cuò)誤
在服務(wù)器上執(zhí)行該命令時(shí)發(fā)生錯(cuò)誤。例如命令超時(shí)。
{
    "message": "Timeout waiting for job status."
}

開始工作

如果尚未啟動(dòng),請(qǐng)使用指定的應(yīng)用程序名稱啟動(dòng)作業(yè)。命令將在啟動(dòng)啟動(dòng)操作時(shí)返回。

格式

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

Form 參數(shù) status 是請(qǐng)求結(jié)束時(shí)作業(yè)的預(yù)期狀態(tài)。

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

響應(yīng)

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

響應(yīng)碼

狀態(tài)描述
200好操作成功完成,并返回當(dāng)前作業(yè)狀態(tài)。
400錯(cuò)誤請(qǐng)求
請(qǐng)求有問題。例如無效狀態(tài)參數(shù)。
{
"message": "Unrecognized status parameter: null"
}
錯(cuò)誤(404
找不到指定的job +實(shí)例。
{
"message": "Job wikipedia-ˉ\_(ツ)_/ˉ-feed instance 1 is not installed on this host."
}
500服務(wù)器錯(cuò)誤
在服務(wù)器上執(zhí)行該命令時(shí)發(fā)生錯(cuò)誤。例如命令超時(shí)。
{
    "message": "Timeout waiting for job status."
}

停止工作

如果尚未停止,則停止具有指定應(yīng)用程序名稱的作業(yè)。

格式

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

Form 參數(shù) status 是請(qǐng)求結(jié)束時(shí)作業(yè)的預(yù)期狀態(tài)。

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

響應(yīng)

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

響應(yīng)碼

狀態(tài)描述
200好操作成功完成,并返回當(dāng)前作業(yè)狀態(tài)。
400錯(cuò)誤請(qǐng)求
請(qǐng)求有問題。例如無效狀態(tài)參數(shù):
{
"message": "Unrecognized status parameter: null"
}
錯(cuò)誤(404
找不到指定的job +實(shí)例。
{
"message": "Job wikipedia-ˉ\_(ツ)_/ˉ-feed instance 1 is not installed on this host."
}
500服務(wù)器錯(cuò)誤
在服務(wù)器上執(zhí)行該命令時(shí)發(fā)生錯(cuò)誤。例如命令超時(shí):
{
    "message": "Timeout waiting for job status."
}

設(shè)計(jì)

抽象

JobsResource 使用三個(gè)主要抽象,用戶可以實(shí)現(xiàn)這些抽象,以處理其環(huán)境特有的任何細(xì)節(jié)。

  1. JobProxy:JobProxy 是與 Samza 工作交互的中心點(diǎn)。它暴露了通用方法來啟動(dòng),停止并獲取 Samza 作業(yè)的狀態(tài)。該接口的實(shí)現(xiàn)可以使用自定義代碼來實(shí)現(xiàn)針對(duì)任何集群管理器針對(duì)特定 API 定制的這些方法。
  2. InstallationFinder:InstallationFinder 提供了一個(gè)通用接口來發(fā)現(xiàn)所有安裝的作業(yè),在作業(yè)包結(jié)構(gòu)及其位置(例如本地對(duì)遠(yuǎn)程主機(jī))中隱藏任何自定義。InstallationFinder 還解決了用于驗(yàn)證和識(shí)別作業(yè)的作業(yè)配置。
  3. JobStatusProvider:該 JobStatusProvider 允許 JobProxy 得到一個(gè)通用的方式工作的狀態(tài)??梢允褂孟嗤慕缑嬖诩喚€,Mesos 或獨(dú)立作業(yè)上獲取作業(yè)狀態(tài)。它還可以為同一個(gè)群集實(shí)現(xiàn)不同的實(shí)現(xiàn)。例如,使用Yarn,一個(gè)實(shí)現(xiàn)可以通過命令行獲得作業(yè)狀態(tài),另一個(gè)通過 ResourceManager REST API 獲得。

配置必須明確指定一個(gè) JobProxy 工廠類。相比之下,InstallationFinder 和 JobStatusProvider 抽象是 JobProxy 的自然擴(kuò)展,僅用于演示發(fā)現(xiàn)已安裝作業(yè)和獲取作業(yè)狀態(tài)的模式。但是,這并不是明確的要求。

該 SimpleYarnJobProxy 附帶 Samza REST 的目的是展示 JobProxy 的功能實(shí)現(xiàn)與 Hello Samza 工作。看教程,試試看。您可以實(shí)現(xiàn)自己的 JobProxy,使 JobsResource 適應(yīng)作業(yè)打包和部署模型的具體細(xì)節(jié)。

請(qǐng)求流程

在驗(yàn)證每個(gè)請(qǐng)求后,JobsResource 將調(diào)用相應(yīng)的 JobProxy 命令。JobProxy 使用 InstallationFinder 枚舉已安裝的作業(yè)和 JobStatusProvider 來獲取作業(yè)的運(yùn)行時(shí)狀態(tài)。

所提供的 SimpleInstallationFinder 會(huì)從文件系統(tǒng)中搜索,從 job.installations.path 尋找有效的 Samza 作業(yè)配置文件指定的目錄開始。它提取 job.name和job.id 屬性值,并為每個(gè)作業(yè)實(shí)例創(chuàng)建一個(gè) InstallationRecord。InstallationRecord 包含啟動(dòng),停止和獲取作業(yè)狀態(tài)所需的所有信息。

提供的 YarnCliJobStatusProvider 利用 ScriptRunner 使用 Yarn ApplicationCLI 獲取作業(yè)狀態(tài)。

該 SimpleYarnJobProxy 依賴于 InstallationRecord scriptFilePath(腳本/bin)的目錄來啟動(dòng)和停止作業(yè)。

以下是Samza REST附帶的實(shí)現(xiàn)描述:

作業(yè)資源組件圖

組態(tài)

JobsResource 屬性應(yīng)該在與 Samza REST配置相同的文件中指定。為了清楚起見,這里是指定的。

名稱描述
job.proxy.factory.class必需:將用于創(chuàng)建作業(yè)代理以控制作業(yè)的作業(yè)代理工廠。該值是必須實(shí)現(xiàn)JobProxyFactory的完全限定類名稱。Samza配有一個(gè)實(shí)現(xiàn):
org.apache.samza.rest.proxy.job.SimpleYarnJobProxy
  • 執(zhí)行shell腳本來啟動(dòng),停止和獲取作業(yè)的狀態(tài),主要依賴于YARN ApplicationCLI。它使用
    SimpleInstallationRecord
    與安裝在磁盤上的Samza作業(yè)交互的抽象。
  • job.installations.path必需:包含Samza作業(yè)安裝的文件系統(tǒng)路徑。路徑必須與Samza REST Service在同一主機(jī)上。每個(gè)安裝必須是一個(gè)目錄,其結(jié)構(gòu)符合JobProxy使用的InstallationRecord實(shí)現(xiàn)的期望。
    job.config.factory.class
    用于閱讀Samza作業(yè)配置的配置工廠。這用于獲取InstallationRecord中每個(gè)作業(yè)實(shí)例的job.name和job.id屬性。它還用于驗(yàn)證安裝路徑中的特定目錄實(shí)際包含Samza作業(yè)。如果沒有指定
    org.apache.samza.config.factories.PropertiesConfigFactory
    將會(huì)被使用。
    以上內(nèi)容是否對(duì)您有幫助:
    在線筆記
    App下載
    App下載

    掃描二維碼

    下載編程獅App

    公眾號(hào)
    微信公眾號(hào)

    編程獅公眾號(hào)