sparkを糸で実行すると、常に終了コードと終了ステータスが表示されます。
以下にいくつかを示します。
CoarseGrainedExecutorBackend: RECEIVED SIGNAL 15: SIGTERM
...failed 2 times due to AM Container for application_1431523563856_0001_000002 exited with exitCode: 10...
...Exit status: 143. Diagnostics: Container killed on request
...Container exited with a non-zero exit code 52:...
...Container killed on request. Exit code is 137...
これらのメッセージのどれも有用だとは思っていません。..これらのメッセージが実際に何が悪いのかを解釈する機会はありますか?エラーを説明するテーブルを検索しましたが、何もありません。
上記から解読できるのは終了コード52だけですが、それはソースコード ここ を見たためです。それはOOMだと言っています。
これらの終了コードと終了ステータスの残りの解釈をやめるべきですか?または、これらの数字が実際に何かを意味するという明らかな方法を見逃していますか?
誰かがexit code
、exit status
、および有用なSIGNAL
。しかし、私はちょうど今ランダムに推測しており、sparkを使用する私の周りの他のすべての人もそうです。
そして、最後に、なぜ終了コードのいくつかがゼロ未満であり、それらをどのように解釈するのですか?
例えば。 Exit status: -100. Diagnostics: Container released on a *lost* node
終了コードとステータスもシグナルもSpark特定ではありませんが、Unixライクなシステムでプロセスが動作する方法の一部です。
終了ステータスと終了コードは、同じものに対する異なる名前です。終了ステータスは、終了後のプロセスの結果を示す0〜255の数値です。通常、終了ステータス0は成功を示します。他のコードの意味はプログラムに依存するため、プログラムのドキュメントで説明する必要があります。ただし、いくつかの確立された標準コードがあります。包括的なリストについては、 この回答 を参照してください。
Spark sources で、次の終了コードを見つけました。それらの説明は、コード内のログステートメントとコメント、および終了ステータスが表示されたコードの理解から取得されます。
stdout
およびstderr
ストリームのセットアップ中にUnsupportedEncodingExceptionが発生した場合。spark.yarn.scheduler.reporterThread.maxFailures
_ executorの失敗が複数発生した場合EXIT_SECURITY
_として宣言されていますが、使用されることはありませんシャットダウンフックによって呼び出された場合、
ApplicationMaster
のデフォルト状態は失敗します。この動作は、1.xバージョンと比較して異なります。ユーザーアプリケーションがSystem.exit(N)
を呼び出すことによって事前に終了した場合、ここでこのアプリケーションを_EXIT_EARLY
_で失敗としてマークします。適切にシャットダウンするには、ユーザーはSystem.exit(0)
を呼び出してアプリケーションを終了しないでください。
56:エグゼキューターは、「spark.executor.heartbeat.maxFailures」回を超えてドライバーにハートビートを送信できません。
101:子メインクラスが見つからなかった場合、spark-submitによって返されます。クライアントモード(コマンドラインオプション_--deploy-mode client
_)では、子メインクラスはユーザーが送信したアプリケーションクラス(_--class CLASS
_)です。クラスターモード(_--deploy-mode cluster
_)では、子メインクラスはクラスターマネージャー固有の送信/クライアントクラスです。
これらの終了コードは、Unixシグナルによってトリガーされたプログラムのシャットダウンが原因である可能性があります。シグナル番号は、終了コードから128を引くことで計算できます。これについては、この ブログ投稿 (元々 この質問 にリンクされていました)で詳しく説明されています。また、優れた JVMで生成された終了コードの説明 もあります。 Sparkは ExecutorExitCodes.scala)のコメントで説明されているように、この仮定で機能します
上記の終了コードとは別に、終了コードとして1または-1を設定するSpark sources)にはSystem.exit()
呼び出しの数があります。 1が他のすべてのエラーを示すのに対し、コマンドラインパラメーターが欠落しているか正しくないことを示すために使用されます。
シグナルは、システムメッセージをプロセスに送信できるイベントの一種です。これらのメッセージは、たとえば、プロセスに構成の再読み込み(SIGHUP
)を要求したり、プロセス自体を終了(SIGKILL
)したりするために使用されます。標準シグナルのリストは、セクション標準シグナルの signal(7)manページ にあります。
以下のコメントでRick Moritzが説明したように(ありがとう!)、Sparkセットアップで最も可能性の高い信号源は
これにより、sparkによるこれらのメッセージの意味が少し明確になることを願っています。