最終更新:ID:iINjiAJ1kg 2011年01月22日(土) 16:04:55履歴
Hadoop本 7章 MapReduceの型とフォーマット の疑問点や気になる点について記述してください。
※記入者、該当ページ・該当行は忘れずに書いて下さい。
※記入者、該当ページ・該当行は忘れずに書いて下さい。
- [記入者] terurou
- [該当箇所] 191〜193ページ(7.1 MapReduceの型)
- Javaのジェネリクスの制約上、Hadoopには型の推論ができない
- 実行するまで型の衝突はわからない
- 名古屋人にはDISられても仕方がない
- [記入者] terurou
- [該当箇所] 192ページ(7.1 MapReduceの型)
- 続きのページを読み始めたら、パーティション=recuderの入力単位と書いてあった
- reducerが1つ=パーティションも1つ
- patitionerによって各レコードがどのパーティションに属するか(パーティションのインデックス)を確定させる
- map→???→reduce 中間の流れ(partitionerとcombinerのどっちが先?)がいまいちわからないので要調査
- [記入者] terurou
- [該当箇所] 193〜200ページ(7.1.1 デフォルトのMapReduceジョブ)
- この節はMapReduceプログラムを書く際のスケルトンコードとしては非常に有用そう
- [記入者] terurou
- [該当箇所] 200〜201ページ(7.2.1 入力スプリットとレコード)
- スプリットにはデータ参照(ストレージ上の位置=ホスト名を表す文字列、データサイズ)しか持たない
- [記入者] terurou
- [該当箇所] 202ページ(7.2.1 入力スプリットとレコード)
- map関数の外側で値が書き換えてしまう可能性がある
- もしmap関数の外側でKey/Valueの値が必要な場合、かならずコピーを作成すること
- 名古屋人にはDISられても仕方がない
- [記入者] terurou
- [該当箇所] 202〜219ページ(7.2 入力フォーマット)
- FileInputFormat:ファイルをデータソースとして使用するためのベースクラス。
- CombineFileInputFormat:(HDFSのブロックサイズより)小さなファイルが大量にある場合に利用する。
- TextInputFormat:デフォルトのInputFormat。Valueはテキスト1行、Keyはその行のバイトオフセットになる。
- KeyValueTextInputFormat:テキストの各行が"Key[\t]Value"のようにデリミタで区切られたKeyValuePairになっている場合に利用。
- StreamInputFormat:Hadoop Streamingで利用される。
- NLineInputFormat:レコードの作り方はTextInputFormatと同じだが、必ず指定したN行だけで入力スプリットを生成する。通常利用するには非効率だが、Hadoopをシミュレーションなどの並列コンピューティング環境として使う場合に利用できる。
- SequenceFileInputFormat:Hadoop上のバイナリファイル SequenceFile(4.1.1 113ページ〜で解説)を読み込みたい場合に使用。
- SequenceFileAsTextInputFormat:SequenceFileInputFormatの変種。SequenceFileのレコードをTextに変換して入力スプリットにする。
- SequenceFileAsBinaryInputFormat:SequenceFileInputFormatの変種。バイナリデータをそのまま扱う。
- DBInputFormat:JDBC経由でRDBMSのデータを読み込む。大量のmapperから処理を行うとDB側の負荷が大きくなる危険性がある。
- EmptyInputFormat
- [記入者] terurou
- [該当箇所] 202〜219ページ(7.2 入力フォーマット)
- InputFormatインタフェースおよびその派生クラスを継承する
- RecordReaderクラスを継承し、レコードの読み出し方法をカスタマイズする
- [記入者] terurou
- [該当箇所] 207〜212ページ(7.2.1.5 分割の回避、7.2.1.7 ファイル全体をレコードとみなして処理)
- isSplitable()をoverrideし、falseを返すようにする。
- さらにファイル全体を1レコードとしてみなしたい場合、getRecordReader()をoverrideし、1回のnext()でファイル全体を取得するRecordReaderを返すようにする。
- [記入者] terurou
- [該当箇所] 216ページ(7.2.2.4 XML)
- StreamInputFormatとStreamXmlRecordReaderを使えばよい(StreamInputFormatはHadoop Streaming以外でも利用できる)
- パラメータ指定方法
- conf.setInputFormat(StreamInputFormat.class);
- StreamInputFormat.setInputPaths(conf, new Path("xml"));
- conf.set("stream.recordreader.class", "org.apache.hadoop.streaming.StreamXmlRecordReader");
- conf.set("stream.recordreader.begin", "<page>");
- conf.set("stream.recordreader.begin", "<page>");
- conf.set("stream.recordreader.end", "</page>");
- Hadoop StreamingでXMLを読み込む例もみつけた
- [記入者] terurou
- [該当箇所] 217〜218ページ(7.2.4 複数の入力)
- システムを運用していくうちにデータフォーマットが変更されることはよくある
- MultipleInputs#addInputPath()を使えば複数の入力データフォーマットに対応できる
- [記入者] terurou
- [該当箇所] 218〜228ページ(7.2.5 データベースからの入力(と出力)、7.3 出力フォーマット)
- NullOutputFormat:何も出力しない。
- TextOutputFormat:テキストファイルへ出力する。Key/Valueはセパレータ(デフォルトはタブ)に区切られて出力される。Key/Valueのどちらかにnull/NullWritableがセットされている場合、区切り文字なしでnull/NullWritableではない方の値が出力される。共にnull/NullWritableの場合、そのレコード自体が出力されない。
- SequenceFileOutputFormat:SequenceFileを出力する。
- SequenceFileAsBinaryOutputFormat:Key/Valueをraw binaryのまま出力するようにしたSequenceFileOutputFormat。https://issues.apache.org/jira/browse/HADOOP-3460を読んだ方がわかりやすいかも。
- MapFileOutputFormat:MapFileを出力する。MapFileが「キーでソートされている」という性質上、reducerの出力が必ずキーでソートされている必要がある。
- DBOutputFormat
- [記入者] terurou
- [該当箇所] 222〜225ページ(7.3.3.2 MultipleOutputFormat)
- MultipleOutputFormat<TKey, TValue>を継承すると実現できる
- protected String generateFileNameForKeyValue(TKey key, TValue value)
- このメソッドが返す文字列がファイル名(相対パス)になる。相対パスなのでサブディレクトリも作れる。
- [記入者] terurou
- [該当箇所] 225〜227ページ(7.3.3.3 MultipleOutputs)
- MultipleOutputsを使う
- Hadoop本の例よりもhttp://d.hatena.ne.jp/yoshitetsu/20090126/12329655...の例のほうがわかりやすい気がする
- [記入者] terurou
- [該当箇所] 228ページ(7.3.4 遅延出力)
- LazyOutputFormatを使うと最初のレコード出力時にファイルを作成するようになる
- Java APIの場合、LazyOutputFormat.setOutputFormatClass(job, OutputFormat.class)のように書けばよい
- Hadoop Streaming, Pipeの場合は -lazyOutput オプションを使えばよい
このページへのコメント
tfQGZ5 <a href="http://reoumlfnwamk.com/">reoumlfnwamk</a>, [url=http://qnhqlldezhfe.com/]qnhqlldezhfe[/url], [link=http://ngibtwpbswzt.com/]ngibtwpbswzt[/link], http://onamgufsqoac.com/
7E2xKZ <a href="http://pjczfboliyfc.com/">pjczfboliyfc</a>, [url=http://rrgqcsvkswse.com/]rrgqcsvkswse[/url], [link=http://kqghiopjffil.com/]kqghiopjffil[/link], http://vhqkjxcmhfqt.com/