まず、表の圧縮
1、HBaseのSanppy
Sanppy HBaseの 。1 )Haodop圧縮配置された [Beifeng @ Hadoopの -senior-のHadoop 2.5.0] $ビン/ Hadoopのchecknative 2 のHBaseに配置) > - >> HadoopのJAR-スナッピーHBaseのlibディレクトリに入れ 、[Hadoopの@ルート -senior libが]#のcpのHadoop-スナッピー-0.0.1-SNAPSHOT.jarに/opt/modules/hbase-0.98.6-hadoop2/lib/ >> ネイティブローカルライブラリを必要とする [ルート@のHadoopの -senior LIB]#のMKDIRは/ opt /モジュール/hbase-0.98.6-hadoop2/lib/ ネイティブ [ルート@のHadoopの -senior ネイティブ ]#のCD /opt/modules/hbase-0.98.6-hadoop2/lib/ ネイティブ / [ルート@のHadoopの -senior ネイティブ ]#のLN - sの/opt/modules/hadoop-2.5.0/lib/ネイティブ ./Linux-amd64-64 [ルート@のHadoopの -senior ネイティブ]#LLを 用量总 0 lrwxrwxrwx。1つのルートルート36 5月27 11:41のLinux-amd64-64 - > /opt/modules/hadoop-2.5.0/lib/ ネイティブ 3 )重启HBaseの [ルート@ Hadoopの -seniorのHBase-0.98.6-hadoop2]#ビン/ hbase- daemon.sh停止マスター [ルート@のHadoopの -seniorのHBase-0.98.6-hadoop2]#ビン/ hbase- daemon.shリージョンサーバーを停止する [ルート@のHadoopの -seniorのHBase-0.98.6-hadoop2]#ビン/ hbase- daemon.shマスター開始 [ルート@のHadoopの -seniorのHBase-0.98.6-hadoop2]#ビン/ hbase-daemon.shスタートリージョンサーバーを
2、試験
##リージョンサーバー启用てきぱき压缩、HBaseの-site.xmlの <プロパティ> <名前> io.compression.codecs </名前> <値>てきぱき</ value>の <説明> を使用することができる圧縮コーデッククラスのリスト のための圧縮/解凍</説明> </ property>の ## のHBase(メイン): 002:0> 't_snappy'、{NAME => 'F1'、COMPRESSION => 'スナッピー'を作成} 0.4710で0行(複数可)秒 =>のHBase ::表- t_snappyの HBaseの(メイン): 003:0> 't_snappy'を記述する 説明有効 't_snappy'、{NAME => 'F1'、DATA_BLOCK_ENCODING => 'NONE'、ブルームフィルタ=> '列'、REPLICATION_SCOPE => '0'、VERS 真 IONS => '1'、COMPRESSION => 'スナッピー'を、min_versionsを=> '0'、TTL => 'FOREVER'、KEEP_DELETED_CELLS => '偽' 、BL OCKSIZE => '65536'、IN_MEMORY => '偽'、BLOCKCACHE => '真'} 1行(S)0.0310秒
2、バージョンとBlockCache
1、Memstore&BlockCache
HBaseのリージョンサーバー主に書き込むために使用memstoreとして2つの部分にメモリ、、; BlockCacheなどの別の部分、主に読み取り用。 要求が最初Memstoreを書きます書き、リージョンサーバーの各領域はMemstore、Memstoreフル64メガバイトを提供します、ディスクにフラッシュのフラッシュを開始します。 Memstoreの合計サイズが制限(HEAPSIZE超える場合 * hbase.regionserver.global.memstore.upperLimit 0.9 )、限界未満フラッシュまで開始Memstore最大から、フラッシュ処理を開始することを余儀なくされるであろう。 まずMemstoreがBlockCacheのチェックを見つける、データを検索するための要求を読んで、それはBlockCacheに読み込むためのディスクと、読み取り結果を見つけることができません。 BlockCacheは、LRU方式を使用するので、従ってBlockCacheを上限(HEAPSIZE到達 * hfile.block.cache.size 0.85 後)、データの最も古いバッチを排除する、除去機構を開始します。 応答時間を読みに焦点を当てたシナリオでは、BlockCacheが大きく設定することができ、Memstoreは、キャッシュヒット率を向上させるために小さく設定してください。
参考博文:https://blog.51cto.com/12445535/2363376
背景: 1 キャッシュはデータベースのための非常に重要である、 2 、理想的な状況は、すべてのデータがメモリにキャッシュすることができるということであるので、任意のファイルIO要求はありません、読み取りと書き込みの性能が極端にバインドされています。 3、私たちは、すべてのデータがキャッシュされ、パレートの法則に従って、サービス要求の80%が20%に集中している必要はありません、ホットデータ 4パーセント、20 のデータ・キャッシュのこの部分以来、キャッシュされたデータの大幅にシステムのパフォーマンスを向上させることができます。 MemStoreとBlockCache:HBaseのは、実装における2つのキャッシュ構造を提供します。 Memstore 。1 、ライトバッファがmemstore呼ばされる 2 、HBaseの書き込み動作memstore第1のデータを書き込み、[ハント]の順に書き込む // このようなコードを、我々は最初の書き込み[ハント]のために理解するには、データを順次memstoreを書き込みます。 3 統一リフレッシュがディスクにデータをMemStoreとして特定の条件は、満たされた後に、この設計は大幅にHBaseのの書き込み性能を向上させることができます。 4 、読み取りパフォーマンスのためにも重要なmemstore、ないMemStoreは、ちょうど書き込まれたデータを読み込む場合は、ファイルからのIOを見つける必要がありますが、これは、価格が高価である、明らかです! BlockCache 。1 、読みキャッシュBlockCacheと呼ばれる 2それ以降、または同じ要求データの検索要求に隣接したが、高価なIO操作を避けるために、メモリから直接入手することができるように、HBaseのは、キャッシュ・ブロックのキャッシュブロックにファイルを検索します。 ## 1 、BlockCache地域Serverレベル、である 2 、リージョンサーバーは、リージョンサーバーが起動するだけで一つのブロックのキャッシュ、完全なブロックキャッシュの初期化されています。 3は、これまでのところ、HBaseのは、3種類のブロックキャッシュプログラムを達成した、LRUBlockCacheは、元の実装計画だった、また、デフォルトの実装であり、HBaseの0.92バージョンは、第二の選択肢SlabCacheを実装して、HBaseの-4027を参照してください。HBaseの0.96後の公式別の代替BucketCache、7404-参照のHBaseを。 4 メモリ管理の3つのプログラム、ことを除いて、 5 すべてのデータがJVMを管理するために、JVMヒープにLRUBlockCacheれます。 図6は、SlabCache BucketCache両者はHBaseの自身の管理に、外部ヒープに格納されたデータの一部に異なるメカニズムを使用します。 外部ヒープメモリデータ管理の使用はこれを防ぐことができますがLRUBlockCacheプログラムのJVMガベージコレクション手順は、多くの場合、長い一時停止につながるので7は、この進化はあります。
LRUBlockCache
デフォルトの実装のHBase BlockCache 1、メモリは、3つの論理的に分割される:シングルアクセス領域、mutilアクセスゾーン、メモリ内の領域、全体サイズBlockCacheの25%を占め、50%、25% 2 、 ACシングル第一の領域にHDFSからブロック装荷ブロック続くランダムリード、 図3に示すように、このデータは、このデータが移動するmutil-に複数の要求アクセスがある場合、フォローアップアクセス領域。 3、IN-ながらメモリフィールドは、典型的には、データ内のデータの少量のメタデータメタ例を頻繁にアクセスを格納するために使用される、ユーザは、テーブルの構造を介して提供することができる、データが常駐メモリであることを示し て列ファミリー性 - = trueにMEMORYメモリ内の領域に、このコラムファミリー。// 参照のHBaseのこの部分-パースtable文の建設http://hbasefly.com/2016/03/23/hbase_create_table/をして パラメータを述べIN_MEMORY; 4は、この設計戦略は、JVMの若いゾーンに似ていることは明らかです古いエリアやパーマエリア。 フェーズ概要: LRUBlockCacheメカニズム:若い地区、旧エリアやパーマエリアへのJVM同様に、彼は分割(SINGLE -accessエリア、mutilアクセスエリア、IN- メモリ領域は、それぞれ、全体BlockCacheサイズを占めた 25%、50%、25%)、このデータに対する後続の要求が複数回存在する場合、アウトシングルアクセスゾーンにHDFSからランダム・アクセス・データでロードは、それがmutil-配置されるアクセス領域を、 とに - そのようなメタデータとしてメモリ領域通常頻繁にアクセスを格納するために使用される永久メモリとすることができるデータ、データ内の少量のデータ、。 // 全廃メカニズムBlockCacheが一定のしきい値に達した後、それが開始される際に、少なくとも使用ブロックが新たにロードされたブロックのためのスペースを確保するために、変位することになります。 短所:LRUBlockCacheキャッシュメカニズムは、CMSのGCポリシーは、真剣に上位層サービスに影響を与える、恐ろしい「ストップ-世界の一時停止をトリガー、悪名高いのフルGCにつながる可能性があり、過剰なメモリの断片化につながるからです。
三、圧縮テーブル
1、圧縮
データがディスクに書き込まmemstoreで磨くことを続けると、それはすなわち、合併によって一つの大きなファイルに複数のファイルを結合します、内部のHBaseはこの問題を解決するためのバトラー機構を有し、より多くのHFILE文書を生成します。 マイナーな組み合わせ(マイナーコンパクション)と主要な組み合わせ圧縮(majar圧密):マージの2種類があります。ファイルの数を減らす大きなファイルの小さな数に書き換えるマイナーマージ複数の小さいファイルが、格納され、 プロセスは、実際にマルチウェイマージ処理です。各ファイルHFILEがそのように私だけで高速なディスクをマージ、通じ分類されているので / Oのパフォーマンスに影響を与えます。 新しいように書き換えカラムHFILE HFILEの複数の組み合わせ群における主要な領域、マイナーマージと比較して、より多くのユニークな特徴がある:主要複合スキャンすべてのキー / 値のペア、全体のデータシーケンスを書き換えるは、 データの書き換えのプロセスは、データの削除対象としてマーク行わスキップします。例えば、期限切れのバージョン番号の制限を生きるために時間をかけてこれらのデータだけでなく、データのために、データを書き換える際には、ディスクに書き込まれていない、この時間アサートの発効を削除します。 ######## StoreFileファイルHRegoin Serverは、バックグラウンドスレッドは、ファイルが制御状態のままであることを保証するために監視されています。より多くのようにディスクの数にStorefileがリフレッシュさと、より多くなっmemstore マイナー固め 軽量 各リフレッシュがstorefileファイルを生成します。数がstorefile特定の条件(設定パラメータの種類を調整することができる)を満たす場合、マージ操作は、比較的小さなstorefile複数のファイルマイナーコンパクションをトリガします Storefileは、それが領域の自動セグメント化をトリガする、一つの大きなファイルにまとめ組み合わされるまで、すなわち、領域分割操作、平坦領域は、単一のファイルを構成するために2つの大きなファイルに分割されている許容最大値を超えています。 ################は、 合併は大容量のファイルを生成storefileのいくつかのstorefile第一世代の合併の条件を満たすようにマイナーな手術を受けた後、それが期限切れにデータとデータを「削除」、および実行がよりstorefileを持つことになりますとしてマークされて削除されません。ファイル。 主要な締固め ヘビー級 操作は、すべてのクライアントに属するすべてのstorefileは、単一storefileファイルにマージするには、ファイルを「削除」のデータと、データが期限切れのマークとマークされ、マージ時に削除されます、そして、それは(ブロッキング)ブロックします要求された地域の合併が完了するまで、最後のマージされたstorefileは、ファイルを削除します。