したがって、HBaseテーブルを更新するMapperがあります。地図()関数において、Iは:map()への複数回の呼び出しに1つのハープマップMapperオブジェクトが使用されていますか?
1)行
を追加するHBaseConfiguration
2)インスタンスHTable
3)hTable.putを(呼び出し)回の束をインスタンス4)コールhTable.flushCommits()私の変更をフラッシュする
5)HBaseの
Hへの接続を殺すためにHConnectionManager.deleteConnection()を呼び出ししかし、これは非効率的だと思われる。私は、MaaseクラスのコンストラクタでHBaseConfigurationとHTableをインスタンス化したいと思います。次に、mapperクラスにcloseableを実装させ、close()メソッドでhTable.flushCommits()とHConnectionManager.deleteConnection()を呼び出します。こうすることで、map()の各呼び出しでput()呼び出しをバッファリングし、close()が呼び出されたときに一度にすべての変更をフラッシュします。
ただし、これはmap()への複数回の呼び出しでMapperオブジェクトを再利用する場合にのみ有効です。さもなければ、私はコードだけを残すかもしれません。
したがって、主な質問は、map()を複数回呼び出すために使用されるMapperオブジェクトですか?
ボーナスの問題は次のとおりです。書き直されたコードの方が効率的でしょうか?
ありがとうございました!これはまさに私が必要としていたものです。 – sangfroid
こんにちは、 私はHTableのフラッシュに関する文章を追加したいと思います( "注意しなければならないのは、メモリよりも多くのデータをバッファリングしている場合の終わりよりもコミットをフラッシュすることです。 )は完全に真実ではない。 HTableには、自動的にフラッシュされたバッファが満たされています。 setWriteBufferSize(long writeBufferSize)メソッドに関するドキュメントをお読みください。 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html –
それを知らなかった。ありがとう@ dino.keco! –