最適化に焦点を当てたことのHBase :()

 

まず、サーバーのチューニング

1、パラメータの設定

1)、hbase.regionserver.handler.count:この設定は、RPCを処理するスレッドの数を決定し、デフォルト値は10であり、例えば、一般的に大に調整することができる:150、使用して、このような大規模なPUTなどのコンテンツ大きい(MBを、要求されたときキャッシュスキャン)する場合、設定値が高すぎる場合、それは頻繁にGCを引き起こして、あまりにも多くのメモリを取るか、またはそこにOutOfMemory、値が大きく、より良いではありませんので。

2)、hbase.hregion.max.fifilesize:設定領域サイズは、バージョン0.94.12デフォルトでは10G、関係のクラスター領域のサイズをサポートするためのデータの総量、あるデータの総量が少ない場合、単一領域は、大きすぎるを助長されていませんクラスタは、総データのより大きな量をサポートする必要がある領域が小さすぎる場合には、総ディスクはRS 3Tのために設定されている場合の処理​​の並列データは、それは、地域の管理の高コストで、その結果、過剰な数の領域に発生します* 12 = 36Tデータ量、データ複製部3の各領域の最大図10Gは、1000までの領域は、ルックので、デフォルト設定は94.12非常に適している場合、RSサーバは、10Tのデータを格納することができるが、しかしあなたは自分のスプリットを管理したい場合は、一定の期間内に、各地域のデータサイズは一定量のデータの下にあるように、テーブル、領域事前に構築されたの建設に計画された地域とのrowKeyデザインの価値と数を上げる必要があります代わりに、クラスタが自動的に分割HBaseのは放棄されますHBaseの、一般的にオンラインサービスを提供し、その後、分割操作テーブル全体に拡張することが大きな地域、または地域のニーズを発見したときに 自分のスプリットを管理します。

3)、hbase.hregion.majorcompaction:間隔主要複合構成、デフォルトは1日です、自動主要な組み合わせを禁止するために0に設定することができる手動で実行することができ、または周期主要な二つのコンパクトとして援用スクリプト:マイナー及びメジャー後、マイナーは一つの大きなstoreFileに、通常はいくつかの小さな隣接storeFileマージ、マイナーは削除されたデータや古くなったデータ、主要削除し、削除データ、主要な合併、格納する必要があるとしてマークされて削除されることはありませんでしょうだけ書き換えられたすべてのデータを格納するstoreFileファイルには、大きなパフォーマンスのオーバーヘッドがあります。

4)、hbase.hstore.compactionThreshold:compactionThresholdが構成storeFile hstoreの数>値=、それはコンパクトであってもよいし、デフォルト値は3であるが、定期的に主要なコンパクトファイルの残りに、実施例6に、大転送することができ合併。

5)、hbase.hstore.blockingStoreFiles:hstoreのhbase.hstore.blockingWaitTime設定時間が既定を超えない限り、ファイルの数は、前分割またはコンパクトflflushmemstoreあると、構成storeFile値よりも大きいが、7で大調整、など。 100、それによって、書き込み操作をブロックし、大規模な書き込みをブロックmemstoreをトリガーするときmemstoreがタイムリーに、flflushない避けるために。

6)、hbase.regionserver.global.memstore.upperLimit:デフォルト値0.4、総メモリのすべてのRS memstore上位メモリの占有割合は、この値に達すると、flflushのためのRSから最もflflush領域全体を検索するために必要とされるであろうメモリ比率の合計数が制限値を下回った、とドロップがすべての書き込み操作が、書き込みベースのクラスタ化するために、かつての制限レートをmemstore以下ブロックしますまで、あなたは、あまりお勧めしません設定項目を上げることができますブロックキャッシュとmemstoreキャ​​ッシュの合計サイズが0.8を超えることはありませんし、2つのキャッシュの合計サイズがOOMを避けるために、0.8またはその近くではお勧めしませんが、ビジネスの好意を書いている時点で0.45に設定することができますので、memstore.lowerLimitは0.35残っていませんごく小さな書き込み動作がない限り、読み出し動作に有利な変化は、読み取りと書き込みの両方の場合、、、ダウン次いで低すぎないながら低いmemstore.lowerLimit 0.3、0.35に下げ、又は0.05ポイントとすることができます、デフォルト値が使用されます。

