1

HTablePoolHTableインスタンスの作成を減らすために使用しようとしています。ただし、マッパー/レデューサーのどこに配置すればよいかわかりませんHTablePool.close()

アプリケーションの実行中は、複数のマシンで実行できる複数のマッパー、レデューサーが呼び出されます。HTablePool最高のパフォーマンスを得るには、マシンごとに1つ必要でclose()あり、アプリケーション全体がシャットダウンするまで呼び出しを遅らせる必要があると思います。しかし、どうすればそれらのマシンにプールを閉じるように指示できますか?

どんな提案も歓迎します!

4

1 に答える 1

1

HTablePoolMap / Reduceジョブのコンテキストでは、使用しても大幅な改善は得られないと思います。

HTablePoolがあなたをもたらすのか:

  • スレッドセーフ:テーブルにをHTablePool使用するSynchronizedMapため、マルチスレッドアプリケーションのコンテキストではこれが便利です。ただし、Map / Reduceジョブのコンテキストでは、複数のノードがあり、タスクは独立しているため、これは実際には役に立ちません。
  • プールされたオブジェクトHTable:プールであるため、毎回をインスタンス化する必要がなくなります。これは、たとえばHBaseに継続的にアクセスする同時リクエストがある場合に有効なステートメントですが、タスクごとに1回テーブルをインスタンス化するため、Map/Reduceジョブにはそれほど多くありません。

ですから、それは実際にはユースケースに依存すると思います。あなたが言ったようにMap / Reduceジョブを使用している場合は、すべてのタスクのメソッドHTablePoolをインスタンス化してsetup閉じる必要があるため、おそらくそれは価値がありません。 cleanup

私が使用を検討する唯一のユースケースはHTablePool、多数の同時リクエストを伴う高頻度のマルチスレッドアプリケーションです。この場合、プールの使用は間違いなく適切なユースケースです。

于 2013-01-15T22:23:03.267 に答える