hdfs dfs で利用できるサブコマンド(3)

hdfs dfs コマンドで利用できるサブコマンドの一覧、その3です。
表のレイアウトがおかしいので近いうちに直します。

command実行例説明
createSnapshot$ hdfs dfs -help createSnapshot
-createSnapshot [] :
Create a snapshot on a directory
ディレクトリのスナップショットを作成する
hdfs dfs -createSnapshot$ hdfs dfs -createSnapshot testdir snap1Created snapshot /user/cloudera/testdir/.snapshot/snap1
$ hdfs dfs -createSnapshot testdir snap2
Created snapshot /user/cloudera/testdir/.snapshot/snap2
$ hdfs dfs -ls /user/cloudera/testdir/.snapshotFound 2 items
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/snap1
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/snap2
$
スナップショットの作成 (と確認)
renameSnapshot$ hdfs dfs -help renameSnapshot
-renameSnapshot :
Rename a snapshot from oldName to newName
スナプショットの名前を古い名前から新しい名前へと変更する
hdfs dfs -renameSnapshot$ hdfs dfs -renameSnapshot /user/cloudera/testdir snap1 newsnapshot1
$ hdfs dfs -ls /user/cloudera/testdir/.snapshotFound 2 items
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/newsnapshot1
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/snap2
$
スナップショットの名前を変更
deleteSnapshot$ hdfs dfs -help deleteSnapshot-deleteSnapshot :
Delete a snapshot from a directory
ディレクトリからスナップショットを削除する
hdfs dfs -deleteSnapshot$ hdfs dfs -ls /user/cloudera/testdir/.snapshot
Found 2 items
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/newsnapshot1
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/snap2
$ hdfs dfs -deleteSnapshot /user/cloudera/testdir newsnapshot1
$ hdfs dfs -ls /user/cloudera/testdir/.snapshotFound 1 items
drwxr-xr-x - cloudera cloudera 0 2016-12-05 05:57 /user/cloudera/testdir/.snapshot/snap2
$
当該ディレクトリから指定されたスナップショットを削除
expunge$ hdfs dfs -help expunge
-expunge :
Empty the Trash
ゴミ箱を空にする。ゴミ箱が有効になっている場合のみ使える。ゴミ箱は /user/ユーザ名/.Trash 以下
hdfs dfs -expunge$ hdfs dfs -ls -R .Trash
drwx------ - cloudera cloudera 0 2016-12-04 06:52 .Trash/Current
drwx------ - cloudera cloudera 0 2016-12-04 06:33 .Trash/Current/tmp
-rw-r--r-- 1 cloudera supergroup 12 2016-12-04 05:15 .Trash/Current/tmp/test.txt
-rw-r--r-- 1 cloudera supergroup 4 2016-12-04 05:17 .Trash/Current/tmp/test2.txt
-rw-r--r-- 1 cloudera supergroup 4 2016-12-04 05:17 .Trash/Current/tmp/test3.txt
(略)
]$ hdfs dfs -expunge
16/12/05 06:24:31 WARN hdfs.DFSClient: Cannot get all encrypted trash roots
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Access denied for user cloudera. Superuser privilege is required
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkSuperuserPrivilege(FSPermissionChecker.java:93)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkSuperuserPrivilege(FSNamesystem.java:6601)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.listEncryptionZones(FSNamesystem.java:9239)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.listEncryptionZones(NameNodeRpcServer.java:1639)
権限がないというエラーになる
TODO
setfacl$ hdfs dfs -help setfacl
-setfacl [-R] [{-b|-k} {-m|-x } ]|[--set ] :
Sets Access Control Lists (ACLs) of files and directories.
Options:

-b Remove all but the base ACL entries. The entries for user, group
and others are retained for compatibility with permission bits.
-k Remove the default ACL.
-R Apply operations to all files and directories recursively.
-m Modify ACL. New entries are added to the ACL, and existing entries
are retained.
-x Remove specified ACL entries. Other ACL entries are retained.
--set Fully replace the ACL, discarding all existing entries. The
must include entries for user, group, and others for
compatibility with permission bits.
Comma separated list of ACL entries.
File or directory to modify.
ファイルとディレクトリにACLを設定する。NameNodeのプロパティをtrueにしておく必要がある。
dfs.namenode.acls.enabled
Quickstart VMのデフォルトはfalse
無効の場合は次のようなエラーになる
$ hdfs dfs -setfacl -m user:kawasaki:rw- test.txt
setfacl: The ACL operation has been rejected. Support for ACLs has been disabled by setting dfs.namenode.acls.enabled to false.
hdfs dfs -setfacl -m$ hdfs dfs -setfacl -m user:kawasaki:rw- test.txt
ACLの変更
getfacl$ hdfs dfs -help getfacl
-getfacl [-R] :
Displays the Access Control Lists (ACLs) of files and directories. If a
directory has a default ACL, then getfacl also displays the default ACL.

