ファイルシステム(FS)シェルには、Hadoop分散ファイルシステム(HDFS)や、ローカルFS、WebHDFS、S3 FSなど、Hadoopがサポートするその他のファイルシステムと直接やり取りする、さまざまなシェル風コマンドが含まれています。FSシェルは、以下によって呼び出されます
bin/hadoop fs <args>
すべてのFSシェルコマンドは、引数としてパスURIを取ります。URI形式はscheme://authority/path
です。HDFSの場合、スキームはhdfs
であり、ローカルFSの場合、スキームはfile
です。スキームとオーソリティはオプションです。指定されていない場合、構成で指定されたデフォルトのスキームが使用されます。/parent/childのようなHDFSファイルまたはディレクトリは、hdfs://namenodehost/parent/child
として、または単に/parent/child
(構成がhdfs://namenodehost
を指すように設定されている場合)として指定できます。
FSシェルのほとんどのコマンドは、対応するUnixコマンドのように動作します。違いは各コマンドで説明されています。エラー情報はstderrに送信され、出力はstdoutに送信されます。
HDFSを使用している場合、hdfs dfs
は同義語です。
相対パスを使用できます。HDFSの場合、現在の作業ディレクトリは、手動で作成する必要があることが多いHDFSホームディレクトリ/user/<username>
です。HDFSホームディレクトリは、HDFSのゴミ箱フォルダを使用する場合など、暗黙的にアクセスすることもできます。ホームディレクトリの.Trash
ディレクトリなどです。
一般的なシェルオプションについては、コマンドマニュアルを参照してください。
使用法: hadoop fs -appendToFile <localsrc> ... <dst>
ローカルファイルシステムから、単一のsrcまたは複数のsrcを宛先ファイルシステムに追加します。また、stdinから入力を読み取り、宛先ファイルシステムに追加します。
hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile
stdinから入力を読み取ります。終了コード
成功すると0、エラーが発生すると1を返します。
使用法: hadoop fs -cat [-ignoreCrc] URI [URI ...]
ソースパスをstdoutにコピーします。
オプション
-ignoreCrc
オプションは、チェックサム検証を無効にします。例
hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -cat file:///file3 /user/hadoop/file4
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -checksum [-v] URI
ファイルのチェックサム情報を返します。
オプション
-v
オプションは、ファイルのブロックサイズを表示します。例
hadoop fs -checksum hdfs://nn1.example.com/file1
hadoop fs -checksum file:///etc/hosts
使用法: hadoop fs -chgrp [-R] GROUP URI [URI ...]
ファイルのグループの関連付けを変更します。ユーザーはファイルの所有者であるか、スーパーユーザーである必要があります。詳細については、パーミッションガイドを参照してください。
オプション
使用法: hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
ファイルのパーミッションを変更します。-Rを使用すると、ディレクトリ構造全体で変更が再帰的に行われます。ユーザーはファイルの所有者であるか、スーパーユーザーである必要があります。詳細については、パーミッションガイドを参照してください。
オプション
使用法: hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
ファイルの所有者を変更します。ユーザーはスーパーユーザーである必要があります。詳細については、パーミッションガイドを参照してください。
オプション
-putコマンドと同じです。
-getコマンドと同じです。
使用法: hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths>
指定されたファイルパターンに一致するパスの下にあるディレクトリ、ファイル、およびバイト数をカウントします。クォータと使用状況を取得します。-countを使用した出力列は、次のとおりです。DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME
-uオプションと-qオプションは、出力にどの列が含まれるかを制御します。-qはクォータを表示することを意味し、-uはクォータと使用量のみを表示するように出力を制限します。
-count -qを使用した出力列は、次のとおりです。QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、DIR_COUNT、FILE_COUNT、CONTENT_SIZE、PATHNAME
-count -uを使用した出力列は、次のとおりです。QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA、PATHNAME
-tオプションは、ストレージタイプごとにクォータと使用量を示します。-tオプションは、-uまたは-qオプションが指定されていない場合は無視されます。-tオプションで使用できるパラメーターのリスト(大文字と小文字を区別しない、パラメーター ""を除く): "", "all", "ram_disk", "ssd", "disk" または "archive"。
-hオプションは、サイズを人間が読める形式で表示します。
-vオプションは、ヘッダー行を表示します。
-xオプションは、結果の計算からスナップショットを除外します。-xオプション(デフォルト)がない場合、結果は常に、指定されたパスの下のすべてのスナップショットを含むすべてのINodeから計算されます。-xオプションは、-uまたは-qオプションが指定されている場合は無視されます。
-eオプションは、各ファイルのイレイジャーコーディングポリシーを示します。
-count -eを使用した出力列は、次のとおりです。DIR_COUNT、FILE_COUNT、CONTENT_SIZE、ERASURECODING_POLICY、PATHNAME
ERASURECODING_POLICYは、ファイルのポリシーの名前です。ファイルにイレイジャーコーディングポリシーが設定されている場合、ポリシーの名前が返されます。イレイジャーコーディングポリシーが設定されていない場合は、「Replicated」が返されます。これは、レプリケーションストレージ戦略を使用することを意味します。
-sオプションは、各ディレクトリのスナップショット数を表示します。
例
hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -count -q hdfs://nn1.example.com/file1
hadoop fs -count -q -h hdfs://nn1.example.com/file1
hadoop fs -count -q -h -v hdfs://nn1.example.com/file1
hadoop fs -count -u hdfs://nn1.example.com/file1
hadoop fs -count -u -h hdfs://nn1.example.com/file1
hadoop fs -count -u -h -v hdfs://nn1.example.com/file1
hadoop fs -count -e hdfs://nn1.example.com/file1
hadoop fs -count -s hdfs://nn1.example.com/file1
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -cp [-f] [-p | -p[topax]] [-t <スレッド数>] [-q <スレッドプールキューサイズ>] URI [URI ...] <dest>
ソースから宛先にファイルをコピーします。このコマンドでは、複数のソースを指定することもでき、その場合、宛先はディレクトリである必要があります。
‘raw.*’名前空間の拡張属性は、(1) ソースと宛先のファイルシステムがそれらをサポートしており (HDFSのみ)、(2) すべてのソースと宛先のパス名が /.reserved/raw 階層にある場合に保持されます。raw.*名前空間の拡張属性が保持されるかどうかの判定は、-p (保持) フラグとは独立しています。
オプション
-f
: 宛先が既に存在する場合、上書きします。-d
: 接尾辞 ._COPYING_
を持つ一時ファイルの作成をスキップします。-p
: ファイル属性 [topx](タイムスタンプ、所有権、パーミッション、ACL、XAttr) を保持します。-p が引数なしで指定された場合、タイムスタンプ、所有権、パーミッションを保持します。-pa が指定された場合、ACL はパーミッションのスーパーセットであるため、パーミッションも保持します。raw 名前空間の拡張属性が保持されるかどうかの判定は、-p フラグとは独立しています。-t <スレッド数>
: 使用するスレッド数。デフォルトは1です。複数のファイルを含むディレクトリをコピーする場合に便利です。-q <スレッドプールキューサイズ>
: 使用するスレッドプールキューサイズ。デフォルトは1024です。スレッド数が1より大きい場合にのみ有効です。例
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
hadoop fs -cp -t 5 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
hadoop fs -cp -t 10 -q 2048 /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
終了コード
成功すると0、エラーが発生すると-1を返します。
HDFSスナップショットガイドを参照してください。
HDFSスナップショットガイドを参照してください。
使用法: hadoop fs -df [-h] URI [URI ...]
空き領域を表示します。
オプション
例
hadoop dfs -df /user/hadoop/dir1
使用法: hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]
指定されたディレクトリに含まれるファイルとディレクトリのサイズ、またはファイルの場合はファイルの長さを表示します。
オプション
du は次の形式で3つの列を返します。
size disk_space_consumed_with_all_replicas full_path_name
例
hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1
終了コード: 成功した場合は 0、エラーの場合は -1 を返します。
使用法: hadoop fs -dus <args>
ファイル長のサマリーを表示します。
注: このコマンドは非推奨です。代わりに hadoop fs -du -s
を使用してください。
使用法: hadoop fs -expunge [-immediate] [-fs <path>]
保持期間しきい値よりも古いチェックポイントにあるゴミ箱ディレクトリ内のファイルを完全に削除し、新しいチェックポイントを作成します。
チェックポイントが作成されると、ゴミ箱内の最近削除されたファイルがチェックポイントの下に移動されます。fs.trash.interval
より古いチェックポイント内のファイルは、次に -expunge
コマンドが呼び出されたときに完全に削除されます。
ファイルシステムがこの機能をサポートしている場合、ユーザーは fs.trash.checkpoint.interval
(core-site.xml) として保存されているパラメータによってチェックポイントを定期的に作成および削除するように構成できます。この値は、fs.trash.interval
以下である必要があります。
-immediate
オプションが渡された場合、現在のユーザーのゴミ箱内のすべてのファイルは、fs.trash.interval
設定を無視して即座に削除されます。
-fs
オプションが渡された場合、デフォルトのファイルシステムではなく、指定されたファイルシステムが削除され、チェックポイントが作成されます。
例
hadoop fs -expunge --immediate -fs s3a://landsat-pds/
HDFSのゴミ箱機能の詳細については、HDFSアーキテクチャガイドを参照してください。
使用法: hadoop fs -find <path> ... <expression> ...
指定された式に一致するすべてのファイルを検索し、選択したアクションを適用します。path が指定されていない場合は、デフォルトで現在の作業ディレクトリになります。式が指定されていない場合は、デフォルトで -print になります。
次のプライマリー式が認識されます。
-name pattern
-iname pattern
ファイル名のベース名が標準のファイルシステムグロビングを使用してパターンに一致する場合にtrueと評価されます。-inameが使用されている場合、一致は大文字と小文字を区別しません。
-print
-print0
常にtrueと評価されます。現在のパス名を標準出力に書き込みます。-print0 式が使用されている場合は、ASCII NULL 文字が付加されます。
次の演算子が認識されます。
2つの式を結合するための論理AND演算子。両方の子式がtrueを返す場合にtrueを返します。2つの式の並置によって暗示されるため、明示的に指定する必要はありません。最初の式が失敗した場合、2番目の式は適用されません。
例
hadoop fs -find / -name test -print
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] [-t <スレッド数>] [-q <スレッドプールキューサイズ>] <src> ... <localdst>
ファイルをローカルファイルシステムにコピーします。CRCチェックに失敗したファイルは、-ignorecrcオプションを使用してコピーできます。ファイルとCRCは、-crcオプションを使用してコピーできます。
オプション
-p
: アクセス時間、変更時間、所有権、パーミッションを保持します。(パーミッションがファイルシステム間で伝播できると仮定)-f
: 宛先が既に存在する場合、上書きします。-ignorecrc
: ダウンロードされたファイルのCRCチェックをスキップします。-crc
: ダウンロードされたファイルのCRCチェックサムを書き込みます。-t <スレッド数>
: 使用するスレッド数。デフォルトは1です。複数のファイルを含むディレクトリをダウンロードする場合に便利です。-q <スレッドプールキューサイズ>
: 使用するスレッドプールキューサイズ。デフォルトは1024です。スレッド数が1より大きい場合にのみ有効です。例
hadoop fs -get /user/hadoop/file localfile
hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile
hadoop fs -get -t 10 hdfs://nn.example.com/user/hadoop/dir1 localdir
hadoop fs -get -t 10 -q 2048 hdfs://nn.example.com/user/hadoop/dir* localdir
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -getfacl [-R] <path>
ファイルとディレクトリのアクセス制御リスト (ACL) を表示します。ディレクトリにデフォルトの ACL がある場合、getfacl はデフォルトの ACL も表示します。
オプション
例
hadoop fs -getfacl /file
hadoop fs -getfacl -R /dir
終了コード
成功した場合は0、エラーの場合は0以外の値を返します。
使用法: hadoop fs -getfattr [-R] -n name | -d [-e en] <path>
ファイルまたはディレクトリの拡張属性の名前と値 (存在する場合) を表示します。
オプション
例
hadoop fs -getfattr -d /file
hadoop fs -getfattr -R -n user.myAttr /dir
終了コード
成功した場合は0、エラーの場合は0以外の値を返します。
使用法: hadoop fs -getmerge [-nl] <src> <localdst>
ソースディレクトリと宛先ファイルを入力として受け取り、src内のファイルを宛先ローカルファイルに連結します。オプションで、-nlを設定して、各ファイルの末尾に改行文字 (LF) を追加できます。-skip-empty-fileを使用すると、空のファイルの場合に不要な改行文字を回避できます。
例
hadoop fs -getmerge -nl /src /opt/output.txt
hadoop fs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt
終了コード
成功した場合は0、エラーの場合は0以外の値を返します。
使用法: hadoop fs -head URI
ファイルの最初のキロバイトをstdoutに表示します。
例
hadoop fs -head pathname
終了コード: 成功した場合は 0、エラーの場合は -1 を返します。
使用法: hadoop fs -help
使用方法の出力を返します。
使用法: hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>
オプション
ファイルの場合、lsは次の形式でファイルの状態を返します。
permissions number_of_replicas userid groupid filesize modification_date modification_time filename
ディレクトリの場合、Unixのように直接の子のリストを返します。ディレクトリは次のようにリストされます。
permissions userid groupid modification_date modification_time dirname
ディレクトリ内のファイルは、デフォルトではファイル名で順序付けされます。
例
hadoop fs -ls /user/hadoop/file1
hadoop fs -ls -e /ecdir
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -lsr <args>
lsの再帰バージョン。
注: このコマンドは非推奨です。代わりに hadoop fs -ls -R
を使用してください。
使用法: hadoop fs -mkdir [-p] <paths>
パス URI を引数として受け取り、ディレクトリを作成します。
オプション
例
hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
hadoop fs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dir
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -moveFromLocal <localsrc> <dst>
putコマンドに似ていますが、コピー後にソースのlocalsrcが削除される点が異なります。
使用法: hadoop fs -moveToLocal [-crc] <src> <dst>
「まだ実装されていません」というメッセージを表示します。
使用法: hadoop fs -mv URI [URI ...] <dest>
ファイルをソースから宛先に移動します。このコマンドでは複数のソースを指定することもできます。その場合、宛先はディレクトリである必要があります。ファイルシステムをまたがるファイルの移動は許可されていません。
例
hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -put [-f] [-p] [-l] [-d] [-t <スレッド数>] [-q <スレッドプールキューサイズ>] [ - | <ローカルソース> ...] <宛先>
ローカルファイルシステムから宛先ファイルシステムへ、単一のソースまたは複数のソースをコピーします。ソースが "-" に設定されている場合は、標準入力から入力を読み取り、宛先ファイルシステムに書き込みます。
ファイルが既に存在する場合、-f フラグが指定されていない限り、コピーは失敗します。
オプション
-p
: アクセス時間、変更時間、所有権、パーミッションを保持します。(パーミッションがファイルシステム間で伝播できると仮定)-f
: 宛先が既に存在する場合、上書きします。-l
: DataNode がファイルをディスクに遅延永続化できるようにします。レプリケーションファクターを 1 に強制します。このフラグを使用すると耐久性が低下します。注意して使用してください。-d
: 接尾辞 ._COPYING_
を持つ一時ファイルの作成をスキップします。-t <スレッド数>
: 使用するスレッド数。デフォルトは 1 です。複数のファイルを含むディレクトリをアップロードする場合に便利です。-q <スレッドプールキューサイズ>
: 使用するスレッドプールキューサイズ。デフォルトは1024です。スレッド数が1より大きい場合にのみ有効です。例
hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put -d localfile hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile
標準入力から入力を読み込みます。hadoop fs -put -t 5 localdir hdfs://nn.example.com/hadoop/hadoopdir
hadoop fs -put -t 10 -q 2048 localdir1 localdir2 hdfs://nn.example.com/hadoop/hadoopdir
終了コード
成功すると0、エラーが発生すると-1を返します。
HDFSスナップショットガイドを参照してください。
使用法: hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
引数で指定されたファイルを削除します。
ごみ箱が有効な場合、ファイルシステムは削除されたファイルをごみ箱ディレクトリ(FileSystem#getTrashRoot で指定)に移動します。
現在、ごみ箱機能はデフォルトで無効になっています。ユーザーは、パラメータ fs.trash.interval
(core-site.xml 内) にゼロより大きい値を設定することで、ごみ箱を有効にできます。
ごみ箱内のファイルの削除については、expunge を参照してください。
オプション
hadoop.shell.delete.limit.num.files
(core-site.xml 内、デフォルト: 100) より大きいディレクトリを削除する前に、安全確認を要求します。大規模なディレクトリを誤って削除するのを防ぐために、-skipTrash と組み合わせて使用できます。確認前に削除されるファイルの数を数えるために、大規模なディレクトリを再帰的に走査する際に遅延が発生することが予想されます。例
hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
ディレクトリを削除します。
オプション
--ignore-fail-on-non-empty
: ワイルドカードを使用する場合、ディレクトリにまだファイルが含まれていても失敗しません。例
hadoop fs -rmdir /user/hadoop/emptydir
使用法: hadoop fs -rmr [-skipTrash] URI [URI ...]
再帰的な削除のバージョン。
注: このコマンドは非推奨です。代わりに hadoop fs -rm -r
を使用してください。
使用法: hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <パス>] |[--set <acl_spec> <パス>]
ファイルとディレクトリのアクセス制御リスト(ACL)を設定します。
オプション
--set
: ACL を完全に置き換え、既存のすべてのエントリを破棄します。acl_spec には、パーミッションビットとの互換性のために、ユーザー、グループ、その他のエントリを含める必要があります。ACL 仕様にアクセスエントリのみが含まれている場合、既存のデフォルトエントリは保持されます。ACL 仕様にデフォルトエントリのみが含まれている場合、既存のアクセスエントリは保持されます。ACL 仕様にアクセスエントリとデフォルトエントリの両方が含まれている場合、両方が置き換えられます。例
hadoop fs -setfacl -m user:hadoop:rw- /file
hadoop fs -setfacl -x user:hadoop /file
hadoop fs -setfacl -b /file
hadoop fs -setfacl -k /dir
hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file
hadoop fs -setfacl -R -m user:hadoop:r-x /dir
hadoop fs -setfacl -m default:user:hadoop:r-x /dir
終了コード
成功した場合は0、エラーの場合は0以外の値を返します。
使用法: hadoop fs -setfattr -n name [-v value] | -x name <パス>
ファイルまたはディレクトリの拡張属性の名前と値を設定します。
オプション
例
hadoop fs -setfattr -n user.myAttr -v myValue /file
hadoop fs -setfattr -n user.noValue /file
hadoop fs -setfattr -x user.myAttr /file
終了コード
成功した場合は0、エラーの場合は0以外の値を返します。
使用法: hadoop fs -setrep [-R] [-w] <numReplicas> <パス>
ファイルのレプリケーションファクターを変更します。パス がディレクトリの場合、コマンドは パス をルートとするディレクトリツリー下のすべてのファイルのレプリケーションファクターを再帰的に変更します。このコマンドを実行する際、EC ファイルは無視されます。
オプション
例
hadoop fs -setrep -w 3 /user/hadoop/dir1
終了コード
成功すると0、エラーが発生すると-1を返します。
使用法: hadoop fs -stat [format] <パス> ...
指定された形式で <パス> のファイル/ディレクトリに関する統計情報を出力します。形式は、8進数でのパーミッション (%a) と記号でのパーミッション (%A)、ファイルサイズ(バイト単位)(%b)、タイプ (%F)、所有者のグループ名 (%g)、名前 (%n)、ブロックサイズ (%o)、レプリケーション (%r)、所有者のユーザー名 (%u)、アクセス日 (%x, %X)、変更日 (%y, %Y) を受け入れます。%x と %y は UTC 日付を "yyyy-MM-dd HH:mm:ss" として表示し、%X と %Y は 1970 年 1 月 1 日 UTC からのミリ秒数を表示します。形式が指定されていない場合、デフォルトでは %y が使用されます。
例
hadoop fs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file
終了コード: 成功した場合は 0、エラーの場合は -1 を返します。
使用法: hadoop fs -tail [-f] URI
ファイルの最後のキロバイトを stdout に表示します。
オプション
例
hadoop fs -tail pathname
終了コード: 成功した場合は 0、エラーの場合は -1 を返します。
使用法: hadoop fs -test -[defswrz] URI
オプション
例
hadoop fs -test -e filename
使用法: hadoop fs -text <ソース>
ソースファイルを受け取り、テキスト形式でファイルを出力します。許可される形式は、zip と TextRecordInputStream です。
使用法: hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]
URI で指定されたファイルのアクセス時刻と変更時刻を現在時刻に更新します。ファイルが存在しない場合は、URI に長さ 0 のファイルが作成され、その URI のタイムスタンプとして現在時刻が設定されます。
タイムスタンプ形式は次のとおりです。* yyyy 4 桁の年 (例: 2018) * MM 年の 2 桁の月 (例: 8 月の場合は 08) * dd 月の 2 桁の日 (例: 月の最初の日の場合は 01) * HH 24 時間表記を使用した、1 日の 2 桁の時間 (例: 23 は午後 11 時、11 は午前 11 時を表します) * mm 時間の 2 桁の分 * ss 分の 2 桁の秒。例: 20180809:230000 は 2018 年 8 月 9 日の午後 11 時を表します。
例
hadoop fs -touch pathname
hadoop fs -touch -m -t 20180809:230000 pathname
hadoop fs -touch -t 20180809:230000 pathname
hadoop fs -touch -a pathname
終了コード: 成功した場合は 0、エラーの場合は -1 を返します。
使用法: hadoop fs -touchz URI [URI ...]
長さが 0 のファイルを作成します。ファイルがゼロ以外の長さで存在する場合は、エラーが返されます。
例
hadoop fs -touchz pathname
終了コード: 成功した場合は 0、エラーの場合は -1 を返します。
使用法: hadoop fs -truncate [-w] <長さ> <パス>
指定されたファイルパターンに一致するすべてのファイルを、指定された長さに切り捨てます。
オプション
例
hadoop fs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
hadoop fs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1
使用法: hadoop fs -concat <ターゲットファイル> <ソースファイル>
既存のソースファイルをターゲットファイルに連結します。ターゲットファイルとソースファイルは同じディレクトリにある必要があります。
例
hadoop fs -concat hdfs://cluster/user/hadoop/target-file hdfs://cluster/user/hadoop/file-0 hdfs://cluster/user/hadoop/file-1
使用法: hadoop fs -usage command
個々のコマンドのヘルプを返します。
Hadoop FileSystem シェルは、Amazon S3、Azure ABFS、Google GCS などのオブジェクトストアで動作します。
# Create a directory hadoop fs -mkdir s3a://bucket/datasets/ # Upload a file from the cluster filesystem hadoop fs -put /datasets/example.orc s3a://bucket/datasets/ # touch a file hadoop fs -touchz wasb://yourcontainer@youraccount.blob.core.windows.net/touched
通常のファイルシステムとは異なり、オブジェクトストアでのファイルとディレクトリの名前変更は、通常、操作されるオブジェクトのサイズに比例した時間がかかります。ファイルシステムのシェル操作の多くは、操作の最終段階として名前変更を使用するため、その段階をスキップすることで長い遅延を回避できます。
特に、put
および copyFromLocal
コマンドは、直接アップロードのために -d
オプションを設定する必要があります。
# Upload a file from the cluster filesystem hadoop fs -put -d /datasets/example.orc s3a://bucket/datasets/ # Upload a file from under the user's home directory in the local filesystem. # Note it is the shell expanding the "~", not the hadoop fs command hadoop fs -copyFromLocal -d -f ~/datasets/devices.orc s3a://bucket/datasets/ # create a file from stdin # the special "-" source means "use stdin" echo "hello" | hadoop fs -put -d -f - wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt
オブジェクトはダウンロードおよび表示できます。
# copy a directory to the local filesystem hadoop fs -copyToLocal s3a://bucket/datasets/ # copy a file from the object store to the cluster filesystem. hadoop fs -get wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt /examples # print the object hadoop fs -cat wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt # print the object, unzipping it if necessary hadoop fs -text wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt ## download log files into a local file hadoop fs -getmerge wasb://yourcontainer@youraccount.blob.core.windows.net/logs\* log.txt
多くのファイルをリストするコマンドは、HDFS や他のファイルシステムを操作する場合と比較して、大幅に遅くなる傾向があります。
hadoop fs -count s3a://bucket/ hadoop fs -du s3a://bucket/
その他の遅いコマンドには、find
、mv
、cp
、および rm
があります。
検索
これは、指定されたパスの下に多くのディレクトリがある大規模なストアでは非常に遅くなる可能性があります。
# enumerate all files in the object store's container. hadoop fs -find s3a://bucket/ -print # remember to escape the wildcards to stop the shell trying to expand them first hadoop fs -find s3a://bucket/datasets/ -name \*.txt -print
名前変更
ファイルの名前を変更する時間は、そのサイズによって異なります。
ディレクトリの名前を変更する時間は、そのディレクトリの下にあるすべてのファイルの数とサイズによって異なります。
hadoop fs -mv s3a://bucket/datasets s3a://bucket/historical
操作が中断された場合、オブジェクトストアは未定義の状態になります。
コピー
hadoop fs -cp s3a://bucket/datasets s3a://bucket/historical
コピー操作は、各ファイルを読み取り、オブジェクトストアに書き戻します。完了までの時間は、コピーするデータの量と、ローカルコンピュータとオブジェクトストア間の双方向の帯域幅によって異なります。
コンピュータがオブジェクトストアから遠いほど、コピーにかかる時間が長くなります。
rm
コマンドは、オブジェクトとオブジェクトでいっぱいのディレクトリを削除します。オブジェクトストアが最終的に整合性を持つ場合、fs ls
コマンドやその他のアクセサーは、削除されたオブジェクトの詳細を一時的に返す可能性があります。これは、回避できないオブジェクトストアのアーティファクトです。
ファイルシステムクライアントがファイルをゴミ箱ディレクトリにコピーするように構成されている場合、これはバケット内に存在します。rm
操作には、データのサイズに比例した時間がかかります。さらに、削除されたファイルは引き続きストレージコストが発生します。
これを回避するには、-skipTrash
オプションを使用します。
hadoop fs -rm -skipTrash s3a://bucket/dataset
.Trash
ディレクトリに移動されたデータは、expunge
コマンドを使用してパージできます。このコマンドはデフォルトのファイルシステムでのみ機能するため、デフォルトのファイルシステムをターゲットオブジェクトストアとして設定する必要があります。
hadoop fs -expunge -D fs.defaultFS=s3a://bucket/
オブジェクトストアが最終的に整合性を持つ場合、既存のオブジェクトを上書きする操作は、すべてのクライアント/クエリですぐに表示されない可能性があります。つまり、同じオブジェクトのステータスまたはコンテンツをクエリする後の操作で、以前のオブジェクトが取得される可能性があります。これは、単一のオブジェクトを読み取っている間に、同じクライアント内で発生することがあります。
オブジェクトを上書きしてから、すぐに更新されたデータで作業する一連のコマンドを使用することは避けてください。代わりに、以前のデータが使用されるリスクがあります。
オブジェクトストア内のオブジェクトおよびディレクトリのタイムスタンプは、HDFS 内のファイルおよびディレクトリの動作に従わない場合があります。
atime
アクセス時間機能は、Apache Hadoop コードベースにあるどのオブジェクトストアでもサポートされていません。これが distcp -update
操作にどのように影響するかについての詳細は、DistCp
のドキュメントを参照してください。
オブジェクトストアのセキュリティおよびアクセス許可モデルは、通常、Unix スタイルのファイルシステムのセキュリティおよびアクセス許可モデルとは大きく異なります。アクセス許可をクエリまたは操作する操作は、一般的にサポートされていません。
これが適用される操作には、chgrp
、chmod
、chown
、getfacl
、および setfacl
が含まれます。関連する属性コマンドである getfattr
および setfattr
も通常は使用できません。
アクセス許可とユーザー/グループの詳細をリストするファイルシステムコマンドは、通常、これらの詳細をシミュレートします。
アクセス許可を保持しようとする操作 (例: fs -put -p
) は、この理由によりアクセス許可を保持しません。(特殊なケース: wasb://
。これはアクセス許可を保持しますが、強制しません)。
読み取り専用のオブジェクトストアと対話する場合、「list」コマンドおよび「stat」コマンドで見つかったアクセス許可は、実際には書き込みアクセス権がない場合でも、ユーザーに書き込みアクセス権があることを示す場合があります。
オブジェクトストアには通常、独自のアクセス許可モデルがあり、モデルはストア固有のツールを使用して操作できます。オブジェクトストアが提供する可能性のあるアクセス許可 (書き込み専用パスや、ルートパスに対する異なるアクセス許可など) の一部が、Hadoop ファイルシステムクライアントと互換性がない可能性があることに注意してください。これらは、データを書き込むオブジェクトストアのバケット/コンテナー全体に対する完全な読み取りおよび書き込みアクセス権を必要とする傾向があります。
アクセス許可がどのように模倣されるかの例として、Amazon の Landsat イメージのパブリック、読み取り専用バケットのリストを次に示します。
$ hadoop fs -ls s3a://landsat-pds/ Found 10 items drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/L8 -rw-rw-rw- 1 mapred 23764 2015-01-28 18:13 s3a://landsat-pds/index.html drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/landsat-pds_stats -rw-rw-rw- 1 mapred 105 2016-08-19 18:12 s3a://landsat-pds/robots.txt -rw-rw-rw- 1 mapred 38 2016-09-26 12:16 s3a://landsat-pds/run_info.json drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/runs -rw-rw-rw- 1 mapred 27458808 2016-09-26 12:16 s3a://landsat-pds/scene_list.gz drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/tarq drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/tarq_corrupt drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/test
rwx
アクセス許可を持っているように見えます。mapred
) であると宣言されています。-ls
操作が実行された時刻です。これは、これらのディレクトリがストア内の実際のオブジェクトではないためです。それらは、パスの下にオブジェクトが存在することに基づいてシミュレートされたディレクトリです。ファイルの1つを削除しようとすると、ls
コマンドで示されたアクセス許可にもかかわらず、操作は失敗します。
$ hadoop fs -rm s3a://landsat-pds/scene_list.gz rm: s3a://landsat-pds/scene_list.gz: delete on s3a://landsat-pds/scene_list.gz: com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 1EF98D5957BCAB3D), S3 Extended Request ID: wi3veOXFuFqWBUCJgV3Z+NQVj9gWgZVdXlPU4KBbYMsw/gA+hyhRXcaQ+PogOsDgHh31HlTCebQ=
これは、リストされたアクセス許可を書き込みアクセス権の証拠として受け取ることができないことを示しています。オブジェクトの操作でのみ、これを判断できます。
Microsoft Azure WASB ファイルシステムでは、アクセス許可の設定とチェックが可能ですが、アクセス許可は実際には強制されないことに注意してください。この機能は、DistCp を使用して HDFS ディレクトリツリーをバックアップし、アクセス許可を保持し、ディレクトリを HDFS にコピーして戻すときにアクセス許可を復元する機能を提供します。ただし、オブジェクトストア内のデータへのアクセスを保護するためには、Azure の独自のモデルとツールを使用する必要があります。
一般的に効果がなく、実際には失敗する可能性のあるシェルコマンドのリストを次に示します。
コマンド | 制限 |
---|---|
appendToFile |
一般的にサポートされていません |
checksum |
通常のチェックサムは「NONE」です |
chgrp |
一般的にサポートされていないアクセス許可モデル。no-op |
chmod |
一般的にサポートされていないアクセス許可モデル。no-op |
chown |
一般的にサポートされていないアクセス許可モデル。no-op |
createSnapshot |
一般的にサポートされていません |
deleteSnapshot |
一般的にサポートされていません |
df |
通常、デフォルト値が表示されます |
getfacl |
サポートされている場合とサポートされていない場合があります |
getfattr |
一般的にサポートされています |
renameSnapshot |
一般的にサポートされていません |
setfacl |
一般的にサポートされていないアクセス許可モデル |
setfattr |
一般的にサポートされていないアクセス許可モデル |
setrep |
効果がありません |
truncate |
一般的にサポートされていません |
concat |
一般的にサポートされていません |
異なるオブジェクトストアクライアントはこれらのコマンドをサポートしている場合があります。ドキュメントを参照し、ターゲットストアに対してテストしてください。