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

hdfs dfs コマンドで利用できるサブコマンドの一覧、その2です。

command実行例説明
checksum$ hdfs dfs -help checksum
-checksum ... :
Dump checksum information for files that match the file pattern to stdout.
Note that this requires a round-trip to a datanode storing each block of the
file, and thus is not efficient to run on a large number of files. The checksum
of a file depends on its content, block size and the checksum algorithm and
parameters used for creating the file.
指定したファイルのチェックサム情報を標準出力にダンプする。
このコマンドは各ブロックごとにDataNodeと通信が発生するため大きなファイルでは非効率になる。
ファイルのチェックサムは、ファイル作成に使用した内容、ブロックサイズ、チェックサムアルゴリズム、パラメータにより異なる
hdfs dfs -checksum$ hdfs dfs -checksum test.txt
test.txt MD5-of-0MD5-of-512CRC32C 000002000000000000000000258873cc02db260fdf7f4ff4b3b22f86
chown$ hdfs dfs -help chown
-chown [-R] [OWNER][:[GROUP]] PATH... :
Changes owner and group of a file. This is similar to the shell's chown command
with a few exceptions.

-R modifies the files recursively. This is the only option currently
supported.

If only the owner or group is specified, then only the owner or group is
modified. The owner and group names may only consist of digits, alphabet, and
any of [-_./@a-zA-Z0-9]. The names are case sensitive.

WARNING: Avoid using '.' to separate user name and group though Linux allows it.
If user names have dots in them and you are using local file system, you might
see surprising results since the shell command 'chown' is used for local files.
ファイルの所有者とグループを変更。これはシェルのchownコマンドと似ているがいくつかの例外がある。
-R はファイルを再帰的に変更。現在サポートしている唯一のオプション。
所有者またはグループが指定された場合、所有者またはグループのいずれかが変更される。
所有者とグループの名前は、数字、アルファベット、[-_./@a-zA-Z0-9]のいずれか。名前は大文字小文字を識別する。
Linuxがサポートしている、名前とグループの間を「ドット」で区切るのは避けてください。詳細はヘルプ参照。
hdfs dfs -chown$ hdfs dfs -ls /tmp
Found 1 items
-rw-r--r-- 2 cloudera supergroup 12 2016-12-04 05:26 /tmp/test.txt
$ sudo -u hdfs hdfs dfs -chown kawasaki:kawasaki /tmp/test.txt
$ hdfs dfs -ls /tmp/test.txt
-rw-r--r-- 2 kawasaki kawasaki 12 2016-12-04 05:26 /tmp/test.txt
$ hdfs dfs -ls /tmp/zzz
Found 1 items
-rw-r--r-- 2 hoge huga 12 2016-12-04 07:23 /tmp/zzz/test.txt
$ sudo -u hdfs hdfs dfs -chown cloudera /tmp/zzz/test.txt
$ hdfs dfs -ls /tmp/zzz
Found 1 items
-rw-r--r-- 2 cloudera huga 12 2016-12-04 07:23 /tmp/zzz/test.txt
$
変更例。この例では変更時にスーパーユーザー権限が必要。ユーザー、グループが存在しているかどうかは関知しない
グループ名は省略しても良い。
hdfs dfs -chown -R$ hdfs dfs -ls -r /tmp/zzz
Found 3 items
drwxr-xr-x - cloudera supergroup 0 2016-12-04 07:23 /tmp/zzz/yyy
-rw-r--r-- 2 cloudera supergroup 4 2016-12-04 07:23 /tmp/zzz/test2.txt
-rw-r--r-- 2 cloudera supergroup 12 2016-12-04 07:23 /tmp/zzz/test.txt
$ sudo -u hdfs hdfs dfs -chown -R hoge:huga /tmp/zzz
$ hdfs dfs -ls -r /tmp/zzz
Found 3 items
drwxr-xr-x - hoge huga 0 2016-12-04 07:23 /tmp/zzz/yyy
-rw-r--r-- 2 hoge huga 4 2016-12-04 07:23 /tmp/zzz/test2.txt
-rw-r--r-- 2 hoge huga 12 2016-12-04 07:23 /tmp/zzz/test.txt
$
再帰的に所有者、グループを変更
chgrp$ hdfs dfs -help chgrp
-chgrp [-R] GROUP PATH... :
This is equivalent to -chown ... :GROUP ...
グループを変更する。chownでグループを指定したのと同一
hdfs dfs -chgrp$ hdfs dfs -ls /tmp/zzzFound 1 items
-rw-r--r-- 2 cloudera huga 12 2016-12-04 07:23 /tmp/zzz/test.txt
$ sudo -u hdfs hdfs dfs -chgrp ppap /tmp/zzz/test.txt
$ hdfs dfs -ls /tmp/zzz
Found 1 items
-rw-r--r-- 2 cloudera ppap 12 2016-12-04 07:23 /tmp/zzz/test.txt
$
chmod$ hdfs dfs -help chmod
-chmod [-R] PATH... :
Changes permissions of a file. This works similar to the shell's chmod command
with a few exceptions.