7)、hbase.regionserver.global.memstore.lowerLimit:デフォルト値は0.35、総メモリのすべてmemstore割合が低いためRSメモリ、この値に達すると、それはRSから最もflflush全領域を見つける必要がありますflflush、memstore.upperLimit構成とブロックキャッシュ構成組み合わせること。

8)、fifile.block.cache.size:RSのブロックキャッシュメモリサイズ制限、デフォルト値は0.25であり、読み出し動作の偏向が適切に動作試験HBaseのために大きな値を調整することができる、請求クラスタサービスの具体的な構成、メモリ会計と組み合わせが考えられmemstore。

9)、hbase.hregion.memstore.flflush.size:128Mのデフォルト値は、バイト単位で、よりHDFSにflflush以上である、比較的控えめな値を調整する必要はありません。

10)、hbase.hregion.memstore.block.multiplier:デフォルト2、memstoreのメモリサイズが2倍にhbase.hregion.memstore.flflush.size以上持っている場合、それはに落ちたまで、書き込み操作がmemstoreをブロックされます値は、発生するジャムを回避するために、のような最高の転送大きい値、4は、大きすぎない、大きすぎる場合、それは全体RS memstore memstore.upperLimitメモリを引き起こす可能性を増加させるには限界を超えて、さらに障害物を増加させます全体RSのチャンスを書きました。閉塞が発生した場合、スレッドの数は、他の領域が減少するので、地域は、次のような全体的なRSのサービス機能に影響を与える、と地域でブロックされたスレッドの多くにつながります。

ブロック開始しました:

 

 

 

ロック解除は、ブロックされました:

 

 

開始から10分11秒には合計時間9秒で書き込むことができない9秒、ロックを解除するために10分20秒をブロックし、この期間にスレッドハンドラRSを大量に消費することができ、または他の領域とスレッドの数は徐々にので、全体的なパフォーマンスに影響を与え、減少しますが、また、

非同期の書き込み、および回避の混雑への書き込み速度を制限します。

11)、hfifile.block.index.cacheonwrite:時間指数は、デフォルトはfalse、trueに設定されている、より良いパフォーマンスが読んでも、ブロックキャッシュにマルチレベル・インデックス・ブロックのことができます(非ルート)無根置くの書き込みしかし、副作用を調整する必要があるかどうか

確認してください。

12)、io.storefifile.bloom.cacheonwrite:デフォルトはその役割を調査するために偽の、必要です。

13)、hbase.regionserver.regionSplitLimit:領域のコントロール最大数、動作に分割することができない場合、デフォルトはInteger.MAXある、1に設定することができ、クラスタがアイドル状態のときに実行するように手動で、自動的に分割を禁止し、または書き込みスクリプト。それは自動的に分割を禁止しない場合領域がhbase.hregion.max.fifilesizeスプリットオペレーションをトリガよりも大きい場合、(特定だけでなく、パラメータ制御により、予め分割領域データとmemstoreの量を考慮し、特定の戦略を分割しましたサイズ)、各flflushまたはコンパクト後、リージョンサーバーは、最初の組立ラインオフして、行分割後の領域に、プロセスは非常に高速になります古い領域に分割し、あなたが分割を必要とするかどうかを確認しますが、二つの問題があるでしょう:①組立ラインオフ古い領域の後、失敗しますフロントラインクライアントアクセスの新領域は、リトライ処理は成功しますが、システムは、長い応答時間が長くなり、リアルタイムのサービスを提供する場合、アクション後のコンパクト②splitは、資源のより消費があります。

)14は、JVMは、メモリサイズを調整:マスタデフォルト1Gは、2Gまで増加させることができる、リージョンサーバーリソースのZK消費を調整せずに可能ではない、大きな、又はより大きな1G、調節可能、10Gデフォルト; B、ガベージコレクション:ペンディングリサーチ。

