私はHadoop(AmazonのEMR)でストリーミングジョブを実行しています。マッパーとレデューサーはPythonで書かれています。私はJavaで同じマッパーとレデューサーを実装する(またはPigを使用する)場合、私が経験する速度の向上について知りたい。Streaming or Custom Jar in Hadoop
特に、ストリーミングからカスタムjarデプロイメントおよび/またはPigに移行する際の人々の経験と、これらのオプションのベンチマーク比較を含むドキュメントを探しています。私はこれを見つけましたquestion、しかし答えは私のために十分ではありません。私はJavaとPythonの比較はしていませんが、HadoopのカスタムjarデプロイメントとPythonベースのストリーミングの比較を探しています。
私の仕事は、GoogleブックスNGgramデータセットからNGramカウントを読み取り、集約メジャーを計算しています。計算ノードのCPU使用率は100%に近いようです。 (私はCPUバインドやIOバインドジョブの違いについてあなたの意見を聞きたいと思います)。
ありがとうございます!
アマノ
ありがとう!私はすでにプレーンテキストの入出力要件を持っているので、カスタム入力フォーマットは私の場合とは無関係です。 ブタの評価では、私はむしろそれから離れているかもしれないと私に伝えます。私は既にPythonの実装を持っています。 私のスクリプトはCPUを大量に消費します。彼らはちょうど標準入力から読んで、いくつかの番号をクランチし、結果を出力します。しかし、それは私のHadoopの仕事がCPUバウンドとみなせるかどうかは分かりません。いずれにしても、私が本当に尋ねたかったのは、ジョブがCPUバウンドかIOバウンドかどうか、そしてそれがカスタムjarまたはストリーミングジョブとして実装されているかどうかの相互作用でした。 –
Maps and Reduceタスクが独自のJVM上で実行されていることと、mapおよびreduce関数がCPUバウンドであるという事実を考慮すると、これらの個々のHadoopタスクはCPUに束縛されます。 HadoopジョブのコーディネーティングJVMは、データをマップに送信してレイヤーを削減する個々のタスクからの応答を待っているため、ほとんどの場合IO集中型です。 –
実際には、マップと縮小タスクが実行されているJVMもIO(HDFSからの入力でストリーミングを行い、出力をHDFSに書き込む)を処理することに気付きました。 hadoopはマップ関数がデータのどこに近いかを保証するので、一般的にかなり高速です(これはreduce関数には当てはまりません)。 –