pione-client

提供: Eospedia
移動: 案内検索

pione-clientとはPIONE定義書隠蔽化パッケージから処理を実行するPIONEコマンドです。

オプション一覧

オプション デフォルト 説明
引数 location 必須 実行するPIONE定義書または隠蔽化パッケージ
-b LOCATION ./process/ 処理のベースディレクトリ
--client-ui TYPE Type of the client's user interface
--communication-address URI プロセス間通信で使用するIPアドレス:ポート番号
--delegate-tuple-space なし なし タプル空間の管理をタプル空間ブローカに委譲する(未実装)
--dry-run なし なし ドライランモード
--features FEATURES 特性(PIONE)
--file-cache-method NAME simple ファイルキャッシュ方式名: simple, no_cache
--file-sliding [BOOLEAN] ファイルスライド処理
-i LOCATION Set input directory
--notification-receiver URI 通知を受けるアドレス:ポート番号(ポート番号は省略可)
--notification-target URI 通知として送信するブロードキャストアドレス:ポート番号(ポート番号は省略可)
--params #オプション --params参照 なし パラメータの設定
--parent-front URI set parent front URI
--rehearse [SCENARIO] デフォルトシナリオ パッケージ内で実行するシナリオ名
--request-from URI URI that the client requested the job from
--request-task-worker N タスクワーカの要求数
--session-id ID Session id of the job
--stand-alone なし なし スタンドアローンモード
--stream [BOOLEAN] ストリームモード
-t N タスクワーカの最大プロセス起動数
--timeout SEC 0 タイムアウト設定(秒)(0のときはタイムアウトしない)
--color BOOLEAN true 出力結果の文字に色を付ける
--debug [TYPE] system デバッグモードで実行
-h [FORMAT] txt ヘルプを表示
-v なし なし バージョンを表示

実行例

オプション必須項目のみの場合

引数にPIONE定義書を指定して実行します。

$ pione-client HelloWorld.pione
  ==> &Anonymous:Root([],{})
    --> Rule Application: &Anonymous:Root([],{})
      --> Distribution: &Anonymous:Root([],{})
            >>> &Anonymous:Main([],{})
  ==> &Anonymous:Main([],{})
   SH ------------------------------------------------------------
   SH 	echo "Hello PIONE world !" > message.txt
   SH ------------------------------------------------------------
      <-- Distribution: &Anonymous:Root([],{})
  <== &Anonymous:Main([],{})
    <-- Rule Application: &Anonymous:Root([],{})
  <== &Anonymous:Root([],{})
$ ls ./process/
output			pione-process.log
$ cat ./process/output/message.txt 
Hello PIONE world !

-b指定なしなので、processディレクトリが作成され、その中に入力(今回は無い)、出力、ログが格納されます。

オプション -b

-bにてディレクトリ名を指定して実行します。

$ pione-client HelloWorld.pione -b BaseDir
  ==> &Anonymous:Root([],{})
    --> Rule Application: &Anonymous:Root([],{})
      --> Distribution: &Anonymous:Root([],{})
            >>> &Anonymous:Main([],{})
  ==> &Anonymous:Main([],{})
   SH ------------------------------------------------------------
   SH 	echo "Hello PIONE world !" > message.txt
   SH ------------------------------------------------------------
  <== &Anonymous:Main([],{})
      <-- Distribution: &Anonymous:Root([],{})
    <-- Rule Application: &Anonymous:Root([],{})
  <== &Anonymous:Root([],{})
$ ls BaseDir/
output			pione-process.log
$ cat BaseDir/output/message.txt 
Hello PIONE world !

BaseDirディレクトリが作成され、その中に結果などが格納されています。

オプション --dry-run

$ pione-client HelloWorld.pione --dry-run
  ==> &Anonymous:Root([],{})
    --> Rule Application: &Anonymous:Root([],{})
      --> Distribution: &Anonymous:Root([],{})
            >>> &Anonymous:Main([],{})
  ==> &Anonymous:Main([],{})
   SH ------------------------------------------------------------
   SH 	echo "Hello PIONE world !" > message.txt
   SH ------------------------------------------------------------
      <-- Distribution: &Anonymous:Root([],{})
    <-- Rule Application: &Anonymous:Root([],{})
  <== &Anonymous:Root([],{})
  <== &Anonymous:Main([],{})
$ ls ./process/
output			pione-process.log
$ cat ./process/output/message.txt 
$ 

ドライランモードではシェルスクリプトの実行をせず、出力ファイルを空ファイルで作成します。

オプション -i

-iにて入力データ用のディレクトリ名を指定して実行します。

Multiplying.pione

 Rule Main
 	input 'test.in'
 	output 'test.out'
 Action 
 	awk '{ print $1*2 }' {$I[1]} > {$O[1]} 
 End

上記のPIONE定義書は入力データtest.inを必要としていますので、test.inのディレクトリ名を相対パスで設定します。

MultiplyingInput内

$ ls MultiplyingInput
test.in


実行結果

$ pione-client Multiplying.pione -i MultiplyingInput/
  ==> &Anonymous:Root([.DS_Store,test.in],{})
    --> Rule Application: &Anonymous:Root([.DS_Store,test.in],{})
      --> Distribution: &Anonymous:Root([.DS_Store,test.in],{})
            >>> &Anonymous:Main([test.in],{})
  ==> &Anonymous:Main([test.in],{})
   SH ------------------------------------------------------------
   SH 	awk '{ print $1*2 }' test.in > test.out 
   SH ------------------------------------------------------------
      <-- Distribution: &Anonymous:Root([.DS_Store,test.in],{})
  <== &Anonymous:Main([test.in],{})
    <-- Rule Application: &Anonymous:Root([.DS_Store,test.in],{})
  <== &Anonymous:Root([.DS_Store,test.in],{})
