最終更新:ID:ZSR3+DY93g 2010年10月03日(日) 15:40:34履歴
Hadoop本 5章 MapReduceアプリケーションの開発の疑問点や気になる点について記述してください。
※記入者、該当ページ・該当行は忘れずに書いて下さい。
※記入者、該当ページ・該当行は忘れずに書いて下さい。
- [記入者] terurou
- [該当箇所] 127〜130ページ(5.1 設定API)
- Configurationは .addResouce() で複数のXMLを指定できる。後から追加したリソースで定義したプロパティが、先に定義したプロパティをオーバーライドする。
- <final>true</final>が指定されたプロパティはオーバーライド不可になる。
- [記入者] terurou
- [該当箇所] 131〜133ページ(5.2.1 設定の管理)
- hadoop -conf xxx.xml で設定ファイルが切り替えられるので、テストなどで実行環境を切り替える際に便利
- [記入者] terurou
- [該当箇所] 133〜135ページ(5.2.2 GenericOptionParser、Tool、ToolRunner)
- Toolインタフェース = Hadoopアプリケーションを実装する際にMainとなるもの、ToolRunnerクラス = Toolを実行するもの
- 単にMapReduceプログラムを実行するだけならhadoopコマンドだけで済むが、テスト/デバッグを行う際にはToolを実装したほうが良いみたい。
- [記入者] terurou
- [該当箇所] 137〜140ページ(5.3 ユニットテストの作成)
- mapper, reducerは処理結果をreturnで返すのではなく、OutputCollectorに対して書き込みを行うインタフェースになっているため、そのままでは処理結果の検証ができない。
- MockitoなどのモックフレームワークでOutputCollectorのモックを作成すると良い。
- [記入者] terurou
- [該当箇所] 140〜142ページ(5.4.1 ローカルJobRunnerでのジョブの実行)
- MapReduceプログラムのシンプルなテスト用途に設計された縮小バージョンのMapReduce実行エンジン。
- デバッガ上で動作させ、ステップ実行することができる。
- 完全なMapReduce実行エンジンとは異なり、reducerを1個しか(0個も可)実行できない制約がある。
- 設定ファイルでmapred.job.trackerプロパティがlocalに設定されていると、ローカルJobRunnerが有効になる。
- [記入者] terurou
- [該当箇所] 144〜146ページ(5.4.2 ドライバのテスト)
- MiniDFSCluster, MiniMRClusterという、プログラムからプロセス内にクラスタを生成するクラスが存在する。
- 完全なHDFS、MapReduceの構成に対しテストを実施できる。
- Hadoop自身の自動テストスイートで広く使われている。
- デバッグし辛い欠点がある。
- [記入者] terurou
- [該当箇所] 146〜153ページ(5.5 ドライバのテスト)
- パッケージ(jar)化
- ジョブの起動 hadoop jar xxx.jar ...
- ジョブの実行状況のWeb UでのI監視 http://jobtracker-host:50030/
- 結果の取得、確認
- [記入者] terurou
- [該当箇所] 153〜155ページ(5.5.5 ジョブのデバッグ)
- System.errに出力するとログファイルに出力される。
- 参考:Hadoop プログラムの単純なデバッグ方法について
- [記入者] terurou
- [該当箇所] 154ページ(5.5.5 ジョブのデバッグ)
- Hadoopのサブプロジェクト、ジョブが出力したログ分析にも使える。
- 「Chukwa は、大規模分散システムを管理するためのオープンソースのデータ収集システムです。」
- [記入者] terurou
- [該当箇所] 157-159ページ(5.5.5 ジョブのデバッグ)
- 大規模なデータに関する問題の多くでは、異常なレコードは廃棄してしまうのが標準のやり方
- 特異点を求めるような場合に廃棄してしまっては元も子もないので、注意が必要
- 単にプログラムバグの可能性もあるので、異常レコードを発見したらレコードをログに出力すべき
- [記入者] terurou
- [該当箇所] 159-161ページ(5.5.6 リモートデバッガの利用)
- ジョブ実行時の生成される中間データを全て保存するように設定を変更する。keep.failed.task.fileをtrueに。
- ジョブを実行し、Web UIからエラーが発生したノードとタスク試行ID(attempt_)を記録する。
- エラーが発生したノードにログインし、タスク試行IDの中間データを探す。
- エラーが発生したタスクの中間データをIsolatedRunnerに渡して起動する。
- [記入者] terurou
- [該当箇所] 161ページ(5.6 ジョブのチューニング)
- mapperの数 → 平均して数秒単位であれば、もっと長く実行されるように
- reducerの数 → クラスタのreduceスロット数よりわずかに少なくなるように
- combiner → 可能な限り利用して転送するデータ量を減らす
- 中間データの圧縮 → ほとんどのケースでパフォーマンス改善
- カスタムのシリアライゼーション → カスタムのWritableを使っている場合はRawComparatorを利用するように
- シャッフルの調整
- [記入者] terurou
- [該当箇所] 162ページ(5.6.1 ジョブのチューニング)
- チューニングを行う際は、プロファイラを使って実行時間やメモリ使用量を取得しましょうね
- ローカルJobRunnerに対してプロファイラをかけるのはあまり意味が無い。クラスタに対してプロファイラをかけるべき。
- [記入者] terurou
- [該当箇所] 166ページ(5.7.2 依存ジョブの実行)
- このあたりの図を参照
- そういえばHadoop座談会#01で、みんなDAGって言ってた
- [記入者] terurou
- [該当箇所] 166-167ページ(5.7.2 依存ジョブの実行)
- 直線的な連鎖の場合、単純に先行ジョブが終了するまで待っていればよい。
- DAGを形成するジョブの場合はJobControlやOozieを利用する。
このページへのコメント
MaQ8la <a href="http://gmgnyeakrypx.com/">gmgnyeakrypx</a>, [url=http://uaarsykwvfdr.com/]uaarsykwvfdr[/url], [link=http://qturljbxyion.com/]qturljbxyion[/link], http://juigasjqxzwx.com/
sqSq5l <a href="http://qzdyzryrmjez.com/">qzdyzryrmjez</a>, [url=http://bhhoufvxhnep.com/]bhhoufvxhnep[/url], [link=http://nehemspwyyqz.com/]nehemspwyyqz[/link], http://ozzdxbtdqfds.com/
Hq9Ook <a href="http://yfugqrziqgrt.com/">yfugqrziqgrt</a>, [url=http://llvbmakqtzlo.com/]llvbmakqtzlo[/url], [link=http://iuzkyrcyecon.com/]iuzkyrcyecon[/link], http://rjucbkebevvo.com/