-R modifies the files recursively. This is the only option currently
supported.
Mode is the same as mode used for the shell's command. The only
letters recognized are 'rwxXt', e.g. +t,a+r,g-w,+rwx,o=r.
Mode specifed in 3 or 4 digits. If 4 digits, the first may be 1 or
0 to turn the sticky bit on or off, respectively. Unlike the
shell command, it is not possible to specify only part of the
mode, e.g. 754 is same as u=rwx,g=rx,o=r.

If none of 'augo' is specified, 'a' is assumed and unlike the shell command, no
umask is applied.
ファイルの権限を変更する。シェルコマンドのchmodと似ているがいくつかの例外がある。
hdfs dfs -chmod$ hdfs dfs -ls services
-rw-r--r-- 1 cloudera cloudera 641020 2016-12-04 04:41 services
$ hdfs dfs -chmod '+rwx' services
$ hdfs dfs -ls services
-rwxrwxrwx 1 cloudera cloudera 641020 2016-12-04 04:41 services
$ hdfs dfs -chmod 'go-x' services
$ hdfs dfs -ls services
-rwxrw-rw- 1 cloudera cloudera 641020 2016-12-04 04:41 services
$ hdfs dfs -chmod '+t' services
[cloudera@quickstart ~]$ hdfs dfs -ls services
-rwxrw-rwT 1 cloudera cloudera 641020 2016-12-04 04:41 services
$ hdfs dfs -chmod 754 services
$ hdfs dfs -ls services
-rwxr-xr-T 1 cloudera cloudera 641020 2016-12-04 04:41 services
$
mode (rwx)とoctalmod (755)のような指定が可能
hdfs dfs -chmod -R$ hdfs dfs -ls -R /tmp/zzz
-rw-r--r-- 2 cloudera cloudera 12 2016-12-04 07:23 /tmp/zzz/test.txt
-rw-r--r-- 2 cloudera cloudera 4 2016-12-04 07:23 /tmp/zzz/test2.txt
drwxr-xr-x - cloudera cloudera 0 2016-12-04 07:23 /tmp/zzz/yyy
$ hdfs dfs -chmod -R '750' /tmp/zzz/
$ hdfs dfs -ls -R /tmp/zzz
-rwxr-x--- 2 cloudera cloudera 12 2016-12-04 07:23 /tmp/zzz/test.txt
-rwxr-x--- 2 cloudera cloudera 4 2016-12-04 07:23 /tmp/zzz/test2.txt
drwxr-x--- - cloudera cloudera 0 2016-12-04 07:23 /tmp/zzz/yyy

再帰的にパーミッションを変更
count$ hdfs dfs -help count
-count [-q] [-h] [-v] ... :
Count the number of directories, files and bytes under the paths
that match the specified file pattern. The output columns are:
DIR_COUNT FILE_COUNT CONTENT_SIZE PATHNAME
or, with the -q option:
QUOTA REM_QUOTA SPACE_QUOTA REM_SPACE_QUOTA
DIR_COUNT FILE_COUNT CONTENT_SIZE PATHNAME
The -h option shows file sizes in human readable format.
The -v option displays a header line.
指定したファイルパターンに一致したファイルとディレクトリの数とバイト数を表示。
出力は以下の形式
ディレクトリ数 ファイル数 サイズ パス
-q オプションを指定した場合の出力
クォータ クォータの残り スペースクォータ スペースクォータの残り ディレクトリ数 ファイル数 バイト数 パス名
hdfs dfs -count$ hdfs dfs -count /user/cloudera
10 18 644729 /user/cloudera
パス名は必須
hdfs dfs -count -q$ hdfs dfs -count -q /user/cloudera
none inf none inf 10 18 644729 /user/cloudera
TODO: クォータ設定時の出力
hdfs dfs -count -h$ hdfs dfs -count -h /user/cloudera
10 18 629.6 K /user/cloudera
読みやすい形式でバイト数を表示
df$ hdfs dfs -help df
-df [-h] [ ...] :
Shows the capacity, free and used space of the filesystem. If the filesystem has
multiple partitions, and no path to a particular partition is specified, then
the status of the root partitions will be shown.

