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ファイルを参照します。
あなたが見ている振る舞いは期待されています。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スキームを使用します。
これは、ユーザーのホームディレクトリが見つからないことに関係しています。ログインしたユーザーのhdfsの下にホームディレクトリを作成すると、それは魅力のように機能しました。
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/{loggedin user}
hdfs dfs -ls
この方法で問題が解決しました。
Hadoopのユーザーディレクトリは(HDFSで)
/user/<your operational system user>
このエラーメッセージが表示される場合、HDFS内にユーザーディレクトリをまだ作成していない可能性があります。
使用する
hadoop fs -mkdir -p /user/<current o.p. user directory>
現在の運用システムユーザーを確認するには、次を使用します。
id -un
hadoop fs -ls
動作を開始するはずです...
ここにはいくつかの作業があります。 「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
として渡してみてください。うまくいくはずです。