2013-08-28 13 views
22

私はCentOS上でCloudera CDHリポジトリを使用してシングルノードHadoop環境を構築しました。hadoop fs -putコマンド

sudo -u hdfs hadoop fs -put /root/MyHadoop/file1.txt/

しかし、結果は私が落ち込ん::私はHDFSへのローカルファイルをコピーしたい場合は、私はコマンドを使用

put: '/root/MyHadoop/file1.txt': No such file or directory 

私はこのファイルが存在しないと確信しています。

助けてください、ありがとう!

答えて

22

ユーザーがhdfsであるため、/root/(ローカルHDD)のアクセス権はありますか。通常、あなたはしません。 file1.txtは、hdfsユーザーに読み取り権がある場所にコピーする必要があります。

試してみてください。

cp /root/MyHadoop/file1.txt /tmp 
chown hdfs:hdfs /tmp/file1.txt 
sudo -u hdfs hadoop fs -put /tmp/file1.txt/

---編集:

the cleaner roman-nikitchenko's answer bellowを見てみましょう。

+0

おかげでそれを置くが、私は次のコマンドを入力し、別の場所にこのファイルを移動しようとした:{sudoの - hdfs hadoop fs -put /home/skfeng/Downloads/hadoop-book-master/test-data/ch1/file1.txt /}それでも動作せず、同じ結果が得られます:{put: '/ home/skfeng /Downloads/hadoop-book-master/test-data/ch1/file1.txt ':そのようなファイルやディレクトリはありません } – skfeng

+1

ユーザ 'hdfs'はユーザ' skfeng'の家へのアクセス権を持っていますか? –

+0

更新された回答。コマンドとクロスフィンガーのリストを試してみてください。 –

16

私は同じような状況があったし、ここに私のソリューションです:

HADOOP_USER_NAME=hdfs hdfs fs -put /root/MyHadoop/file1.txt/

利点:

  1. あなたはsudoは必要ありませんが。
  2. 実際には適切なローカルユーザー 'hdfs'はまったく必要ありません。
  3. 以前の点が原因で、何もコピーしたりパーミッションを変更する必要はありません。
+2

私は好きですこの解決法、しかし私はいつも環境変数名は何かを忘れる:P +1 –

4

usigでHDFSでディレクトリを作成しよう:$ hadoop fs -mkdir your_dir し、それに$ hadoop fs -put -put /root/MyHadoop/file1.txt your_dir