hdfs dfs -pwd
を実行しようとしましたが、そのコマンドは存在しません。そのため、現在、hdfs dfs -ls ..
に続いてhdfs dfs -ls ../..
を実行しています。
hdfs dfs
のコマンドリストも調べましたが、期待できるものは見ませんでした。
絶対パスを見つけるより直接的な方法はありますか?
コマンドラインからコマンドを実行する場合、HDFSには「作業ディレクトリ」の概念がないため、「hdfs dfs -pwd」は存在しません。
HDFSシェルと「hdfs dfs -cd」コマンドの両方が存在しないため、HDFSシェルで「hdfs dfs -cd」を実行してからそこからコマンドを実行することはできません。
ホームディレクトリは、「/」で始まらない限り、常にパスのプレフィックスです。
-cd
コマンドはないので、-pwd
がホームディレクトリを返すことを期待していると思います。
この関連する質問: HDFS Home Directory によると、hdfsのホームディレクトリは常に/user/<ShortUserName>
です(ソースにハードコーディングされています)。
ホームディレクトリの絶対パスを表示する場合は、空のディレクトリを作成して削除します。情報に絶対パスが表示されます。
[test@test ~]$ hadoop fs -mkdir t1
[test@test ~]$ hadoop fs -rm -r t1
17/02/14 10:00:46 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://nameservice1/user/test/t1' to trash at: hdfs://nameservice1/user/test/.Trash/Current
'hdfs:// nameservice1/user/test/t1'はt1ディレクトリの絶対パスです
UNIX/Linuxのようなhadoopには、そのようなPWD、CDの移植性はありません。
可能なHadoopコマンドは次のとおりです。
-appendToFile
-cat
-checksum
-chgrp
-chmod
-chown
-copyFromLocal
-copyToLocal
-count
-cp
-createSnapshot
-deleteSnapshot
-df
-du
-expunge
-get
-getfacl
-getfattr
-getmerge
-help
-ls
-mkdir
-moveFromLocal
-moveToLocal
-mv
-put
-renameSnapshot
-rm
-rmdir
-setfacl
-setfattr
-setrep
-stat
-tail
-test
-text
-touchz
-usage
ファイルシステムシェルユーティリティhdfs dfs
にはpwd
コマンドに相当するものはありませんが、ここではmkdir
とfind
を使用した回避策があります。 :
$ hdfs dfs -mkdir xYz
$ hdfs dfs -find / -name "xYz"
(「xYz」は未使用のファイル名です)
1つのコマンドで:
$ echo $(dirname $(hdfs dfs -rm -R xYz>/dev/null 2>&1;hdfs dfs -mkdir xYz&&hdfs dfs -find / -name "xYz"))
Hdfs.pwd()関数がありますが、残念ながらコマンドラインから使用することはできません。 HDFSユーザーガイド