1. 高可用性
HBase では、HMaster は HRegionServer のライフ サイクルを監視し、RegionServer の負荷を分散する責任があります。HMaster がハングアップすると、HBase クラスター全体が異常な状態に陥り、このときの動作状態は長くは続かなくなります。したがって、HBase は HMaster の高可用性構成をサポートします。
1. HBase クラスターをシャットダウンします (オンになっていない場合は、この手順をスキップします)。
bin/stop-hbase.sh
2. conf ディレクトリにバックアップマスターファイルを作成します。
touch conf/backup-masters
3.バックアップマスターファイルで高可用性 HMaster ノードを構成する
echo hadoop103 > conf/backup-masters
4.conf ディレクトリ全体を他のノードに scp します。
scp -r conf/
--hadoop103:/opt/module/hbase/
scp -r conf/
--hadoop104:/opt/module/hbase/
5.ページを開いてテストして表示しますhttp://hadooo102:16010
2. 事前パーティショニング
各リージョンは StartRow と EndRow を保持しており、追加されたデータがリージョンが保持する RowKey 範囲と一致する場合、データはメンテナンスのためにこのリージョンに渡されます。この原則に従って、HBase のパフォーマンスを向上させるために、データを配置するパーティションを事前に大まかに計画できます。
1. 事前パーティショニングを手動で構成する
Hbase> create 'staff1','info','partition1',SPLITS => ['1000','2000','3000','4000']
2. 16 進シーケンスの事前パーティションを生成する
create 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
3.ファイルに設定されているルールに従って、事前パーティションにsplits.txtファイルを作成します。ファイルの内容は次のとおりです。
aaaa bbbb cccc dddd
次に、以下を実行します。
create 'staff3','partition3',SPLITS_FILE => 'splits.txt'
4.JavaAPIを使用して事前パーティションを作成する
//自定义算法,产生一系列 hash 散列值存储在二维数组中
byte[][] splitKeys = 某个散列值函数
//创建 HbaseAdmin 实例
HBaseAdmin hAdmin = new HBaseAdmin(HbaseConfiguration.create());
//创建 HTableDescriptor 实例
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
//通过 HTableDescriptor 实例和散列值二维数组创建带有预分区的 Hbase 表
hAdmin.createTable(tableDesc, splitKeys);
3. 行キー
データの一意の識別子は RowKey になるように設計されているため、データがどのパーティションに格納されるかは、RowKey が事前にパーティション化された範囲に含まれるかによって決まります。 RowKey を設計する主な目的は、データをすべての領域に均等に分散させることです。 . データの偏りをある程度防ぐ。次に、RowKey の一般的に使用される設計ソリューションについて説明します。
1. 乱数、ハッシュ、ハッシュ値を生成する
比如:
原 本 rowKey 为 1001 的 , SHA1 后 变 成 :
dd01903921ea24941c26a48f2cec24e0bb0e8cc7
原 本 rowKey 为 3001 的 , SHA1 后 变 成 :
49042c54de64a1e9bf0b33e00245660ef92dc7bd
原 本 rowKey 为 5001 的 , SHA1 后 变 成 :
7b61dec07e02c188790670af43e717f0f46e8913
在做此操作之前,一般我们会选择从数据集中抽取样本,来决定什么样的 rowKey 来 Hash
后作为每个分区的临界值。
2. 文字列の反転
20170524000001 は 10000042507102 に変換されます。 20170524000002 は 20000042507102 に変換されます。
これにより、ある程度まで徐々に投入されるデータをハッシュ化することもできます。
3.文字列の連結
20170524000001_a12e 20170524000001_93i7
4. メモリの最適化
HBase は動作中に多くのメモリ オーバーヘッドを必要とします。結局、Table はメモリにキャッシュできます。一般に、使用可能なメモリ全体の 70% が HBase の Java ヒープに割り当てられます。ただし、GC プロセスが長時間継続すると、RegionServer が長期間利用できない状態になるため、非常に大きなヒープ メモリを割り当てることはお勧めできません。通常、16 ~ 48G のメモリで十分です。システム メモリが十分な場合は、フレームワークが占有するメモリが多すぎるため、フレームワークが不十分な場合、フレームワークもシステム サービスが停止します。
5. 基本的な最適化
1. HDFS ファイルへのコンテンツの追加を許可する
hdfs-site.xml、hbase-site.xml
属性:dfs.support.append
解释:开启 HDFS 追加同步,可以优秀的配合 HBase 的数据同步和持久化。默认值为 true。
2. DataNode で許可されるオープン ファイルの最大数を最適化する
hdfs-site.xml
属性:dfs.datanode.max.transfer.threads
解释:HBase 一般都会同一时间操作大量的文件,根据集群的数量和规模以及数据动作, 设置为 4096 或者更高。默认值:4096
3.待ち時間が長いデータ操作の待ち時間を最適化します。
hdfs-site.xml
属性:dfs.image.transfer.timeout
解释:如果对于某一次数据操作来讲,延迟非常高,socket 需要等待更长的时间,建议把 该值设置为更大的值(默认 60000 毫秒),以确保 socket 不会被 timeout 掉。
4.データ書き込み効率の最適化
マップレッドサイト.xml
属性:
mapreduce.map.output.compress
mapreduce.map.output.compress.codec
解释:开启这两个数据可以大大提高文件的写入效率,减少写入时间。第一个属性值修改为 true,第二个属性值修改为:org.apache.hadoop.io.compress.GzipCodec 或者其 他压缩方式。
5.RPCリスナーの数を設定する
hbase-site.xml
属性:Hbase.regionserver.handler.count
解释:默认值为 30,用于指定 RPC 监听的数量,可以根据客户端的请求数进行调整,读写 请求较多时,增加此值。
6.HStore ファイルサイズの最適化
hbase-site.xml
属性:hbase.hregion.max.filesize
解释:默认值 10737418240(10GB),如果需要运行 HBase 的 MR 任务,可以减小此值, 因为一个 region 对应一个 map 任务,如果单个 region 过大,会导致 map 任务执行时间 过长。该值的意思就是,如果 HFile 的大小达到这个数值,则这个 region 会被切分为两 个 Hfile。
7。HBase クライアント キャッシュを最適化する
hbase-site.xml
属性:hbase.client.write.buffer
解释:用于指定 Hbase 客户端缓存,增大该值可以减少 RPC 调用次数,但是会消耗更多内 存,反之则反之。一般我们需要设定一定的缓存大小,以达到减少 RPC 次数的目的。
8. HBaseで取得した行数をスキャンするにはscan.nextを指定します。
hbase-site.xml
属性:hbase.client.scanner.caching
解释:用于指定 scan.next 方法获取的默认行数,值越大,消耗内存越大。
9. フラッシュ、コンパクト、および分割メカニズムは、MemStore がしきい値に達すると、Memstore 内のデータを Storefile にフラッシュします。コンパクト メカニズムは、フラッシュされた小さなファイルを大きな Storefile にマージします。分割とは、リージョンがしきい値に達すると、大きすぎるリージョンが 2 つに分割されることを意味します。
関係する属性: つまり: 128M は Memstore のデフォルトのしきい値です
hbase.hregion.memstore.flush.size:134217728
つまり、このパラメータの機能は、単一の HRegion 内のすべての Memstore のサイズの合計が指定された値を超えた場合に、HRegion のすべての Memstore をフラッシュすることです。RegionServer のフラッシュは、リクエストをキューに追加して、生産モデルと消費モデルをシミュレートすることによって非同期的に処理されます。ここで問題が発生し、キューを消費する時間がなくなり、大量のリクエストのバックログが生成されると、メモリが急激に増加し、最悪の場合、OOM が発生する可能性があります。
hbase.regionserver.global.memstore.upperLimit:0.4
hbase.regionserver.global.memstore.lowerLimit:0.38
つまり、MemStore が使用するメモリの総量が hbase.regionserver.global.memstore.upperLimit で指定された値に達すると、複数の MemStore がファイルにフラッシュされます。MemStore のフラッシュの順序は、サイズの降順で実行されます。 MemStore によって使用されるメモリがフラッシュされます。下限未満です。