$ ls process/
input			output			pione-process.log
$ ls process/input/
test.in

MultiplyingInput内のデータを入力としてprocess/input内にコピーし、処理を実行しています。

オプション --params

ParamTest.pione

param $val

Rule Main
	output 'message.txt'
Action
	echo "{$val}" > message.txt
End

上記のPIONE定義書は変数としてvalが宣言されてそれをmessage.txtに書き込む処理です。--paramsよりvalに値を入れて実行します。

実行結果

$ pione-client ParamTest.pione --params='{val:123}'
"{val:123}"
  ==> &Anonymous:Root([],{})
    --> Rule Application: &Anonymous:Root([],{})
      --> Distribution: &Anonymous:Root([],{})
            >>> &Anonymous:Main([],{})
  ==> &Anonymous:Main([],{})
   SH ------------------------------------------------------------
   SH 	echo "123" > message.txt
   SH ------------------------------------------------------------
      <-- Distribution: &Anonymous:Root([],{})
  <== &Anonymous:Main([],{})
    <-- Rule Application: &Anonymous:Root([],{})
  <== &Anonymous:Root([],{})
$ cat process/output/message.txt 
123

val=123としてmessage.txtに書き込まれました。

オプション --rehearse

入力ファイルの準備

シナリオを含んだパッケージを入力ファイルとします。

Multiplying.pione

.@ PackageName	:: "Multiplying"

param val := 1

 Rule Main
 	input 'test.in'
 	output 'test.out'
 Action 
 	awk '{ print $1*{$val} }' {$I[1]} > {$O[1]} 
 End

上記のPIONE定義書は入力データtest.inを必要としていますので、test.inのディレクトリ名を相対パスで設定します。

/SnarioMulti/input/test.in

1
2
3
4


/SnarioMulti/Scenario.pione

.@ ScenarioName	:: "Multi4"
.@ ParamSet		:: "{val:4}"

今回はtest.inの値を4倍にするシナリオとしています。

これらのファイルをpione package buildでパッケージ化します。(/testディレクトリに作成した場合)

$ pione package build test/
info: update the package info file: local:/test/pione-package.json
info: update the scenario info file: local:/test/SinarioMulti/pione-scenario.json
info: Package local:/Multiplying.ppg has been built successfully.


実行結果

$ pione-client Multiplying.ppg --rehearse "Multi4"
  ==> &Multiplying:Root([test.in],{})
    --> Rule Application: &Multiplying:Root([test.in],{})
      --> Distribution: &Multiplying:Root([test.in],{})
            >>> &Multiplying:Main([test.in],{})
  ==> &Multiplying:Main([test.in],{})
   SH ------------------------------------------------------------
   SH 	awk '{ print $1*4 }' test.in > test.out 
   SH ------------------------------------------------------------
  <== &Multiplying:Main([test.in],{})
      <-- Distribution: &Multiplying:Root([test.in],{})
    <-- Rule Application: &Multiplying:Root([test.in],{})
  <== &Multiplying:Root([test.in],{})
info: Rehearsal Result: Succeeded

/process/output/test.out

4
8
12
16

test.inに対して全ての値が4倍されています。

outputの確認

シナリオの中にoutputディレクトリを含めることもできますが、これは作成されたファイルとこの中のデータを比較して一致していることと存在していることを確かめることに使用します。

一致する場合

/SnarioMulti/output/test.out

4
8
12
16

上記を含めてパッケージを作成し、実行してみます。

$ pione-client Multiplying.ppg --rehearse "Multi4"
  ==> &Multiplying:Root([test.in],{})
    --> Rule Application: &Multiplying:Root([test.in],{})
      --> Distribution: &Multiplying:Root([test.in],{})

-中略-

    <-- Rule Application: &Multiplying:Root([test.in],{})
  <== &Multiplying:Root([test.in],{})
info: Rehearsal Result: Succeeded

Rehearsal Result: Succeededと表示され、出力ファイルが想定通りであると判断できます。

データが違う場合

/SnarioMulti/output/test.out

1
2
3
4

上記を含めてパッケージを作成し、実行してみます。

$ pione-client Multiplying.ppg --rehearse "Multi4"
  ==> &Multiplying:Root([test.in],{})
    --> Rule Application: &Multiplying:Root([test.in],{})
      --> Distribution: &Multiplying:Root([test.in],{})

-中略-

    <-- Rule Application: &Multiplying:Root([test.in],{})
  <== &Multiplying:Root([test.in],{})
Rehearsal Result: Failed
- test.out is different from expected result.

... is different from expected result.と表示され、出力ファイルが意図した通りでないことが分かります。

ファイルが存在しない場合

/SnarioMulti/output/test.output

4
8
12
16

上記を含めてパッケージを作成し、実行してみます。

$ pione-client Multiplying.ppg --rehearse "Multi4"
  ==> &Multiplying:Root([test.in],{})
    --> Rule Application: &Multiplying:Root([test.in],{})
      --> Distribution: &Multiplying:Root([test.in],{})

-中略-

    <-- Rule Application: &Multiplying:Root([test.in],{})
  <== &Multiplying:Root([test.in],{})
Rehearsal Result: Failed
- test.output doesn't exist.

... doesn't exist.と表示され、想定しているファイルが作成されなかったことが分かります。