-h Formats the sizes of files in a human-readable fashion rather than a number
of bytes.
ファイルシステムの容量、空容量、使用スペースを表示。ファイルシステムに複数のパーティションがあり、特定のパスが指定されていない場合はルートパーティションが表示される。
hdfs dfs -du$ hdfs dfs -df /user/cloudera
Filesystem Size Used Available Use%
hdfs://quickstart.cloudera:8020 58479091712 1452912640 42453938176 2%
TODO: パーティション複数の場合の表示
hdfs dfs -du -h$ hdfs dfs -df -h
Filesystem Size Used Available Use%
hdfs://quickstart.cloudera:8020 54.5 G 1.4 G 39.5 G 2%
TODO: パーティション複数の場合の表示
du$ hdfs dfs -help du
-du [-s] [-h] ... :
Show the amount of space, in bytes, used by the files that match the specified
file pattern. The following flags are optional:

-s Rather than showing the size of each individual file that matches the
pattern, shows the total (summary) size.
-h Formats the sizes of files in a human-readable fashion rather than a number
of bytes.

Note that, even without the -s option, this only shows size summaries one level
deep into a directory.

The output is in the form
size disk space consumed name(full path)
指定されたファイルのパターンに一致したファイルによって使用されている量をバイト数で表示。出力は
サイズ 消費しているディスク量 名前(フルパス)
hdfs dfs -du$ hdfs dfs -du /tmp/zzz
12 24 /tmp/zzz/test.txt
4 8 /tmp/zzz/test2.txt
205 410 /tmp/zzz/yyy
$
複製係数2の例。
2倍消費されていることがわかる。
hdfs dfs -du -s$ hdfs dfs -du -s /tmp/zzz
221 442 /tmp/zzz
個々のファイルではなく合計して表示
hdfs dfs -du -h$ hdfs dfs -du services
641020 641020 services
$ hdfs dfs -du -h services
626.0 K 626.0 K services
人間が読みやすい形式で表示
find$ hdfs dfs -help find
-find ... ... :
Finds all files that match the specified expression and
applies selected actions to them. If no is specified
then defaults to the current working directory. If no
expression is specified then defaults to -print.

The following primary expressions are recognised:
-name pattern
-iname pattern
Evaluates as true if the basename of the file matches the
pattern using standard file system globbing.
If -iname is used then the match is case insensitive.

-print
-print0
Always evaluates to true. Causes the current pathname to be
written to standard output followed by a newline. If the -print0
expression is used then an ASCII NULL character is appended rather
than a newline.

