概要

ファイルシステム(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ディレクトリなどです。

一般的なシェルオプションについては、コマンドマニュアルを参照してください。

appendToFile

使用法: 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を返します。

cat

使用法: 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を返します。

checksum

使用法: hadoop fs -checksum [-v] URI

ファイルのチェックサム情報を返します。

オプション

  • -vオプションは、ファイルのブロックサイズを表示します。

  • hadoop fs -checksum hdfs://nn1.example.com/file1
  • hadoop fs -checksum file:///etc/hosts

chgrp

使用法: hadoop fs -chgrp [-R] GROUP URI [URI ...]

ファイルのグループの関連付けを変更します。ユーザーはファイルの所有者であるか、スーパーユーザーである必要があります。詳細については、パーミッションガイドを参照してください。

オプション

  • -Rオプションは、ディレクトリ構造全体で変更を再帰的に行います。

chmod

使用法: hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]

ファイルのパーミッションを変更します。-Rを使用すると、ディレクトリ構造全体で変更が再帰的に行われます。ユーザーはファイルの所有者であるか、スーパーユーザーである必要があります。詳細については、パーミッションガイドを参照してください。

オプション

  • -Rオプションは、ディレクトリ構造全体で変更を再帰的に行います。

chown

使用法: hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

ファイルの所有者を変更します。ユーザーはスーパーユーザーである必要があります。詳細については、パーミッションガイドを参照してください。

オプション

  • -Rオプションは、ディレクトリ構造全体で変更を再帰的に行います。

copyFromLocal

-putコマンドと同じです。

copyToLocal

-getコマンドと同じです。

count

使用法: 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を返します。

cp

使用法: 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を返します。

createSnapshot

HDFSスナップショットガイドを参照してください。

deleteSnapshot

HDFSスナップショットガイドを参照してください。

df

使用法: hadoop fs -df [-h] URI [URI ...]

空き領域を表示します。

オプション

  • -h オプションは、ファイルサイズを「人間が読める」形式 (例: 67108864の代わりに64.0m) でフォーマットします。

  • hadoop dfs -df /user/hadoop/dir1

du

使用法: hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]

指定されたディレクトリに含まれるファイルとディレクトリのサイズ、またはファイルの場合はファイルの長さを表示します。

オプション

  • -s オプションを指定すると、個々のファイルではなく、ファイル長の集計サマリーが表示されます。-s オプションがない場合、計算は指定されたパスから1レベル深く行われます。
  • -h オプションは、ファイルサイズを「人間が読める」形式 (例: 67108864の代わりに64.0m) でフォーマットします。
  • -v オプションを指定すると、ヘッダー行として列の名前が表示されます。
  • -x オプションを指定すると、結果の計算からスナップショットが除外されます。-x オプション (デフォルト) を指定しない場合、結果は常に指定されたパスの下にあるすべてのスナップショットを含むすべての INode から計算されます。

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 を返します。

dus

使用法: hadoop fs -dus <args>

ファイル長のサマリーを表示します。

注: このコマンドは非推奨です。代わりに hadoop fs -du -s を使用してください。

expunge

使用法: 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アーキテクチャガイドを参照してください。

find

使用法: hadoop fs -find <path> ... <expression> ...

指定された式に一致するすべてのファイルを検索し、選択したアクションを適用します。path が指定されていない場合は、デフォルトで現在の作業ディレクトリになります。式が指定されていない場合は、デフォルトで -print になります。

次のプライマリー式が認識されます。

  • -name pattern
    -iname pattern

    ファイル名のベース名が標準のファイルシステムグロビングを使用してパターンに一致する場合にtrueと評価されます。-inameが使用されている場合、一致は大文字と小文字を区別しません。

  • -print
    -print0

    常にtrueと評価されます。現在のパス名を標準出力に書き込みます。-print0 式が使用されている場合は、ASCII NULL 文字が付加されます。

次の演算子が認識されます。

  • expression -a expression
    expression -and expression
    expression expression

    2つの式を結合するための論理AND演算子。両方の子式がtrueを返す場合にtrueを返します。2つの式の並置によって暗示されるため、明示的に指定する必要はありません。最初の式が失敗した場合、2番目の式は適用されません。

hadoop fs -find / -name test -print

終了コード

成功すると0、エラーが発生すると-1を返します。

get

使用法: 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を返します。

getfacl

