1

Hadoop プロジェクトの例を理解しようとしています。次のコードブロックがあります

jconf.setOutputKeyClass(Text.class);
jconf.setOutputValueClass(Text.class);
jconf.setInputFormat(SequenceFileInputFormat.class);

このリンクから、SequenceFileInputFormatの場合、キーと値はユーザー定義であることを読みました。これには RecordReader を実装する必要がありますか? プロジェクトに実装されているとは思いません。入力分割をキーと値のペアに分割するために使用するデフォルトの区切り文字はありますか?

4

2 に答える 2

2

シーケンス ファイルを読み取るために RecordReader を実装する必要はありません。

ただし、シーケンス ファイルの生成は、テキスト ファイルの生成ほど単純ではありません。などのすべてのコマンド

hadoop fs -put

デフォルトで HDFS にテキスト ファイルを生成します。

シーケンス ファイルを入力として期待する MR プログラムをテストする場合は、まずテキスト ファイルをシーケンス ファイルに変換し、それを入力として与える必要があります。

テキスト ファイルからシーケンス ファイルを作成するには、アイデンティティ マッパーを使用し、リデューサーを使用しない単純な MR を記述します。入力ファイル形式をテキストとして設定し、テキスト ファイルを入力として渡す必要があります。このジョブでは、出力形式をシーケンス ファイルとして設定します。このジョブの出力は、シーケンス ファイル形式のテキスト ファイルのコピーになります。このジョブの出力キーと値を選択してください。シーケンス ファイルを使用する後続の MR ジョブは、それらを次のように受け入れる必要があることに注意してください。入力キーと値。つまり、シーケンスファイルのキーと値は、作成時に決定されます。

シーケンス ファイルを期待する後続の MR ジョブ (問題で引用したものなど) は、上記のシーケンス ファイルを使用でき、マッパー入力の「キー」と「値」の型は、以前に発行したものと同じになります。

于 2013-03-08T09:56:51.013 に答える
0

あなたの質問に対して、「キーを識別するために使用するデフォルトの区切り文字はありますか?」心配する必要はないと思います。基本的に、シーケンスファイルはバイナリキー/値ペアで構成されます。SequenceFile.Writer#appendを使用して、キーと値を書き込むことができます。

http://hadoop.apache.org/docs/r1.1.1/api/org/apache/hadoop/io/SequenceFile.Writer.html#append%28java.lang.Object,%20java.lang.Object%29

于 2013-03-08T18:29:23.417 に答える