sql >> データベース >  >> NoSQL >> HBase

HBase:低メモリEC2で実行するための5つのヒント

    EC2で実行している場合、インスタンスタイプに関しては勝てないことがよくあります。利用可能なより費用効果の高いタイプの1つは、c1.xlargeです。圧縮を処理するのに十分なCPU、適切な量のディスク、および高いネットワークI/Oを備えています。ただし、c1.xlargeの7 GBのメモリが比較的少ないと、同時性の高いHBaseクラスターで安定性の問題が発生することがよくあります。他にも高価なオプションがありますが、このHBaseチュートリアルは、c1.xlargeRegionServerを最大限に活用するのに役立ちます。

    1。 RegionServerあたりのリージョン数を減らします

    理想的には、RegionServerあたり100リージョン未満にする必要があります 。 memstoreは、すべてのアクティブなリージョンで使用できるように分割されており、各リージョンは(デフォルトで)MSLAB用に2MBのメモリを追加します。この数を減らすと、メモリの観点だけでなく、スムーズに実行できるようになります。

    2。他のサービスからメモリを盗む

    これらのインスタンスタイプでRegionServerを使用してTaskTrackerを実行するべきではありませんが、ローカルのDataNodeを実行している可能性があります。通常の構成では、DataNodeに1 GBのメモリが必要ですが、多くの場合、それほど多くは必要ないことがわかりました。これを展開する前にメトリックを確認してください。ただし、DataNodeヒープを400MBに削減することは完全に安全でした。 。この素敵な624MBのチャンクは、HBaseがもう少し先に進むのに役立ちます。

    3。 MSLABを調整または無効にします

    メモリを盗んで領域を削減した後もまだ問題が発生している場合は、さらに一歩進むことができます。前述したように、MSLAB機能は、リージョンごとにデフォルトで2MBのヒープオーバーヘッドを追加します。 このバッファを調整できます hbase.hregion.memstore.mslab.chunksizeを使用 。低くするほど効果は低くなりますが、メモリのオーバーヘッドも少なくなります。 hbase.hregion.memstore.mslab.enabledを使用して完全に無効にします 。

    4。キャッシングとバッチ処理に積極的に取り組む

    キャッシング(Scan#setCaching(int) )およびバッチ処理(Scan#setBatch(int) )大規模なスキャンでのネットワーク遅延の影響を制限するのに最適です。残念ながら、クライアント側とサーバー側の両方でより多くのメモリが必要になります。速度のトレードオフに注意してください。ただし、これらを調整することで、もう少し安定性を楽しんでください 、必要に応じて1の値に近づけます。

    RegionServerには、すべての同時書き込みを処理するのに十分なメモリも必要です。書き込みを大量にバッチ処理する場合、またはいくつかの非常に大きなセル値を送信する場合は、OutOfMemoryExceptionsが発生する可能性があります。ここでもバッチ処理を下げるか、セル値のサイズを縮小する方法を見つけてください。

    5。 Hadoopからの負荷を制御する

    HBaseデータに対してHadoopジョブを実行している場合、基本的に多くの大規模なスキャンを実行しています。 HBase MapReduceジョブでは、各リージョンがマッパーになります。 RegionServerごとに複数のリージョンがある場合、ある時点で同じRegionServerを同時にスキャンするマッパーが数人いる可能性があります。これらのスキャンはそれぞれ、メモリ、ディスク、およびCPUリソースを消費しており、複数のビルドが発生すると、問題が発生する可能性があります。

    hbase.regionserver.handler.countを下げる メモリを使用するアクティブな接続の数を制限するのに役立ちますが、すべてのハンドラーが大規模なフルリージョンスキャンを処理している場合は、問題が発生する可能性があります。 TableInputFormatの拡張機能を使用すると、単一のRegionServerに対して実行される同時マッパーの数を簡単に制御できます 、より予測可能なメモリ使用量を提供します。

    レデューサーからHBaseに書き込む場合は、そこでもパーティション化を制御する必要があります。これは、HadoopのPartitionerを使用して簡単に実装できます。 HBaseのHBaseAdminとのインターフェース リージョンをRegionServerマッピングに提供するインターフェイス。

    低メモリでHBaseを実行するのは難しいですが、不可能ではありません

    これらのヒントが手元にあれば、メモリの少ない環境で操作を存続させるための準備が整っているはずです。非常に安価で高速なRAMの時代に、1メガバイトのメモリをめぐって戦うのはイライラするかもしれません。ただし、これらのヒントに従ってください。CFOは、この費用対効果の高いインスタンスタイプを最大限に活用していただきありがとうございます。もう少し経済的な自由がある人のために、今後の投稿でAmazonの新しいI2インスタンスタイプの影響を調査します 。引き続きご期待ください!

    この記事は元々dev.hubspot.comに掲載されていました


    1. ブラウザで実行されているJavaScriptからRedisサーバーに直接接続できますか?

    2. 集計の並べ替えaddToSet結果

    3. Mongodbをシリアル化するJSON

    4. RedisPub-SubまたはSocket.IOのブロードキャスト