7

ローカル ファイル システムからマッパーに入力を与えました。Eclipse からは正常に実行されていますが、クラスターからは実行されていません。入力パスが存在しないと言って、ローカル入力パスを見つけることができません。マッパーにローカル ファイル パスを指定して、クラスター内で実行できるようにし、hdfs で出力を取得できるようにします

4

7 に答える 7

5

これは非常に古い質問です。最近、同じ問題に直面しました。ただし、このソリューションがどの程度正しいかはわかりません。これに欠点がある場合は注意してください。私がやったことは次のとおりです。

mail-archives から解決策を読んで、からfs.default.name変更hdfs://localhost:8020/するfile:///とローカルファイルシステムにアクセスできることに気付きました。ただし、すべての mapreduce ジョブにこれを使用したくはありませんでした。そこで、ローカル システム フォルダに のコピーを作成しcore-site.xmlました (MR jar を に送信する場所と同じhadoop jarです)。

そして、私のDriver クラスでMR私が追加したのは、

Configuration conf = new Configuration();
conf.addResource(new Path("/my/local/system/path/to/core-site.xml"));
conf.addResource(new Path("/usr/lib/hadoop-0.20-mapreduce/conf/hdfs-site.xml"));

MRローカル システムから入力を受け取り、出力をhdfs:

于 2013-07-16T13:32:58.350 に答える
3

クラスターで実行するには、データを分散ストレージ (HDFS) にロードする必要があります。最初に使用して HDFS にデータをコピーしてからhadoop fs -copyFromLocal、HDFS 内のデータのパスを指定してジョブを再度切り捨てます。

于 2012-04-11T15:46:30.717 に答える
2

質問は興味深いものです。S3 にデータがあり、ジョブを実行する前に HDFS に明示的にコピーすることなく、このデータにアクセスできます。wordcount の例では、次のように指定します。

Hadoop jar の.jar ワードカウントs3n://bucket/input s3n://bucket/output

これで何が起こるかというと、マッパーは S3 から直接レコードを読み取ります。

これが S3 で実行できる場合、s3n の代わりにこの構文を使用して、同様に Hadoop を実行しないのはなぜですか?

file:///input file:///output

?

しかし、経験的に、これは興味深い方法で失敗しているようです。実際に入力ディレクトリにあるファイルに対して、Hadoop がファイルが見つからないという例外を与えることがわかります。つまり、ローカル ディスクの put ディレクトリにあるファイルを一覧表示できるように見えますが、それらを開いてレコードを読み取ろうとすると、ファイルが見つかりません (またはアクセスできません)。

于 2012-08-24T04:39:16.790 に答える
0

MapReduceジョブがデータを処理するには、データがHDFS上にある必要があります。そのため、ローカルファイルシステム、ネットワークパス、Webベースのストア(AzureBlobStorageやAmazonBlockstoageなど)などのソースがある場合でも、最初にHDFSでデータをコピーしてから、ジョブを実行する必要があります。つまり、最初にデータをHDFSにプッシュする必要があり、データソースに応じていくつかの方法があります。ローカルファイルシステムからなど、ソースからHDFSへのデータ転送を実行するには、次のコマンドを使用します。

$ hadoop -f CopyFromLocal SourceFileOrStoragePath _HDFS__Or_directPathatHDFS_

于 2012-04-11T19:59:21.123 に答える
0

このように入力パスを設定してみてください

FileInputFormat.addInputPath(conf, new Path(file:///ローカル ファイル システムのディレクトリ));

ファイル拡張子を指定すると、ローカルシステムからファイルにアクセスできます

于 2013-04-17T04:25:00.787 に答える