2017-02-02 6 views
1

私はCDH 5.4.1クラスタによって提供されたhadoopを使用しています。 私が直面している問題は、path/tmp/dataを持つhdfs上のディレクトリがあることです。 abc.csvというファイルがあります。 この同じフォルダは、ノードの1つ(ノード1)のローカルlinux fsまた、csvファイルxyz.csvを含んでいます。ローカルノードにも同じパスが存在する場合、HDFSは混乱します

node1から次のコマンドを実行しているとき:hdfs dfs -ls /tmp/data/*.csv出力にabc.csvが表示されると予想していますが、 ls: `/ tmp/data /xyz.csv ':そのようなファイルやディレクトリはありません ローカルのLinux fsで同じフォルダパスを持っていない他のノードでも、同じコマンドを実行すると正しい出力が得られます。

私はhdfsコマンドを使用していたので、hadoopはdfsスペースだけを見てローカルLinuxのfsと混同しないようにしていましたが、間違っているようです。

この現象の背景には、何が原因である可能性があるかについての情報を提供してください。

答えて

2

けれどもあなたはバッシュの効果を見ている、CDHまたはHDP管理された環境内で設定(または任意選択のあなたのシェル)する必要があります。ローカルファイルシステム上に/tmp/data/xyz.csvというファイルがあります。したがって、実際に呼び出されるコマンドはhdfs dfs -ls /tmp/data/xyz.csvです。 xyz.csvはHDFSクラスタに存在しないため、ファイルが見つからないと報告されます。

あなたはグロブ拡大を防ぐために、単一引用符であなたの引数をラップすることにより、この問題を回避することができます

> # local file system 
> ls /tmp/data/*.csv 
/tmp/data/xyz.csv 

> # attempting to check HDFS, but wildcard expansion happens before invoking command 
> hdfs dfs -ls /tmp/data/*.csv 
ls: `/tmp/data/xyz.csv': No such file or directory 

> # wrap in single quotes to prevent globbing expansion 
> hdfs dfs -ls '/tmp/data/*.csv' 
-rw-r--r-- 3 naurc001 supergroup   0 2017-02-02 11:52 /tmp/data/abc.csv 
+0

おかげでクリスが。あなたのソリューションは私のためにうまく動作します。しかし、私はディレクトリがどのようにローカルLinuxのfs上で最初に作成されたかについてはっきりしていません。私がやっているのは、/ tmp/dataの場所にあるcsvファイルをhdfsにプッシュすることだけです。これは私が再現することができないいくつかの稀なシナリオで起こっています。この上のポインタは助けになるでしょう。 – Pushkin

+0

ローカルファイルシステム上でパスが予期せず作成された場合、おそらく 'hdfs dfs'コマンドのいくつかが誤ってディレクトリを作成し、HDFSではなくローカルでファイルを作成しています。これは、コマンドに渡されたpath引数がファイルURI( 'file://'の接頭辞)である場合、または完全なHadoop設定(core-site.xmlおよびhdfs-site.xml)なしでコマンドが誤って実行された場合に発生します。効果。設定が見つからない場合、デフォルトの 'fs.defaultFS'はローカルファイルシステムです。 –

1

私の理解では、以来、私はHDFSのDFSを使用していますということでしたがHadoopのが唯一のDFS空間に見ていないしなければならないコマンドが正しくセットアップあなたのHadoopクライアントXMLをした場合にのみ、ローカルのLinux FS

で混乱設定ファイルはhdfs:// URIを使用するようにしていないfile://コア-site.xmlの中

fs.defaultFSのデフォルト値はfile://


0であります

は、この値は正しくグロブとHDFSコマンドに引数を渡す前に、ワイルドカードを展開し

+0

こんにちはcricket_007を、値が正しくファイルに設定されており、HDFSを指す://だけ – Pushkin

関連する問題