Direct I/O コマンドラインツールユーザーガイド¶
このドキュメントでは、Direct I/Oに関するコマンドラインツールの利用方法について紹介します。
ツールの配置と設定¶
Direct I/Oに関するコマンドラインツールは $ASAKUSA_HOME/directio/bin
ディレクトリ内に格納されています。
また、いずれのツールもAsakusa FrameworkのDirect I/Oに関する設定情報を利用します。
これらの設定方法については Direct I/O ユーザーガイド を参照してください。
いずれのツールも hadoop コマンドを経由して実行するため、環境にHadoopがインストールされている必要があります。 また、Hadoopのインストール先を通知するために、以下の環境変数のいずれかが必要です。
HADOOP_CMD
- hadoop コマンドのパス
HADOOP_HOME
- Hadoop のインストール先
PATH
- hadoop コマンドが通っているパス
ツール固有の環境変数の設定¶
ここで説明するコマンドラインツールは、実行前に $ASAKUSA_HOME/directio/conf/env.sh
を読み込んで必要な環境変数の設定などを行います。
以下は同ファイルの内容を改変し、環境変数 HADOOP_CMD
を設定する例です。
export HADOOP_CMD=/usr/bin/hadoop
ファイル操作¶
ファイル操作を行うコマンドは、Direct I/Oのベースパスやファイルパターンを利用して、実際のデータソース内のファイルに対して処理を行います。
ファイルのリストアップ¶
$ASAKUSA_HOME/directio/bin/list-file.sh コマンドを利用すると、Direct I/Oのパスを使ってデータソース上のファイルやディレクトリ一覧をリストアップできます。
以下の形式で指定します。
list-file.sh <base-path> <resource-pattern> [<resource-pattern> [...]]
コマンドに指定可能な引数は以下のとおりです。
-
-h
,
-help
¶
ヘルプメッセージを表示して終了します。
-
base-path
¶
対象ファイルのベースパスを指定します。
ベースパスは利用するデータソースを検出するためのパスで、多くの場合にはデータソースを配置したパスを指定します。 ここに指定するパスは、DSLの入出力定義において
getBasePath()
メソッドで定義したものを指定できます。
-
resource-pattern
¶
対象ファイルのベースパスからの相対パスを指定します。
ここには
*
(ワイルドカード)などのメタ文字も指定できます。 詳しくは ファイル名のパターン を参照してください。
Hint
パスにディレクトリを指定した場合に、ディレクトリの内容の表示が行われるわけではありません。
ディレクトリの内容を表示したい場合、 <resource-pattern>
の末尾に /*
と指定してください。
利用例¶
ルートパス配下のすべてのディレクトリ/ファイルを出力する
list-file.sh / "**/*"
ベースパス
result
配下の拡張子.csv
を持つファイルをサブディレクトリ含めてすべて出力するlist-file.sh result "**/*.csv"
ファイルの削除¶
$ASAKUSA_HOME/directio/bin/delete-file.sh コマンドを利用すると、Direct I/Oのパスを使ってデータソース上のファイルを削除できます。
以下の形式で指定します。
delete-file.sh [-r] <base-path> <resource-pattern> [<resource-pattern> [...]]
コマンドに指定可能な引数は以下のとおりです。
-
-h
,
-help
¶
ヘルプメッセージを表示して終了します。
-
-r
,
-recursive
¶
ファイルだけでなくディレクトリとその内容も削除します。
この指定がない場合、ディレクトリの削除は行いません。
-
base-path
¶
対象ファイルのベースパスを指定します。
ベースパスは利用するデータソースを検出するためのパスで、多くの場合にはデータソースを配置したパスを指定します。 ここに指定するパスは、DSLの入出力定義において
getBasePath()
メソッドで定義したものを指定できます。
-
resource-pattern
¶
対象ファイルのベースパスからの相対パスを指定します。
ここには
*
(ワイルドカード)などのメタ文字も指定できます。 詳しくは ファイル名のパターン を参照してください。
ファイル名のパターン¶
それぞれのコマンドの <resource-pattern>
にはファイル名だけでなくワイルドカードなどのパターン用の文字列も利用できます。
ここに利用できるパターンは以下の通りです。
文字列 | 名前 | 概要 |
---|---|---|
名前文字 | リテラル | そのままファイル名として利用します。
対象のデータソースが利用できるファイル名のうち、
/ , \ , $ , * , ? , # , | , { , } , [ , ] 以外の文字を利用できます。 |
/ |
名前区切り | パスに含まれる名前の区切り文字です。 |
* |
ワイルドカード | 0個以上の任意の名前文字とマッチします。 |
{..|..|..} |
選択 | | で区切られたいずれかの名前にマッチします。
.. の部分には名前文字と名前区切りの組み合わせのみを指定できます。 |
上記のほかに、特別なディレクトリやファイル名として **
を利用できます。
これは、検索対象以下のすべてのサブディレクトリ(自身のディレクトリも含む)とそれに含まれるファイルにマッチします。
ただし、 **
はディレクトリやファイル名の一部としては利用できません。
たとえば、 **.csv
というパターンは利用できず、代わりに **/*.csv
と書きます。
Attention
利用しているシェルによっては、ファイル名のパターンに *
文字が含まれていた場合に自動的に展開されてしまいます。
展開を回避するには、 "*"
のようにダブルクウォート文字で囲むなどの指定を行なってください。
トランザクション操作¶
トランザクション操作を行うコマンドは、Direct I/Oを利用した際のトランザクション処理を直接制御できます。
トランザクション制御については Direct I/O ユーザーガイド を参照してください。
トランザクションのリストアップ¶
$ASAKUSA_HOME/directio/bin/list-transaction.sh コマンドを利用すると、Direct I/Oで実行中や実行に失敗したトランザクションの一覧を表示します。
以下の形式で指定します。
list-transaction.sh
コマンドには引数を指定せずに実行します。
このコマンドを実行すると、以下の情報を表示します。
セクション | 内容 |
---|---|
Date |
トランザクションを開始した日時 |
Execution ID |
対象のジョブフローの実行ID |
Status |
トランザクションの状態 |
Comments |
補助的な情報 |
コミットの適用¶
$ASAKUSA_HOME/directio/bin/apply-transaction.sh コマンドを利用すると、Direct I/Oでコミットに成功した未適用のトランザクションを、最後まで適用します。 この操作によって、in-doubt状態になっているトランザクションを適切に終了させられます。
以下の形式で指定します。
apply-transaction.sh <execution-id>
コマンドに指定可能な引数は以下のとおりです。
-
execution-id
¶
対象のジョブフローの実行ID
上記の実行IDを確認するには、 トランザクションのリストアップ を実行し、 Execution ID
の項目を参照してください。
また、同時に表示される Status
の項目が Committed
となっているもののみを、このコマンドで処理できます。
Status
の項目が Committed
でない場合、このコマンドを実行しても処理は行われません。
コミットの破棄¶
$ASAKUSA_HOME/directio/bin/abort-transaction.sh コマンドを利用すると、Direct I/Oで行われた任意のトランザクションを破棄できます。
以下の形式で指定します。
abort-transaction.sh <execution-id>
コマンドに指定可能な引数は以下のとおりです。
-
execution-id
¶
対象のジョブフローの実行ID
上記の実行IDを確認するには、 トランザクションのリストアップ を実行し、 Execution ID
の項目を参照してください。
Status
の項が Committed
, NOT Committed
のいずれの場合でも途中結果を強制的に破棄します。
Warning
Status
の項目が Committed
になってるトランザクションに対してこのコマンドを実行すると、処理結果が中途半端にデータソース上に反映されたまま復元できなくなる場合があります。
そのようなトランザクションには通常 コミットの適用 を行うべきですが、コミットの内容が不要になった場合や、コミットの内容がエラーによりどうやっても適用できない場合などには、上記のコマンドも利用できます。
Hint
Status
の項目が NOT Committed
である場合、コミットの破棄はほぼロールバック操作と同様になります。
ただし、Direct I/Oの出力時に「ステージ領域の省略」を行っていた場合には、途中結果が出力先に一部反映されている可能性があります。