ローカルファイルシステムからマッパーに入力を与えました。これはEclipseから正常に実行されていますが、ローカル入力が見つからないためクラスタから実行されません入力パスが存在しません。入力ファイルのパスが存在しません。クラスタ内で実行できるように、マッパーにローカルファイルパスを与える方法を教えてください。ローカルファイルシステムディレクトリをクラスタ内のMapperの入力として実行する
答えて
クラスタで実行するには、分散ストレージ(HDFS)にロードされるデータ。最初にhadoop fs -copyFromLocal
を使用してHDFSにデータをコピーしてから、HDFSのデータのパスを与えて再度ジョブを実行してください。
処理するMapReduceジョブのデータはHDFSでなければなりません。したがって、ローカルファイルシステムやネットワークパス、Webベースのストア(Azure Blob StorageやAmazon Block stoageなど)などのソースを持っていても、まずHDFSでデータをコピーしてからジョブを実行する必要があります。 最終的にデータをHDFSにプッシュする必要があり、データソースによってはいくつかの方法がありますが、ソースからHDFSへのデータ転送はローカルファイルシステムなどから実行します。次のコマンドを使用します:-f CopyFromLocal SourceFileOrStoragePath _HDFS__Or_directPathatHDFS_
などの入力フォーマットのユーティリティメソッドを使用してドライバコードに設定します。ローカルプログラムをjavaプログラムを使ってmap-reduceの入力として与えたいのであれば、それをjavaプログラムで指定してクラスター内で実行する必要がありますか? – user1326784
$のHadoopの質問は興味深いものです。 S3のデータを持ち、ジョブを実行する前にHDFSへの明示的なコピーをせずにこのデータにアクセスすることができます。語数の例では、次のように1本を指定します:
Hadoopの瓶例の.jar WORDCOUNT s3n://bucket/input s3n://bucket/output
を何本で起こることはマッパーが直接S3からレコードを読むことです。
これはS3で行うことができれば、なぜ
file:///input file:///output
S3Nこの構文を使用する代わりに、同様にHadoopのではないでしょうか?
経験的には、これは興味深い方法で失敗するようです。実際に入力ディレクトリにあるファイルに対して、Hadoopが例外を見つけられないことがわかりました。つまり、putディレクトリのファイルをローカルディスク上にリストすることができるようですが、レコードを読むためにファイルを開くときにファイルが見つからない(またはアクセス可能な)場合があります。
実際、これについて議論したところ、データはまずHDFSになければならないが、Hadoopマッパーはローカルファイルに存在するレコードを取得する方法がないという答えではありません。ローカルマシン上でサーバを実行する必要はなく、サーバをHadoopに指定する方法もありません。 – Jeff
この
FileInputFormat.addInputPath(confに、新しいパス(ファイル:///ローカルのファイルシステム上のディレクトリ))のように入力パスを設定してみてください。
ファイル拡張子を与える場合、これは非常に古い質問ですLocalSystemの
からファイルにアクセスすることができます。最近同じ問題に直面した。 私はこのことがわかっています。この解決策は私のために働いています。これには何らかの欠点があることに気づいてください。ここに私がしたことがあります。
Reading a solution from the mail-archives、私は私がfile:///
にhdfs://localhost:8020/
からfs.default.name
を変更した場合、それはローカルファイルシステムにアクセスすることができます実現しました。しかし、私はすべての私のmapreduceの仕事のためにこれを望んでいない。そこで私はcore-site.xml
のコピーをローカルシステムフォルダに作成しました(私のMRジャーをhadoop jar
に提出する場所と同じです)。
と私は追加MR
のための私のDriver
クラスでは、
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:
私は3ノードのクラスタを持っています。私はマシン1のローカルファイルシステムからファイルを読み込みたいのですが、どうすればいいですか? – TKHN
に出力を書き込みます。.. 。 それを試してみてください。
ローカルファイルシステムのFileSystemオブジェクトを取得してから、makequalifiedメソッドを使用してpaを返す必要があります私たちはローカルファイルシステムのパスを渡す必要があるので(これを他の方法でinputformatに渡す必要はありません)、make修飾子を使用してローカルファイルシステムパスのみを返します。
コードは以下のとおりです。 。
Configuration conf = new Configuration();
FileSystem fs = FileSystem.getLocal(conf);
Path inputPath = fs.makeQualified(new Path("/usr/local/srini/")); // local path
FileInputFormat.setInputPaths(job, inputPath);
私はそれが私が信じている任意の構成の変更を必要としない...それは私のためにうまく働いた...それは非常に遅れ投稿ですけれども、これは、あなたの条件のために働く願っています。..
util.NativeCodeLoader:ご使用のプラットフォーム用のnative-hadoopライブラリを読み込めません...可能であれば組み込みJavaクラスを使用 スレッド "main"の例外java.lang.UnsupportedOperationException:DistributedFileSystem FileSystem実装では実装されていません –
Uはこれを試してたいかもしれません構成を
に設定すると、Configuration conf=new Configuration();
conf.set("job.mapreduce.tracker","local");
conf.set("fs.default.name","file:///");
これ以降、ローカルパスでurlとfileinputformatを設定することができます。
- 1. DynamoDB Mapper "batchLoad()"入力
- 2. Hadoop Mapperクラスの入力パスを取得
- 3. クラスタ内でMathematicaプログラムを実行する
- 4. Mapperの出力キーの左端2桁でレデューサーを実行
- 5. javascript内のすべてのファイル入力タイプの実行関数
- 6. Hadoop Mapperが自分のクラスを実行していない
- 7. CMDの入力と出力がまだプロセスを実行しているとき
- 8. クラスタ内で実行されているJavaアプリケーションのロードバランシング
- 9. ユーザー入力としてコードを実行するには?
- 10. リストを入力としてスカラーで実行する
- 11. "ブランク入力"と実際の入力としてゼロの値を区別する
- 12. IDEAのローカルマシンでmapreduceを実行しているときとクラスタでhadoopを実行しているときの出力が異なります
- 13. アプリケーション(JMX)監視prometheusを使用してkubernetesクラスタ内で実行
- 14. 入力パターンのクラスタを見つける
- 15. Cのシェルコマンドとしてユーザ入力を実行
- 16. Python Tkinterリスト内の整数としての複数行入力
- 17. リスト内の行を複製して入力する
- 18. 実行時にJersey JacksonのMapper設定を更新します。
- 19. 複数の入力をスキャンして1回実行する
- 20. データベース内のすべての行に列を入力します。
- 21. 複数のテキストファイルの入力としてsys.stdinでコードを実行する方法
- 22. Pythonの実行シェルコマンドとエミュレートユーザー入力
- 23. Love2D、スレッドの実行と入力
- 24. SQLqueryを入力として使用したEF遅延実行
- 25. 複数の文を入力して1行に入力する
- 26. 実行中のスクリプトへの入力としてcronジョブのrunDateを取る
- 27. WebPACKの入力モジュールは、私はWebPACKのを実行すると
- 28. シェルスクリプトを実行し、その出力を次のgradleタスクへの入力として使用する
- 29. Mapperをコンマで区切った値として出力
- 30. Mapperで複数の入力フォルダの場所
ローカルファイルをjavaプログラムを介してmap-reduceの入力として与えたい場合は、どうすれば指定できますかjavaプログラムでは、クラスタ内で実行するように? – user1326784
ファイルをHDFSにアップロードした後、そのファイルを 'TextInputFormat.addInputPaths(job、"/path/to/file/in/hdfs ");' –