2、他のチューニング

1)カラムファミリーは、できるだけ短くすることのrowKey、カラムファミリー名とのrowKeyを格納する各セルの値は、カラムのも名前ができるだけ短くなければならない、次のデータテーブルTEST2とHDFSに格納されたコンテンツファイルのスクリーンショットは、次のとおりである:a図に示す:短いカラムファミリ名、のrowKey、ファイルサイズの最終内容に列名多大な影響。

領域RSの2)数:複数領域の5G及び総数に達した領域RSよりも数が多い場合に一般的に言えば、各すぎないリージョンサーバー1000は、領域は、よりコンパクトで、その結果、あまりにも多くのより小さなファイルをもたらします1000年には、拡大を検討すべきです。

3)に示すように、テーブルの構造:

 、複数のないバージョンの場合、バージョン= 1に設定されるべきです。

 B、てきぱきターンLZOまたは圧縮は、圧縮は、いくつかのCPUを消費することになるが、ディスクIOとIOネットワークは大きな改善が4〜5倍程度に圧縮することが可能になります。

 C、合理的な設計のrowKey、完全に合理的に予見可能な既存事業と将来のビジネスを理解し、無理のrowKey設計はHBaseのの貧弱な運用パフォーマンスにつながるとのrowKey必要性を設計します。

異なるRS、完全な遊びクラスタの役割にデータを読み書きするD、計画データの合理的な量、使用時の事前パーティションテーブルの分割避ける定数、と。

E、などなど、できる限り短く列ファミリ名:「F」、および1つの列のみのグループにしてみてください。

 fは、シーンオープンbloomfifilterに応じて、最適化は、パフォーマンスをお読みください。

二、クライアント側のチューニング

1、hbase.client.write.buffffer:書き込みキャッシュサイズは、2Mのデフォルトは、推奨設定は、当然のことながら、バイト単位で、6Mでない方が良い、大きすぎる場合は、メモリがあまりにも占有大きめ。

2、hbase.client.scanner.caching:スキャンバッファは、デフォルトでは、原則的には、クライアントとRS、一般的に数百人の最大のメモリの過度の占領を避けるためには大きすぎるかもしれ特定のサービス機能に応じて、あまりにも、設定することができる1でありますデータが大きすぎる場合、それは小さい値、データ等のクエリのビジネスニーズ、片の通常セット番号を設定すべきである:ビジネス特性は100の最大値を決定し、それを100に設定することができます

3、および適切なタイムアウトの再試行を提供し、具体的な内容は、後続のブログで詳しく説明します。

4、クライアントアプリケーションの別々の読み取りおよび書き込みは、読み込みと異なるTomcatインスタンスにある書き込みの分離は、データが最初にキャッシュされた場合(Redisのキュー、メモリを返すことに失敗した書き込みキューがRedisの場合は、先読み、その後、非同期書き込みをHBaseのキャッシュされたRedisのデータを書かれていますノートにここで読むのHBaseを読んでいない場合は、RedisのRedisのバッファキュー)ではありません。HBaseのクラスタが利用できない場合、又はRSは、リードを切った場合の再試行の回数およびタイムアウトのHBaseは、(通常のサービスへのアクセスを確保するために、比較的小さな値に比較的大きな調整することができないされているので、RSは、利用できない場合または書き込み、スレッドが職業を長くしてTomcatのリクエストで、その結果、その単一の操作が長時間続くことができることを、秒または分)の数十を続くことがリトライとタイムアウトの数の後、Tomcatのスレッドの数は限られ、それが速くなります他の操作、別々の読み取りと書き込み、書き込み、Redisのキューへの書き込みのおかげで、その後、非同期書き込みのHBaseを行うには、スペアのスレッドで、その結果、仕上がりを占め、そのスレッドTomcatの問題はありません満たされていることがある場合、アプリケーションはまた、サービスを書いて提供することができます充電やその他のサービス、あなたが失う収入ではないだろう、とスレッドTomcatの読みが満たされているタイムサービスは、運用・保守タイムリーな介入、読み取りサービスへの影響は比較的限られている場合も、長くなって表示されます。

