-1

FTP サーバー (F [ftp])、Linux ボックス (S [スタンドアロン])、および Hadoop クラスター (C [クラスター]) があります。現在のファイル フローは F->S->C です。S をスキップしてパフォーマンスを向上させようとしています。

現在の流れは次のとおりです。

wget ftp://user:password@ftpserver/absolute_path_to_file
hadoop fs -copyFromLocal path_to_file path_in_hdfs

私は試した:

hadoop fs -cp ftp://user:password@ftpserver/absolute_path_to_file path_in_hdfs

と:

hadoop distcp ftp://user:password@ftpserver/absolute_path_to_file path_in_hdfs

両方ともハングします。ジョブである distcp はタイムアウトによって強制終了されます。ログ (hadoop job -logs) は、タイムアウトによって強制終了されたとだけ述べています。Cのいくつかのノードからftpからwgetしようとしましたが、うまくいきました。その理由と、それを理解するためのヒントは何でしょうか?

4

2 に答える 2

2

stdin を介してパイプします。

 wget ftp://user:password@ftpserver/absolute_path_to_file | hadoop fs -put - path_in_hdfs

シングル - 標準入力から読み取るように HDFS put に指示します。

于 2014-09-24T05:07:25.350 に答える
-2

hadoop fs -cp ftp://user:password@ftpserver.com/absolute_path_to_file path_in_hdfs

ソース ファイルがローカル ファイル システム内のファイルであるため、これは使用できません。通過しようとしているスキームは考慮されません。javadoc: FileSystemを参照してください。

DISTCP は、大規模なイントラまたはインター クラスター専用です (Hadoop クラスター、つまり HDFS として読み取られます)。ここでも、FTP からデータを取得できません。2 ステップのプロセスが最善の策です。または、FTP から読み取り、HDFS に書き込むプログラムを作成します。

于 2014-09-23T18:07:54.007 に答える