web-dev-qa-db-ja.com

hadoop fs -lsは「no such file or directory」という結果になります

10ノードのクラスター用にHadoop 2.5.2をインストールして構成しました。 1はマスターノードとして機能し、他のノードはスレーブノードとして機能します。

Hadoop fsコマンドの実行に問題があります。 hadoop fs -lsコマンドはHDFS URIで正常に機能しています。 HDFS URIなしで使用すると、「ls: `。 ':No such file or directory」というメッセージが表示されます

ubuntu@101-master:~$ hadoop fs -ls
15/01/30 17:03:49 WARN util.NativeCodeLoader: Unable to load native-hadoop 
ibrary for your platform... using builtin-Java classes where applicable
ls: `.': No such file or directory
ubuntu@101-master:~$ 

一方、HDFS URIで同じコマンドを実行する

ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/
15/01/30 17:14:31 WARN util.NativeCodeLoader: Unable to load native-hadoop      
library for your platform... using builtin-Java classes where applicable
Found 3 items
drwxr-xr-x   - ubuntu supergroup          0 2015-01-28 12:07 hdfs://101-master:50000/hvision-data
-rw-r--r--   2 ubuntu supergroup   15512587 2015-01-28 11:50 hdfs://101-master:50000/testimage.seq
 drwxr-xr-x   - ubuntu supergroup          0 2015-01-30 17:03 hdfs://101-master:50000/wrodcount-in
 ubuntu@101-master:~$ 

この動作により、MapReduceプログラムで例外が発生しています。 jarlibはHDFSファイルの場所を参照していますが、jarlibはHadoopノードのローカルファイルシステムに保存されているjarファイルを参照します。

22
Tariq

あなたが見ている振る舞いは期待されています。hadoop fsコマンドで作業しているときに何が起こっているかを説明しましょう。

コマンドの構文は次のとおりです。hadoop fs -ls [path]

デフォルトでは、上記のコマンドに[path]を指定しない場合、hadoopはパスをhdfsの/home/[username]に展開します。 [username]は、コマンドを実行しているLinuxユーザー名に置き換えられます。

したがって、このコマンドを実行すると:

ubuntu@xad101-master:~$ hadoop fs -ls

エラーが表示される理由は、ls: '.': No such file or directoryです。hadoopはこのパスを探しているため/home/ubuntu、このパスはhdfsに存在しないようです。

このコマンドの理由:

ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/

[path]を明示的に指定しており、hdfsのルートであるためです。これを使用して同じことを行うこともできます。

ubuntu@101-master:~$ hadoop fs -ls /

hdfsのルートに対して自動的に評価されます。

hadoop fs -lsコマンドの実行中に表示される動作がクリアされることを願っています。

したがって、ローカルファイルシステムパスを指定する場合は、file:/// URLスキームを使用します。

54
Ashrith

これは、ユーザーのホームディレクトリが見つからないことに関係しています。ログインしたユーザーのhdfsの下にホームディレクトリを作成すると、それは魅力のように機能しました。

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/{loggedin user}

hdfs dfs -ls

この方法で問題が解決しました。

9
Krishna Vedula

Hadoopのユーザーディレクトリは(HDFSで)

/user/<your operational system user>

このエラーメッセージが表示される場合、HDFS内にユーザーディレクトリをまだ作成していない可能性があります。

使用する

hadoop fs -mkdir -p /user/<current o.p. user directory>

現在の運用システムユーザーを確認するには、次を使用します。

id -un

hadoop fs -ls動作を開始するはずです...

4
Samuel Corradi

ここにはいくつかの作業があります。 「jarlibはHDFSファイルの場所を指している」ことに基づいて、fs.default.nameとして設定されたHDFSパスを実際に持っているように聞こえます。これは実際の典型的なセットアップです。したがって、hadoop fs -lsと入力すると、実際には 現在の作業ディレクトリhdfs://101-master:50000/user/ubuntuのようなものである必要があります)を除いて、HDFS内を検索しようとしています。このエラーメッセージは、.がそのフルパスであると解釈されたことを伝えないため、残念ながらやや混乱します。 hadoop fs -mkdir /user/ubuntuを実行すると、hadoop fs -lsが動作を開始するはずです。

この問題は、「jarlib」の問題とは無関係です。ローカルファイルシステムに明示的に保存されているファイルを参照したいが、パスがHadoopのPath解決を通過する場合は、file:///を追加して、Hadoopにローカルファイルシステムを強制的に参照させるだけです。例えば:

hadoop fs -ls file:///tmp

Jarファイルのパスをfille file:///path/to/your/jarfileとして渡してみてください。うまくいくはずです。

2
Dennis Huo