The following operators are recognised:
expression -a expression
expression -and expression
expression expression
Logical AND operator for joining two expressions. Returns
true if both child expressions return true. Implied by the
juxtaposition of two expressions and so does not need to be
explicitly specified. The second expression will not be
applied if the first fails.
指定したexpressionに一致したすべてのファイルを探し、洗濯したアクションを適用する。パスが指定されない場合は現在のワーキングディレクトリがデフォルト。expressionを指定しない場合は表示される
hdfs dfs -find $ hdfs dfs -find .
.
.Trash
.Trash/Current
.Trash/Current/user
.Trash/Current/user/cloudera
.Trash/Current/user/cloudera/test.txt
.Trash/Current
/user/cloudera/test.zip
services
testdir
testdir/test.txt
カレント(/user/ユーザ名)以下のファイルを表示する。
複数の条件をAND条件で指定できる。
hdfs dfs -find -name$ hdfs dfs -find . -name "test4*"
.Trash/Current/tmp/test4.txt
.Trash/Current/tmp/test4.txt1480862031502
.Trash/Current/user/cloudera/rmtest/test4.txt
名前に一致するファイルを検索
hdfs dfs -find -iname$ hdfs dfs -find . -iname "test4*"
.Trash/Current/tmp/test4.txt
.Trash/Current/tmp/test4.txt1480862031502
.Trash/Current/user/cloudera/rmtest/test4.txt
TEST4.TXT
名前に一致するファイルを検索(大文字小文字は区別しない)
hdfs dfs -find -print$ hdfs dfs -find .
.
.Trash
.Trash/Current
.Trash/Current/user
.Trash/Current/user/cloudera
.Trash/Current/user/cloudera/test.txt
.Trash/Current
/user/cloudera/test.zip
services
testdir
testdir/test.txt
省略時のデフォルト
hdfs dfs -find -print0$ hdfs dfs -find . -name "test4*" -print0
.Trash/Current/tmp/test4.txt.Trash/Current/tmp/test4.txt1480862031502.Trash/Current/user/cloudera/rmtest/test4.txt
出力の際に改行しない。
stat$ hdfs dfs -help stat
-stat [format] ... :
Print statistics about the file/directory at in the specified format.
Format accepts filesize in blocks (%b), group name of owner(%g), filename (%n),
block size (%o), replication (%r), user name of owner(%u), modification date
(%y, %Y)
引数で指定したパスの統計情報を指定したフォーマットで表示。
フォーマットはブロック(%b)、グループ名(%g)、ファイル名(%n)、ブロックサイズ(%o)、複製数(%r)、所有者(%u)、修正日時(%y, %Y)
hdfs dfs -stat$ hdfs dfs -stat services
2016-12-04 12:41:41
日時のみ表示(デフォルト)
hdfs dfs -stat ""%b %g %n %r %u %y %Y"$ hdfs dfs -stat "%b %g %n %r %u %y %Y" /user/cloudera/services
641020 cloudera services 1 cloudera 2016-12-04 12:41:41 1480855301612
すべてのオプションを指定
test$ hdfs dfs -help test
-test -[defsz] :
Answer various questions about , with result via exit status.
-d return 0 if is a directory.
-e return 0 if exists.
-f return 0 if is a file.
-s return 0 if file is greater than zero bytes in size.
-z return 0 if file is zero bytes in size, else return 1.
指定したオプションの評価を行い終了ステータスにより結果を返す
hdfs dfs -test -d$ hdfs dfs -ls
Found 1 items
drwxr-xr-x - cloudera cloudera 0 2016-12-04 07:03 testdir
$ hdfs dfs -test -d testdir
$ echo $?
0
$ hdfs dfs -test -d servcies
$ echo $?
1
ディレクトリかどうか
hdfs dfs -test -e$ hdfs dfs -test -e services
$ echo $?
0
$ hdfs dfs -test -e zz
$ echo $?
1
ファイルが存在するかどうか
hdfs dfs -test -f$ hdfs dfs -test -f services
$ echo $?
0
$ hdfs dfs -test -f testdir
$ echo $?
1
ファイルかどうか
hdfs dfs -test -z$ hdfs dfs -ls
Found 1 items
-rw-r--r-- 2 cloudera cloudera 0 2016-12-04 08:29 zerobyte.txt
$ hdfs dfs -test -z zerobyte.txt
$ echo $?
0
$ hdfs dfs -test -z services
$ echo $?
1
ファイルがゼロバイトかどうか
hdfs dfs -test -s$ hdfs dfs -test -s services
$ echo $?
0
$ hdfs dfs -test -s zerobyte.txt
$ echo $?
1
ファイルがゼロバイトよりも大きいかどうか
touchzhdfs dfs -help touchz
-touchz ... :
Creates a file of zero length at with current time as the timestamp of
that . An error is returned if the file exists with non-zero length
現在時刻でゼロバイト長のファイルを作成する。ゼロバイトより大きなファイルがあったらエラーを返す
hdfs dfs -touchz$ hdfs dfs -touchz burubon
$ hdfs dfs -ls burubon
-rw-r--r-- 2 cloudera cloudera 0 2016-12-04 08:35 burubon
作成
Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)