E-MapReduce (EMR) クラスターでは、hadoop fs コマンドを実行して、Hadoop 分散ファイルシステム (HDFS) 内のファイルに対して操作を実行できます。このトピックでは、HDFS の一般的なコマンドについて説明します。
前提条件
コマンドを実行する前に、次の条件が満たされていることを確認してください。
クラスターへのアクセス: Secure Shell (SSH) などの方法を使用して、クラスター内のノード (通常はマスターノード) にログインしていること。
ユーザー権限: デフォルトの
hadoopユーザーなど、使用するアカウントには、宛先の HDFS パスに対する読み取りおよび書き込み権限が必要です。Kerberos 認証が有効になっているクラスターの場合、最初に 身分認証 を実行する必要があります。
コマンドのバージョン
Hadoop は、ファイルシステム操作のために 2 つの同等のコマンドフォーマットを提供します。
hdfs dfs <args>: このコマンドは HDFS に固有です。hadoop fs <args>: これは汎用的なファイルシステムコマンドです。HDFS やローカルファイルシステム (file:///) など、複数の Hadoop 互換ファイルシステムで操作できます。
このトピックのすべての例では、hadoop fs を使用します。
コマンドチートシート
次の表は、最も一般的な HDFS コマンドのクイックリファレンスです。
コマンド | 説明 | 一般的な構文 |
HDFS に新しいディレクトリを作成します。 |
| |
HDFS に 0 バイトの空のファイルを作成します。 |
| |
指定されたパス内のファイルとディレクトリ、およびそれらの基本情報を一覧表示します。 |
| |
コマンドが実行される EMR ノード上のローカルファイルシステムから HDFS に 1 つ以上のファイルをコピーします。 |
| |
HDFS からコマンドが実行される EMR ノード上のローカルファイルシステムにファイルまたはディレクトリをコピーします。 |
| |
HDFS 内でファイルまたはディレクトリをコピーします。 |
| |
HDFS 内でファイルまたはディレクトリを移動または名前変更します。 |
| |
HDFS 内のファイルまたはディレクトリを削除します。 |
| |
HDFS 内のファイルの内容を表示します。 |
| |
ファイルのサイズ、またはディレクトリ内のすべてのファイルの合計サイズを表示します。 |
|
HDFS コマンドの詳細については、「Apache Hadoop 公式ウェブサイト」をご参照ください。
ディレクトリとファイルの管理
mkdir: ディレクトリの作成
HDFS に新しいディレクトリを作成します。
構文
hadoop fs -mkdir [-p] <paths>パラメーターの説明
-p: パス内に親ディレクトリが存在しない場合、すべての親ディレクトリを作成します。これは、Linux のmkdir -pコマンドに似ています。このパラメーターは、親ディレクトリが存在しない場合に発生するエラーを防ぐために、本番環境で一般的に使用されます。
例: HDFS ファイルシステムに /dir ディレクトリを作成します。
hadoop fs -mkdir /dir
touchz: 空のファイルの作成
HDFS に 0 バイトの空のファイルを作成します。
構文
hadoop fs -touchz URI [URI ...]シナリオ
タスクが完了したことを示すマーカーファイルとして機能させるため。
データ処理の前に空の出力ファイルを作成するため。
例: HDFS ファイルシステムの /dir/ ディレクトリに emptyfile.txt ファイルを作成します。
hadoop fs -touchz /dir/emptyfile.txt
ls: ファイルとディレクトリの一覧表示
指定されたパス内のファイルとディレクトリ、およびそれらの基本情報を一覧表示します。
構文
hadoop fs -ls [-h] [-R] [-t] <args>パラメーターの説明
-h: ファイルサイズを 1K、234M、2G などの人間が読みやすい形式で表示します。-R: すべてのサブディレクトリの内容を再帰的に一覧表示します。-t: 変更時間で並べ替え、最新のファイルまたはディレクトリを最初に表示します。
例: 作成した
dirディレクトリを表示します。hadoop fs -ls /dir
ファイル転送
put: HDFS へのファイルのアップロード
コマンドが実行される EMR ノード上のローカルファイルシステムから HDFS に 1 つ以上のファイルをコピーします。
構文
hadoop fs -put [-f] [-p] <localsrc> <dst>パラメーターの説明
-f: 宛先パスに既存のファイルを強制的に上書きします。-p: ファイルのアクセス時間と変更時間、所有権、および権限を保持します。
例: ローカルファイル hello.txt を HDFS の /dir/sub-dir パスにアップロードします。
hadoop fs -put hello.txt /dir/sub-dir
get: HDFS からのファイルのダウンロード
HDFS からコマンドが実行される EMR ノード上のローカルファイルシステムにファイルまたはディレクトリをコピーします。
構文
hadoop fs -get [-f] [-p] <src> <localdst>パラメーターの説明
-f: 宛先パスに既存のファイルを強制的に上書きします。-p: ファイルのアクセス時間と変更時間、所有権、および権限を保持します。
例: HDFS ファイル /dir/emptyfile.txt をローカルの / パスにコピーします。
hadoop fs -get /dir/emptyfile.txt /
ファイル操作
cp: ファイルまたはディレクトリのコピー
HDFS 内でファイルまたはディレクトリをコピーします。
構文
hadoop fs -cp [-f] URI [URI ...] <dest>パラメーターの説明
-f: 宛先パスに既存のファイルを強制的に上書きします。
例: /dir/sub-dir/ ディレクトリから /tmp ディレクトリに hello_world.txt ファイルをコピーします。
hadoop fs -cp /dir/sub-dir/hello_world.txt /tmp
mv: ファイルまたはディレクトリの移動または名前変更
HDFS 内でファイルまたはディレクトリを移動または名前変更します。これはアトミックな操作です。同じファイルシステム内でファイルを移動する場合、データブロックは移動されません。メタデータのみが更新されるため、操作は非常に高速です。
構文
hadoop fs -mv URI [URI ...] <dest>例
/tmp/ ディレクトリから /dir/sub-dir/ ディレクトリに hello_world2.txt ファイルを移動します。
hadoop fs -mv /tmp/hello_world2.txt /dir/sub-dir//tmp/ パスから /dir/sub-dir/ ディレクトリに test ディレクトリを移動します。
hadoop fs -mv /tmp/test /dir/sub-dir/
rm: ファイルまたはディレクトリの削除
HDFS 内のファイルまたはディレクトリを削除します。
構文
hadoop fs -rm [-f] [-r] [-skipTrash] URI [URI ...]パラメーターの説明
-r: ディレクトリとそのすべての内容を再帰的に削除します。このパラメーターは、ディレクトリを削除するために必要です。-f: 削除を強制します。ファイルが存在しない場合、コマンドはエラーを報告しません。-skipTrash: ファイルまたはディレクトリを完全に削除し、ゴミ箱をスキップします。このオプションは細心の注意を払って使用してください。デフォルトでは、削除されたアイテムは現在のユーザーのゴミ箱ディレクトリ (/user/<username>/.Trash/) に移動されます。
例: HDFS の /dir/sub-dir/ ディレクトリから hello_world2.txt ファイルを削除します。
hadoop fs -rm /dir/sub-dir/hello_world2.txt
hadoop fs -rmr コマンドは非推奨です。ディレクトリを再帰的に削除するには、代わりに hadoop fs -rm -r を使用してください。
ファイルの表示
cat: ファイル内容の表示
HDFS 内のファイルの内容を表示します。
構文
hadoop fs -cat URI [URI ...]例
hello.txt ファイルの内容を表示します。
hadoop fs -cat /hello.txt/dir/sub-dir/ ディレクトリ内の hello_world.txt ファイルの内容を表示します。
hadoop fs -cat /dir/sub-dir/hello_world.txt
du: ファイルサイズの表示
ファイルのサイズ、またはディレクトリ内のすべてのファイルの合計サイズを表示します。
構文
hadoop fs -du [-s] [-h] URI [URI ...]パラメーターの説明
-s: 各ファイルまたはディレクトリのサイズではなく、合計サイズの概要を表示します。-h: サイズを人間が読みやすい形式で表示します。
例
ファイルのサイズを表示します。
hadoop fs -du /hello.txtディレクトリ内のすべてのファイルの合計サイズを表示します。
hadoop fs -du /dir
よくある質問
Permission denied原因: 現在のユーザーには、宛先のファイルまたはディレクトリに対する必要な読み取り、書き込み、または実行権限がありません。
解決策:
hdfs dfs -ls <parent_dir>コマンドを実行して、ファイルまたはその親ディレクトリの権限を確認します。管理者に連絡して、
chmodまたはchownコマンドを使用して権限を付与してもらいます。環境で Kerberos が有効になっている場合は、
kinitコマンドを使用してチケットを取得したことを確認します。
SafeModeException: NameNode is in safe mode原因: NameNode は起動中にセーフモードに入り、この期間中は書き込み操作を受け付けません。
解決策: NameNode が自動的にセーフモードを終了するまで数分待ちます。
hdfs dfsadmin -safemode getコマンドを実行してステータスを確認できます。緊急時でない限り、手動でセーフモードを強制終了しないでください。
No such file or directory原因: 指定されたパスが存在しません。
解決策: パスのスペルミスを確認してください。ファイルに書き込む場合は、その親ディレクトリが存在することを確認してください。
mkdirコマンドで-pパラメーターを使用して親ディレクトリを作成することもできます。
StandbyException: Operation category READ is not supported in state standby原因: 高可用性 (HA) 構成で、Standby 状態の NameNode に読み取りまたは書き込みリクエストが送信されました。
解決策: Hadoop 構成ファイル (
core-site.xml) を確認し、fs.defaultFSが特定の NameNode ホスト名ではなく、hdfs://myclusterなどの HA NameService 名を指していることを確認してください。
リファレンス
クラスターで高可用性 (HA) が有効になっている場合は、「HDFS 高可用性 (HA) コマンド (HaAdmin)」をご参照ください。
Hadoop クラスター間、または HDFS と Object Storage Service (OSS) 間でデータを移行するには、「Hadoop DistCp」をご参照ください。