-R List the ACLs of all files and directories recursively.
File or directory to list.
ファイルとディレクトリのACLを表示する。ディレクトリにデフォルトACLが設定されている場合はそれも表示する。
hdfs dfs -getfacl$ hdfs dfs -getfacl test.txt
# file: test.txt
# owner: cloudera
# group: cloudera
user::rw-
user:kawasaki:rw-
group::r--
mask::rw-
other::r--
上記で設定したACLの表示
setfattr$ hdfs dfs -help setfattr
-setfattr {-n name [-v value] | -x name} :
Sets an extended attribute name and value for a file or directory.

-n name The extended attribute name.
-v value The extended attribute value. There are three different encoding
methods for the value. If the argument is enclosed in double quotes,
then the value is the string inside the quotes. If the argument is
prefixed with 0x or 0X, then it is taken as a hexadecimal number. If
the argument begins with 0s or 0S, then it is taken as a base64
encoding.
-x name Remove the extended attribute.
The file or directory.
ファイルやディレクトリに拡張アトリビュート名と値を設定する
hdfs dfs -setfattr$ hdfs dfs -setfattr -n user.a1 -v 123456 test.txt
$ hdfs dfs -setfattr -n security.a2 -v abcdef test.txt
setfattr: User doesn't have permission for xattr: security.a2
$ hdfs dfs -setfattr -n user.a2 -v abcdef test.txt
$
名前 user.a1、値 123456 の拡張属性をセット
securityの拡張属性は権限がないため設定できない
getfattr$ hdfs dfs -help getfattr
-getfattr [-R] {-n name | -d} [-e en] :
Displays the extended attribute names and values (if any) for a file or
directory.

-R Recursively list the attributes for all files and directories.
-n name Dump the named extended attribute value.
-d Dump all extended attribute values associated with pathname.
-e Encode values after retrieving them.Valid encodings are "text",
"hex", and "base64". Values encoded as text strings are enclosed
in double quotes ("), and values encoded as hexadecimal and
base64 are prefixed with 0x and 0s, respectively.
The file or directory.
ファイルやディレクトリの拡張属性を表示する
hdfs dfs -getfattr -n$ hdfs dfs -getfattr -n user.a1 test.txt
# file: test.txt
user.a1="123456"
指定した名前の属性を表示
hdfs dfs -getfattr -d]$ hdfs dfs -getfattr -d test.txt
# file: test.txt
user.a1="123456"
user.a2="abcdef"
すべての拡張属性を表示
hdfs dfs -getfattr -e$ hdfs dfs -getfattr -d test.txt -e "hex"
# file: test.txt
user.a1=0x313233343536
user.a2=0x616263646566
指定したエンコーディングでダンプ (このサンプルはhex表示)
setrep$ hdfs dfs -help setrep
-setrep [-R] [-w] ... :
Set the replication level of a file. If is a directory then the command
recursively changes the replication factor of all files under the directory tree
rooted at .

-w It requests that the command waits for the replication to complete. This
can potentially take a very long time.
-R It is accepted for backwards compatibility. It has no effect.
ファイルの複製数をセット。ディレクトリを指定した場合はディレクトリにあるファイルの複製係数が設定される
-w は完了まで待つ
-R は再帰的に設定
hdfs dfs -setrep $ hdfs dfs -ls test.txt
-rw-rw-r--+ 2 cloudera cloudera 12 2016-12-05 06:37 test.txt
$ hdfs dfs -setrep 3 test.txt
Replication 3 set: test.txt
$ hdfs dfs -ls test.txt
-rw-rw-r--+ 3 cloudera cloudera 12 2016-12-05 06:37 test.txt
$ hdfs dfs -ls -R testdir/
-rw-r--r-- 1 cloudera cloudera 12 2016-12-05 07:44 testdir/test.txt
-rw-r--r-- 1 cloudera cloudera 4 2016-12-05 07:44 testdir/test2.txt
$ hdfs dfs -setrep 3 testdir
Replication 3 set: testdir/test.txt
Replication 3 set: testdir/test2.txt
$
複製係数を3に設定。後者はディレクトリを指定した場合
help$ hdfs dfs -help help
-help [cmd ...] :
Displays help for given command or all commands if none is specified.
指定したコマンドのヘルプを表示
hdfs dfs -help$ hdfs dfs -help help
-help [cmd ...] :
Displays help for given command or all commands if none is specified.
ヘルプのヘルプ
usage$ hdfs dfs -help usage
-usage [cmd ...] :
Displays the usage for given command or all commands if none is specified.
指定したコマンド、またはすべてのusageを表示
hdfs dfs -usage$ hdfs dfs -usage ls
Usage: hadoop fs [generic options] -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [ ...]
lsコマンドのusage

コメント