一、HBase的特点 高并发、稀疏型 二、HBase架构 底层是HDFS的DataNode。 HMaster集群、RegionServer。 ZK做服务器心跳检测。 HRegionServer实际上是一个进程,不实际存储数据,掌握的元数据。 包括HLOG、写数据先进入HLOG中。 一个表对应多个Region,一个Region仅对应一张表。 一个列镞对应多个Store,一个Store。合并仅合并一个列镞,多个不同的HFILE。不会针对不同列镞进行合并。 每个Store都有一个MemStore。 三、HBase写操作 1.client->发送请求到ZK集群,获取meta表所在RS,ZK集群返回meta表所在RS(1). 2.RS(1)获取meta表,返回meta表数据。 3.发送写入数据请求。数据先写入HLOG,再往MemStore内存中写入数据。写完内存数据之后 直接返回client写入成功。不会等数据真正写入HDFS。 4.meta表中存的是表的rowkey范围在具体某个regionServer上。 Hmaster挂掉,而Hbase仍然能够正常的读写。Hmaster负责数据的拆分。 5. 6.数据flush 在Hbase-default.xml中配置了数据flush的时间和大小。即数据从内存(MemStore)写入到磁盘中。 6.1 hbase.regionserver.global.memstore.size regionServer的全局memstore大小,超过该大小会触发flush到磁盘的操作。默认是堆 大小的40%,而且regionserver级别的flush会堵塞客户端读写。 6.2 内存中的文件在自动刷新之前能够存活的最长时间。默认为1h hbase.regionserver.optionalcacheflushinterval 即使内存大小没有达到(hbase.regionserver.global.memstore.size),当数据时间超过 此参数的时间,仍然会进行数据的flush。 且当一个regionServer中的一个memSotre达到此时间,所有的memStore都会flush。 6.3 hbase.hregion.memstore.flush.size(128M) 单个region里的memstore的缓存大小,超过参数值则整个HRegion就会flush。默认为128M。 以上的Flush会产生小数据文件问题,HBase会对小文件进行合并。 hbase.hregion.majorcompaction. 一个region进行major compaction合并的周期,在这个点的时候,这个region下的所有 hfile会进行合并,默认为7天。major compaction非常耗资源,建议生产进行关闭, 在应用空闲时间进行手工触发。 hbase.hstore.compactionThreshold 一个store里面允许存在的hfile个数,超过这个数会被写到一个hfile里面。 也即使每个region每个列族对应的memstore flush为hfile的时候,默认情况下当超过 3个hfile的时候就会合并重写为一个新文件,设置越大可以减少触发合并的时间。 但是每次合并的时间就会越长。 当合并文件的时候,对打了删除标记的数据进行删除。 -------------------------------------------------------------------------------------- HBASE优化 一、Hmaster高可用 Hmaster负责RegionServer的生命周期,均衡RegionServer的负载。不参与读写,发送数据的切分指令,合并等。 二、预分区 每一个Region维护着startRow和endRowKey,如果加入的数据符合某个region维护的rowKey范围, 则该数据交给这个region维护,那么依据这个原则,我们可以将数据说要投放的分区提前大致规划好, 以提高HBASE性能。 不采用预分区,Hbase的自身拆分策略会导致Region之间数据不均衡,存在数据倾斜的问题。 建议针对一张表,一个RegionServer放2-3个Region比较合适。 1.手动设定预分区 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 admin = new HBaseAdmin(HBaseConfiguration.CREATE()); //创建HTableDescriptor实例 HTableDescriptor tableDesc = new HtableDescriptor(tableName); //通过HtableDescriptor实例和散列值二维数组创建带有预分区HBase表 hAdmin.createtable(tableDesc,splitKeys); 三、RowKey设计 一条数据的唯一标识就是rowkey,那么这条数据存储哪个分区,取决于rowkey处于哪个预分区的区间内, 涉及rowkey的主要目的,就是让数据均匀的分布于所有的region中,在一定程度防止数据倾斜。 rowkey最大为64k,一般70~100个字节就可以了。 1.生成随机数、hash、散列值。 比如1001 SHA1后变成xxxxxxxx。 2.字符串反转 比如20170524000001转成10000042507102 3.字符串拼接 rowkey键设置,若采用随机数,可以分布的比较均匀,但无法获取数据,最好采用数据的value值,采用mod或者hash 函数获取其值。 rowkey的设计主要四个原则: 唯一性 长度 散列(即均匀分布) 同时查询数据时,尽量保障数据处于一个region中,若跨region,则性能较差。 电信需求:统计某个人(具体电话号)每年,每月,每天的通话记录、包括通话时长、通话次数。 rowkey 预分区键:01,02,03,04,05。 定位到月,一个客户号一个月的数据存放在一个region中。 rowkey设计:mod(hash(手机号_年月),5)_手机号_年月日_时间戳 保证相同的手机号、相同年月处于同一个region中。 四、内存基础优化 HBase操作过程中需要大量的内存开销,毕竟Table是可以缓存在内存中的,一般分配整个可用内存的70%给 HBase的Java堆。但不建议分配非常大的堆内存,因为GC过程持续太久会导致RegionServer处于长期不可用状态, 一般16~48G内存就可以了。如果因为框架占用内存过高导致内存不足,框架一样被系统服务拖死。 基础优化 1.允许在HDFS的文件中追加内容。 2.优化DataNode允许的最大文件打开数 3.优化延迟高的数据操作的等待时间 4.优化数据的写入效率 5.设置RPC监听数量 6.优化HStore文件大小 7.优化hbase客户端缓存。 8.指定scan.next扫描HBase所获取的行数。
相关推荐
用户必须通过官方渠道获取并仅用于自身合法业务活动,不得泄露文档内容,未经许可不得进行摘抄、翻译或复制。同时,阿里云保留随时更新文档的权利,用户应保持对最新版文档的关注。对于文档内容的准确性和适用性,...
2. 用户不得擅自摘抄、翻译、复制本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。 3. 阿里云保留在没有任何通知或者提示下对本文档的内容进行修改的权利,并在阿里云授权通道中不时发布更新后的版本...
2. 未经授权,禁止摘抄、翻译、复制文档内容,不得进行传播和宣传。 3. 文档内容可能随产品更新而变化,用户应关注并获取最新版文档。 4. 文档仅作为参考,阿里云不对内容的准确性、完整性等做保证,不承担因使用...
2. 未经阿里云书面许可,禁止摘抄、翻译或传播文档内容。 3. 文档内容可能随产品升级而变更,用户应关注最新版本。 4. 文档仅供参考,阿里云不对其准确性等作出保证,不承担因使用或信赖文档造成的损失。 5. 阿里云...
- 未经阿里云书面许可,禁止摘抄、翻译或复制文档内容,也不得进行任何形式的传播。 - 文档内容可能因产品升级等原因发生变化,用户需关注并获取最新版本的文档。 - 阿里云对文档内容不做任何明示或暗示的保证,...
- 快速入门部分可能包含创建实例、连接HBase、基本操作(如插入、查询数据)等内容,帮助用户快速上手。 4. **功能特性**: - HBase可能提供了高可用性、水平扩展、实时查询等高级特性。 - 可能涵盖如何管理表、...
此外,未经阿里云书面许可,禁止摘抄、翻译或复制文档内容。文档内容会随着产品升级和调整而变更,用户应及时关注并获取最新版本。 文档内容涵盖HBase运维的各个方面,包括登录Apsara Stack运维系统、使用杜康平台...
这部分内容详细阐述了如何访问和使用这些工具,以便用户能够有效地监控和维护HBase实例的健康和性能。 综上所述,阿里云专有云企业版V3.8.0云数据库HBase运维指南是一份涵盖法律条款、操作指导和运维工具的综合性...
- 未经许可,任何个人或组织不得擅自摘抄、翻译、复制文档内容,不得进行任何形式的传播。 - 文档内容可能因产品升级等原因变更,用户应定期关注并获取最新版本。 - 文档仅作为用户使用阿里云产品的参考,阿里云...
3. 未经允许,不得摘抄、翻译或复制文档内容,且文档内容可能因产品升级等原因发生变化,用户应随时关注并获取最新版本。 4. 文档仅供参考,阿里云不保证其准确性、完整性、适用性和可靠性,并且不承担因使用文档...
同时,未经阿里云书面许可,禁止摘抄、翻译或复制文档内容,也不能用于任何形式的传播和宣传。文档内容会随着产品升级和调整而变动,用户应定期检查并获取最新的文档版本。 在技术层面上,文档可能涵盖了HBase的API...
同时,未经阿里云书面许可,严禁摘抄、翻译或复制文档内容,更不能进行任何形式的传播。随着产品版本的更新,文档内容可能会发生变化,用户应定期通过阿里云授权渠道获取最新版文档。 文档的准确性、完整性、适用性...
- 未经阿里云书面许可,不得摘抄、翻译或复制文档内容,也不能进行传播和宣传。 - 阿里云有权随时更新文档,用户应关注最新版本。 - 文档仅供参考,阿里云不对内容的准确性、完整性等做任何保证,不承担因使用...
- 未经允许,不得摘抄、翻译或复制文档内容。 - 文档内容可能因产品升级等原因变更,用户应定期检查更新。 - 阿里云不对文档的准确性、完整性等做任何保证,因此产生的任何损失或损害,阿里云不承担责任。 - ...
- 文档内容受阿里云知识产权保护,未经许可,不得摘抄、翻译或复制。 - 阿里云保留随时更新文档的权利,用户需关注最新版本以获取准确信息。 - 文档仅供参考,阿里云不对其准确性、完整性、适用性或可靠性做任何...
- 文档内容受阿里云保密协议约束,未经授权,不得摘抄、翻译或复制。 - 文档内容可能随产品升级而更新,用户需关注并使用最新版本。 - 阿里云对文档的准确性、完整性等不做任何保证,对因使用文档产生的损失不负...
2. 未经阿里云事先书面许可,任何单位、公司或个人不得擅自摘抄、翻译、复制本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。 3. 由于产品版本升级、调整或其他原因,本文档内容有可能变更。阿里云...