2017-02-06 11 views
1

タイムアウトパラメータを指定してクラスタ環境でジョブをサブミットする場合、許可された時間が経過した場合、sparkを実行中のジョブを終了させる方法がありますか?Apacheのスパークジョブの実行時間を制限する

+0

タイムアウトを開始するタイミングによって異なります。あなたは運転手でそれを自分で行うことができます。将来、タイムアウトでジョブを開始してください。タイムアウトが切れると、ドライバはシャットダウンし、Sparkジョブを終了します。 – LiMuBei

+0

私は残りの部分で仕事を提出しており、リクエストにプロパティを渡しているので、そこに設定する必要があると思います。 – user601929

答えて

0

Spark 2.1.0には、組み込みのソリューションはありません(追加するには非常に優れた機能です)。

speculationの機能を使用すると、長いタスクを再起動し、spark.task.maxFailuresを再起動しすぎて再起動したタスクを強制終了することができます。

しかし、これは絶対にきれいではありませんが、スパークが長いタスクを停止するために、実際の「サーキットブレーカー」が不足している他の側に

(などのnoob SELECT * FROM DBなど)、あなたはスパークのWeb UIのWeb APIを使用することができます。

GET http://SPARK_CLUSTER_PROD/api/v1/applications/application_1502112083252_1942/jobs?status=running

(これはあなたが長く仕事を見つけるために使用することができますsubmissionTimeフィールドを持つ配列を与える)

2)仕事を殺す:

1)は、実行中のジョブ取得しますジョブステージごとに。

私はSparkも隠されたAPIを持っていると信じています。あなたは使ってみることができます。

0

YARN REST APIを使用して、サービスからスパークアプリケーションを強制終了することができます。私は、長時間走っているスパークアプリケーションを停止するために次のコードを使用しています。次のコードは、httpclientライブラリを使用しています。

def killApplication(applicationId: String) : Boolean = { 
val appKillPut = new HttpPut(s"http://xx.xx.xx.xx:8088//ws/v1/cluster/apps/$applicationId/state") 
val json = new JSONObject(Map("state"-> "KILLED")) 

val params = new StringEntity(json.toString(),"UTF-8") 
params.setContentType("application/json") 

appKillPut.addHeader("Content-Type", "application/json") 
appKillPut.addHeader("Accept", "*/*") 
appKillPut.setEntity(params) 

println(s"Request payload ${json.toString}") 

val client: CloseableHttpClient = HttpClientBuilder.create().build() 
val response: CloseableHttpResponse = client.execute(appKillPut) 
val responseBody = EntityUtils.toString(response.getEntity) 
println(s"Response payload ${responseBody}") 
val statusCode: Int = response.getStatusLine.getStatusCode 
if(statusCode == 200 || statusCode == 201 || statusCode == 202) { 
    println(s"Successfully stopped the application : ${applicationId}") 
    true 
} else { 
    false 
} 
} 

これが役立ちます。

ラビ

関連する問題