使用法: hadoop fs -getfacl [-R] <path>

ファイルとディレクトリのアクセス制御リスト (ACL) を表示します。ディレクトリにデフォルトの ACL がある場合、getfacl はデフォルトの ACL も表示します。

オプション

  • -R: すべてのファイルとディレクトリのACLを再帰的にリストします。
  • path: リストするファイルまたはディレクトリ。

  • hadoop fs -getfacl /file
  • hadoop fs -getfacl -R /dir

終了コード

成功した場合は0、エラーの場合は0以外の値を返します。

getfattr

使用法: hadoop fs -getfattr [-R] -n name | -d [-e en] <path>

ファイルまたはディレクトリの拡張属性の名前と値 (存在する場合) を表示します。

オプション

  • -R: すべてのファイルとディレクトリの属性を再帰的にリストします。
  • -n name: 名前付きの拡張属性値をダンプします。
  • -d: パス名に関連付けられたすべての拡張属性値をダンプします。
  • -e encoding: 値を取得した後、エンコードします。有効なエンコードは "text"、"hex"、"base64" です。テキスト文字列としてエンコードされた値は二重引用符 (") で囲まれ、16進数およびbase64としてエンコードされた値は、それぞれ0xと0sで始まります。
  • path: ファイルまたはディレクトリ。

  • hadoop fs -getfattr -d /file
  • hadoop fs -getfattr -R -n user.myAttr /dir

終了コード

成功した場合は0、エラーの場合は0以外の値を返します。

getmerge

使用法: 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以外の値を返します。

head

使用法: hadoop fs -head URI

ファイルの最初のキロバイトをstdoutに表示します。

  • hadoop fs -head pathname

終了コード: 成功した場合は 0、エラーの場合は -1 を返します。

help

使用法: hadoop fs -help

使用方法の出力を返します。

ls

使用法: hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>

オプション

  • -C: ファイルとディレクトリのパスのみを表示します。
  • -d: ディレクトリをプレーンファイルとしてリストします。
  • -h: ファイルサイズを人間が読みやすい形式 (例: 67108864の代わりに64.0m) でフォーマットします。
  • -q: 印刷できない文字の代わりに? を出力します。
  • -R: 検出されたサブディレクトリを再帰的にリストします。
  • -t: 変更時間で出力(最新が最初)をソートします。
  • -S: ファイルサイズで出力をソートします。
  • -r: ソート順を逆にします。
  • -u: 表示とソートに、変更時間ではなくアクセス時間を使用します。
  • -e: ファイルとディレクトリのイレージャーコーディングポリシーのみを表示します。

ファイルの場合、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を返します。

lsr

使用法: hadoop fs -lsr <args>

lsの再帰バージョン。

注: このコマンドは非推奨です。代わりに hadoop fs -ls -R を使用してください。

mkdir

使用法: hadoop fs -mkdir [-p] <paths>

パス URI を引数として受け取り、ディレクトリを作成します。

オプション

  • -p オプションの動作は、Unix の mkdir -p に似ており、パスに沿って親ディレクトリを作成します。

  • 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を返します。

moveFromLocal

使用法: hadoop fs -moveFromLocal <localsrc> <dst>

putコマンドに似ていますが、コピー後にソースのlocalsrcが削除される点が異なります。

moveToLocal

使用法: hadoop fs -moveToLocal [-crc] <src> <dst>

「まだ実装されていません」というメッセージを表示します。

mv

使用法: 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を返します。

put

使用法: 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を返します。

renameSnapshot

HDFSスナップショットガイドを参照してください。

rm

使用法: hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]

引数で指定されたファイルを削除します。

ごみ箱が有効な場合、ファイルシステムは削除されたファイルをごみ箱ディレクトリ(FileSystem#getTrashRoot で指定)に移動します。

現在、ごみ箱機能はデフォルトで無効になっています。ユーザーは、パラメータ fs.trash.interval (core-site.xml 内) にゼロより大きい値を設定することで、ごみ箱を有効にできます。

ごみ箱内のファイルの削除については、expunge を参照してください。

オプション

  • -f オプションは、ファイルが存在しない場合に、診断メッセージを表示したり、エラーを反映するように終了ステータスを変更したりしません。
  • -R オプションは、ディレクトリとその下のすべてのコンテンツを再帰的に削除します。
  • -r オプションは -R と同等です。
  • -skipTrash オプションは、ごみ箱が有効な場合でもごみ箱をバイパスし、指定されたファイルをすぐに削除します。これは、クォータを超過したディレクトリからファイルを削除する必要がある場合に役立ちます。
  • -safely オプションは、ファイルの合計数が hadoop.shell.delete.limit.num.files (core-site.xml 内、デフォルト: 100) より大きいディレクトリを削除する前に、安全確認を要求します。大規模なディレクトリを誤って削除するのを防ぐために、-skipTrash と組み合わせて使用できます。確認前に削除されるファイルの数を数えるために、大規模なディレクトリを再帰的に走査する際に遅延が発生することが予想されます。

  • hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir

終了コード

成功すると0、エラーが発生すると-1を返します。

rmdir

使用法: hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]

