5

私は HBase を初めて使用しますが、HBase と Hadoop についてセットアップしてある程度の知識を得ました。

私は HBase MemStore について勉強していましたが、MemStore について理解したのは、「MemStore は、HBase が書き込みまたは読み取りが必要なデータを配置するメモリ内の場所である」ということだけでした。そのため、memstore についていつどこで読みたいかというと、ガベージ コレクションについての議論も見られます。

私の質問は、memstore の唯一の目的は、読み取り可能および書き込み可能なデータをメモリ内に保持することですか? また、そのメモリのサイズを調整して、hbase からの応答を速くすることはできますか? ガベージ コレクションの構成 (コレクターの構成) は memstore に影響しますか? 私が思うに、そうあるべきです。:)

4

2 に答える 2

6

あなたはHbase Memstoreについて正しいです。一般に、何かが HBase に書き込まれると、最初にメモリ内ストア (memstore) に書き込まれ、この memstore が特定のサイズに達すると*、ストア ファイルにディスクにフラッシュされます (すべてがすぐにログにも書き込まれます)。耐久性のためのヤスリ)。

*グローバルの観点から、HBase はデフォルトでヒープの 40% を使用します (プロパティ hbase.regionserver.global.memstore.upperLimit を参照)。この制限に達すると、memstore によって使用されるメモリが少なくともヒープの 35% を下回るまで、一部の memstore のフラッシュが開始されます (lowerLimit プロパティ)。これは調整可能ですが、この変更を行うには完全な計算が必要です。

はい、GC は memstore に影響を与えます。実際には、Memstore ローカル割り当てバッファーを使用してこの動作を変更できます。以下の「Avoiding Full GCs in HBase with MemStore-Local Allocation Buffers」に関する 3 部構成の記事を読むことをお勧めします 。 -hbase-with-memstore-local-allocation-buffers-part-1/

于 2012-05-16T05:35:24.010 に答える
0

問題は、テクノロジとしての Java には、多くのオブジェクトを作成および削除するサーバーを処理するという問題があり、同時にすべての要求にタイムリーに応答する必要があることです。根本的な原因はガベージ コレクターです。ガベージ コレクターは、「世界を停止」してメモリをクリーンアップする必要があります。大きなヒープでは、数秒の遅延が発生する可能性があります。
では、HBase でこの問題が発生する理由と、タイムリーに対応する必要がある理由を見てみましょう。
Memstore は、領域データのキャッシュです。データの揮発性が高い場合、多くのオブジェクトが作成/削除されます。その結果、多くの GC (ガベージ コレクター) プレッサーが存在します。
HBase は、大きなデータ セットを処理するリアルタイム システムは可能な限りキャッシュする傾向があるため、その MemStore は大きくなります。
HBase リージョン サーバーは、タイムリーに ZooKeeper と通信して、稼働していることを知らせ、移行を回避する必要があります。GC 間隔が長いと、それを防ぐことができます。
Cloudera が行ったこと - GC の一時停止を回避するために、MemStore に特別な独自のメモリ管理メカニズムを実装しました。Larse は彼の著書で、GC を調整して Region Server との連携を改善する方法について説明しています。
http://books.google.co.il/books?id=Ytbs4fLHDakC&pg=PA419&lpg=PA419&dq=MemStore+garbage+collector+HBASE&source=bl&ots=b-Sk-HV22E&sig=tFddqrJtlE_nIUI3VDMEyHdgx6o&hl=iw&sa=X&ei=79CyT82BIM_48QO_26ykCQ&ved=0CHUQ6AEwCQ#v= onepage&q=MemStore%20garbage%20collector%20HBASE&f=false

于 2012-05-16T05:35:46.660 に答える