Samza附錄一 工作資源

2018-08-18 17:29 更新

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

API

以下各節(jié)提供有關每個請求的響應結構和詳細描述的一般信息。

響應結構

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

工作狀態(tài)

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

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

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

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

錯誤信息

每個錯誤響應都具有以下結構:

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

message 是響應中唯一的字段,并包含對該問題的描述。 

獲取所有工作

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

請求

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

響應碼

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

獲得工作

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

格式

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

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

請求

GET /v1/jobs/wikipedia-feed/1

響應

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

響應碼

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

開始工作

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

格式

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

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

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

響應

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

響應碼

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

停止工作

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

格式

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

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

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

響應

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

響應碼

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

設計

抽象

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

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

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

該 SimpleYarnJobProxy 附帶 Samza REST 的目的是展示 JobProxy 的功能實現(xiàn)與 Hello Samza 工作???a rel="external nofollow" target="_blank" style="background-color: rgb(255, 255, 255);">教程,試試看。您可以實現(xiàn)自己的 JobProxy,使 JobsResource 適應作業(yè)打包和部署模型的具體細節(jié)。

請求流程

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

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

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

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

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

作業(yè)資源組件圖

組態(tài)

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

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

    掃描二維碼

    下載編程獅App

    公眾號
    微信公眾號

    編程獅公眾號