ディレクトリを削除します。

オプション

  • --ignore-fail-on-non-empty: ワイルドカードを使用する場合、ディレクトリにまだファイルが含まれていても失敗しません。

  • hadoop fs -rmdir /user/hadoop/emptydir

rmr

使用法: hadoop fs -rmr [-skipTrash] URI [URI ...]

再帰的な削除のバージョン。

注: このコマンドは非推奨です。代わりに hadoop fs -rm -r を使用してください。

setfacl

使用法: hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <パス>] |[--set <acl_spec> <パス>]

ファイルとディレクトリのアクセス制御リスト(ACL)を設定します。

オプション

  • -b: 基本 ACL エントリを除くすべてを削除します。ユーザー、グループ、その他のエントリは、パーミッションビットとの互換性のために保持されます。
  • -k: デフォルト ACL を削除します。
  • -R: すべてのファイルとディレクトリに対して再帰的に操作を適用します。
  • -m: ACL を変更します。新しいエントリが ACL に追加され、既存のエントリは保持されます。
  • -x: 指定された ACL エントリを削除します。他の ACL エントリは保持されます。
  • --set: ACL を完全に置き換え、既存のすべてのエントリを破棄します。acl_spec には、パーミッションビットとの互換性のために、ユーザー、グループ、その他のエントリを含める必要があります。ACL 仕様にアクセスエントリのみが含まれている場合、既存のデフォルトエントリは保持されます。ACL 仕様にデフォルトエントリのみが含まれている場合、既存のアクセスエントリは保持されます。ACL 仕様にアクセスエントリとデフォルトエントリの両方が含まれている場合、両方が置き換えられます。
  • acl_spec: カンマ区切りの 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以外の値を返します。

setfattr

使用法: hadoop fs -setfattr -n name [-v value] | -x name <パス>

ファイルまたはディレクトリの拡張属性の名前と値を設定します。

オプション

  • -n name: 拡張属性の名前。
  • -v value: 拡張属性の値。値には 3 つの異なるエンコード方法があります。引数が二重引用符で囲まれている場合、値は引用符内の文字列になります。引数が 0x または 0X で始まる場合、16 進数として扱われます。引数が 0s または 0S で始まる場合、base64 エンコードとして扱われます。
  • -x name: 拡張属性を削除します。
  • path: ファイルまたはディレクトリ。

  • 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以外の値を返します。

setrep

使用法: hadoop fs -setrep [-R] [-w] <numReplicas> <パス>

ファイルのレプリケーションファクターを変更します。パス がディレクトリの場合、コマンドは パス をルートとするディレクトリツリー下のすべてのファイルのレプリケーションファクターを再帰的に変更します。このコマンドを実行する際、EC ファイルは無視されます。

オプション

  • -w フラグは、レプリケーションが完了するまでコマンドが待機するように要求します。これには非常に長い時間がかかる可能性があります。
  • -R フラグは、下位互換性のために受け入れられます。効果はありません。

  • hadoop fs -setrep -w 3 /user/hadoop/dir1

終了コード

成功すると0、エラーが発生すると-1を返します。

stat

使用法: 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 を返します。

tail

使用法: hadoop fs -tail [-f] URI

ファイルの最後のキロバイトを stdout に表示します。

オプション

  • -f オプションは、Unix のように、ファイルの増加に伴い追加されたデータを出力します。

  • hadoop fs -tail pathname

終了コード: 成功した場合は 0、エラーの場合は -1 を返します。

test

使用法: hadoop fs -test -[defswrz] URI

