1、Hbase中RowKey的设计原则
RowKey长度原则:二进制码流RowKey 最大长度 64Kb,实际应用中一般为 10-100bytes,以
byte[] 形式保存,一般设计定长。建议越短越好,因为HFile是按照KV存储的Key太大浪费空间。
RowKey散列原则:RowKey在设计时候要尽可能的实现可以将数据均衡的分布在每个
RegionServer 上。
RowKey唯一原则:RowKey必须在设计上保证其唯一性,RowKey是按照字典顺序排序存储的,
因此设计 RowKey 时可以将将经常读取的数据存储到一块。
2、HBase 在大数据体系位置
其实就简单的把HBase当成大数据体系下的DataBase来用就行,任何可以分析HBase的引擎比如
MR、Hive、Spark等框架连接上HBase都可以实现控制。比如你可以把Hive跟HBase进行关联,
Hive中数据不再由HDFS存储而是存储到HBase中,并且关联后Hive中添加数据在HBase中可看
到,HBase中添加数据Hive也可看到
3、HBase 优化方法
1、减少调整
HBase中有几个内容会动态调整,如Region分区、HFile。通过一些方法可以减少这些会带来I/O开
销的调整。Region:没有预建分区的话,随着Region中条数的增加,Region会进行分裂,这将增加I/O开
销,所以解决方法就是根据你的RowKey设计来进行预建分区,减少Region的动态分裂。
HFile:MemStore执行flush会生成HFile,同时HFilewe年过多时候也会进行Merge, 为了减少这
样的无谓的I/O开销,建议估计项目数据量大小,给HFile设定一个合适的值。
2、减少启停
数据库事务机制就是为了更好地实现批量写入,较少数据库的开启关闭带来的开销,那么HBase中
也存在频繁开启关闭带来的问题。
关闭Compaction。HBase 中自动化的Minor Compaction和Major Compaction会带来极大的I/O
开销,为了避免这种不受控制的意外发生,建议关闭自动Compaction,在闲时进行
compaction。
3、减少数据量
开启过滤,提高查询速度
开启BloomFilter,BloomFilter是列族级别的过滤,在生成一个StoreFile同时会生成一个
MetaBlock,用于查询时过滤数据
使用压缩。一般推荐使用Snappy和LZO压缩
4、合理设计
HBase 表格中 RowKey 和 ColumnFamily 的设计是非常重要,好的设计能够提高性能和保证数据
的准确性。
RowKey设计
散列性:散列性能够保证相同相似的RowKey聚合,相异的RowKey分散,有利于查询
简短性:RowKey作为key的一部分存储在HFile中,如果为了可读性将rowKey设计得过长,
那么将会增加存储压力
唯一性:rowKey必须具备明显的区别性
业务性:具体情况具体分析。
列族的设计
优势:HBase中数据是按列进行存储的,那么查询某一列族的某一列时就不需要全盘扫描,
只需要扫描某一列族,减少了读I/O
劣势:多列族意味这一个Region有多个Store,一个Store就有一个MemStore,当
MemStore进行flush时,属于同一个Region的Store中的MemStore都会进行flush,增加I/O
开销。
4、HBase 跟关系型数据库区别
指标 传统关系型数据库 HBase
数据类型 有丰富的数据类型 字符串
数据操作 丰富操作,复杂联表查询 简单CRUD
存储模式 基于行存储 基于列存储
数据索引 复杂的多个索引 只有RowKey索引
数据维护 新覆盖旧 多版本
可伸缩性 难实现横向扩展 性能动态伸缩5、HBase批量导入
通过 HBase API进行批量写入数据。
使用 Sqoop工具批量导数到HBase集群。
使用 MapReduce 批量导入。
HBase BulkLoad的方式。
HBase 通过 Hive 关联导入数据。
大数据导入用 HBase API 跟 MapReduce 写入效率会很低,因为请求RegionServer 将数据写入,
这期间数据会先写入 WAL 跟 MemStore,MemStore 达到阈值后会刷写到磁盘生成 HFile文件,
HFile文件过多时会发生Compaction,如果Region大小过大时也会发生Split。
BulkLoad 适合初次数据导入,以及HBase与Hadoop为同一集群。BulkLoad 是使用 MapReduce
直接生成 HFile 格式文件后,Region Servers 再将 HFile 文件移动到相应的Region目录下。
大数据知识
最新推荐文章于 2024-11-03 14:39:36 发布