図5は、org.apache.hadoop.hbase.client.HBaseAdminは豆のバネとして構成されている場合、あなたは遅延ロードとして設定する必要があり、避けリンクはダウングレードの一部を実行できない、ブート時に起動に失敗し、マスターの失敗にリードをHBaseの。

6、スキャンクエリの最適化プログラム:

①キャッシュ調整。

これは、全表スキャンのクエリ、または定期的なタスクに類似している場合②、あなたは無用キャッシュを避けるために、偽のスキャンsetCacheBlocksを設定することができます。

③閉じるスキャナは、クライアントとサーバのメモリを無駄にしないようにします。

④スキャン範囲の定義:クラスタは、クエリを指定するために、列または列を指定しました。

⑤のみクエリのrowKey場合、KeyOnlyFilterが大きくネットワークのオーバーヘッドを減らすことができる使用して、コーディネータ状態依存データが格納されているとしてのHBaseおよびZK HDFS、また同調される必要があります。

ZKチューニング:

①zookeeper.session.timeout:デフォルト値は、原因のサービス、またあまりにもコンフィギュレーションを停止HBaseの2回が行われているため、1分の構成に、3分は短すぎるように構成することができません回避残業セッション、HBaseのストップサービス、オンライン本番環境であります長い、長すぎる場合は、RSがハングアップするとき、ZKはすぐに知ることができない、地域のマスターをリードすると、タイムリーに移行することはできません。

数②zookeeper:少なくとも5つのノード。各飼育係のためのメモリの約1G、好ましくは別のディスクを有します。(独立したディスクは影響を受けませんのZooKeeper確保することができます)。クラスタの負荷が重い場合、同じ飼育係とリージョンサーバーで実行されません。

上記のマシン。DataNodesとTaskTrackersのように、唯一例えば、ちょうどZKの半分以上が提供される:5の合計を、そして2、3、台湾をぶら下げ最大ランとして構成された4つのためにのみ実行するようにハングアップ。

③hbase.zookeeper.property.maxClientCnxns:接続のZK最大数、300のデフォルトを設定することができる数千

三、HDFSチューニング:

①dfs.name.dir:名前ノードデータ格納アドレスは、あなたが別のディスクに配置、複数の設定およびリモートのNFSファイルシステムを構成することができ、そのようなNNデータは複数のバックアップを持つことができます

②dfs.data.dir:大幅に並列に読み書きする能力を高めることができるDNデータ格納アドレス、各ディスク構成のパス、

③dfs.namenode.handler.count:RPCノードNnの処理スレッドの数、デフォルトは10であり、改善する必要性、例えば60

④dfs.datanode.handler.count:スレッドRPC処理のDNノード番号、デフォルトは3であり、改善する必要性、例えば20

⑤dfs.datanode.max.xcievers:DNがファイルを限定同時に処理、デフォルトのような、改善する、256:8192

⑥dfs.block.size:ファイルが保存されている場合、DNデータブロックサイズを、デフォルトは、64Mであるが、比較的大きな転送大きなファイルはバイト単位で述べ、HBaseのを使用する場合、128Mに設定することができ、例えば、考慮することができるされています

⑦はdfs.balance.bandwidthPerSec:ファイルのコントロール転送はstart-balancer.shスピードのロードバランシングを行う場合、デフォルトは1M / sである、例えば、M / Sの数十として構成することができます:20M / sの

⑧dfs.datanode.du.reserved:各ディスクの空き領域が確保さ、非HDFSのファイルは、デフォルト値のために確保一部を設定する必要があります0

⑨dfs.datanode.failed.volumes.tolerated:起動時にハングアップDN悪いディスクの数が発生しますデフォルトでは不良ディスクで、ハングdnは、調整することができない、0です。

おすすめ

転載: www.cnblogs.com/tesla-turing/p/11959933.html