オプション

  • -d: パスがディレクトリの場合、0 を返します。
  • -e: パスが存在する場合、0 を返します。
  • -f: パスがファイルの場合、0 を返します。
  • -s: パスが空でない場合、0 を返します。
  • -w: パスが存在し、書き込み権限が付与されている場合、0 を返します。
  • -r: パスが存在し、読み取り権限が付与されている場合、0 を返します。
  • -z: ファイルの長さがゼロの場合、0 を返します。

  • hadoop fs -test -e filename

text

使用法: hadoop fs -text <ソース>

ソースファイルを受け取り、テキスト形式でファイルを出力します。許可される形式は、zip と TextRecordInputStream です。

touch

使用法: hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]

URI で指定されたファイルのアクセス時刻と変更時刻を現在時刻に更新します。ファイルが存在しない場合は、URI に長さ 0 のファイルが作成され、その URI のタイムスタンプとして現在時刻が設定されます。

  • -a オプションを使用すると、アクセス時刻のみが変更されます
  • -m オプションを使用すると、変更時刻のみが変更されます
  • -t オプションを使用すると、現在時刻の代わりにタイムスタンプ (yyyyMMdd:HHmmss 形式) を指定できます。
  • -c オプションを使用すると、ファイルが存在しない場合に作成されません

タイムスタンプ形式は次のとおりです。* 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 を返します。

touchz

使用法: hadoop fs -touchz URI [URI ...]

長さが 0 のファイルを作成します。ファイルがゼロ以外の長さで存在する場合は、エラーが返されます。

  • hadoop fs -touchz pathname

終了コード: 成功した場合は 0、エラーの場合は -1 を返します。

truncate

使用法: hadoop fs -truncate [-w] <長さ> <パス>

指定されたファイルパターンに一致するすべてのファイルを、指定された長さに切り捨てます。

オプション

  • -w フラグは、必要に応じてブロックリカバリが完了するまでコマンドが待機するように要求します。
    -w フラグがない場合、リカバリの進行中にファイルがしばらくの間クローズされないままになる場合があります。
    この間、ファイルを追記のために再度開くことはできません。

  • hadoop fs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1

concat

使用法: hadoop fs -concat <ターゲットファイル> <ソースファイル>

既存のソースファイルをターゲットファイルに連結します。ターゲットファイルとソースファイルは同じディレクトリにある必要があります。

  • hadoop fs -concat hdfs://cluster/user/hadoop/target-file hdfs://cluster/user/hadoop/file-0 hdfs://cluster/user/hadoop/file-1

usage

使用法: 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/

その他の遅いコマンドには、findmvcp、および 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 内のファイルおよびディレクトリの動作に従わない場合があります。

  1. オブジェクトの作成時刻と最初の変更時刻は、オブジェクトストアで作成された時刻になります。これは、書き込みプロセスの開始時ではなく、終了時になります。
  2. タイムスタンプは、クライアントのクロックではなく、オブジェクトストアインフラストラクチャのクロックから取得されます。
  3. オブジェクトが上書きされた場合、変更時刻が更新されます。
  4. ディレクトリには、有効なタイムスタンプがある場合とない場合があります。それらの下のオブジェクトが更新されたときに、変更時刻が更新される可能性は低いです。
  5. atime アクセス時間機能は、Apache Hadoop コードベースにあるどのオブジェクトストアでもサポートされていません。

これが distcp -update 操作にどのように影響するかについての詳細は、DistCp のドキュメントを参照してください。

セキュリティモデルと操作

オブジェクトストアのセキュリティおよびアクセス許可モデルは、通常、Unix スタイルのファイルシステムのセキュリティおよびアクセス許可モデルとは大きく異なります。アクセス許可をクエリまたは操作する操作は、一般的にサポートされていません。

これが適用される操作には、chgrpchmodchowngetfacl、および 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
  1. すべてのファイルは、完全な読み取り/書き込みアクセス許可を持つとしてリストされています。
  2. すべてのディレクトリは、完全な rwx アクセス許可を持っているように見えます。
  3. すべてのファイルのレプリケーション数は「1」です。
  4. すべてのファイルとディレクトリの所有者は、現在のユーザー (mapred) であると宣言されています。
  5. すべてのディレクトリのタイムスタンプは、実際には -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 一般的にサポートされていません

異なるオブジェクトストアクライアントはこれらのコマンドをサポートしている場合があります。ドキュメントを参照し、ターゲットストアに対してテストしてください。