数据中心产品开发规范(6)

2019-04-22 22:03

开发规范(JAVA部分)

4 HIVE技术规范

1. 按照表在当前数据仓库内不同数据职能划分,所有字母均大写: 字典定义类表以 D_开头;如:D_DIM。

关系定义类表以P_开头,当前表示关系类名称中间以“_”分割,表示两者关系;如:P_ITEM_IDT。

数据集成类表以FACT_开头,使用相关业务定义名称,如:FACT_

数据汇总类表以G_开头,拥有数据维度的,将维度名称采用”_”分割,拼合在表名称中;如:G_ITEM_VSN

对前端报表支持表以R_开头,名称采用各报表业务名称定义,如:R_CONFIG_LOG 2. 数据路径

数据路径内全部按照大写定义路径字符。

本文档仅限内部使用,未经双方许可,请勿扩散到第三方。

第 25 页 共 40 页

开发规范(JAVA部分)

5 HBase设计规范

介绍了HBase应用开发时建议遵循的设计规范,主要是针对开发层面的。

Hbase中与表结构相关的逻辑模型涉及到以下几个词汇:命名空间、表、列族、列、行键、版本等,这些是构建hbase表的所有元素。下文就依据这几个关键词汇,陈述下相关的规范。

5.1 Namespace命名空间设计

通俗地讲,命名空间可视为表组(与Oracle中的表空间类似),划分依据不固定,可依据业务类型划分,也可依据时间周期划分。譬如,针对电力气象方面的数据表,可以创建一个电力气象的命名空间,取名为DLQX,将电力气象相关的表都组织在此命名空间下面。引进命名空间的好处就是方便对表进行组织管理。

HBase默认的命名空间是default,默认情况下,如果在创建表时没有显式地指定命名空间,那么表将创建在default命名空间下。如果表隶属于某个非默认的命名空间,那么在引用表(譬如读取表数据)时,就必须指定命名空间,否则将出现类似“无法定位到表”的错误,完整表名的格式为“命名空间名称:表名称”,譬如”DLQX:SYSTEM_USER”;如果是默认的命名空间,则完整表名也可以省略掉“default:”,直接拼写表名SYSTEM_USER即可。

本文档仅限内部使用,未经双方许可,请勿扩散到第三方。

第 26 页 共 40 页

开发规范(JAVA部分)

命名空间与表的关系,可以用下图表示:

命名空间与表之间是一对多的关系,即一个命名空间下面可以包含多个hbase表,但一个hbase表只能属于一个命名空间。在创建表时,如果没有指定命名空间(或者命名空间为空),则系统会将此hbase表放置在默认命名空间(default)下。

另外,删除命名空间之前,必须先删除掉此命名空间下的所有hbase表,否则将无法删除此命名空间。

5.2 1.2. Table表设计

HBase有几个高级特性,在你设计表时可以使用。这些特性不一定联系到模式或行键设计,但是它们定义了某些方面的表行为。

5.2.1 理想HBase表

Hbase作为列数据库,根据官方的说法,在性能和效率上更擅长处理“高而瘦”的表,而非“矮而胖”的表。所谓“高而瘦”,是指表的列的数量

本文档仅限内部使用,未经双方许可,请勿扩散到第三方。

第 27 页 共 40 页

开发规范(JAVA部分)

较少,但是行的数量极大,从而使表展现出一种又高又瘦的形象。所谓“矮而胖”,是指表的列的数据居多,但是行的数量却有限,给人一种又矮又胖的形象,虽然hbase表号称可容纳百万列,但是那也仅仅限于理论上的极限,在实际应用中,请尽量构建“高而瘦”的表,同时需要对列的数量进行测试,以避免过度影响读写性能。

5.2.2 预创建分区

默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。

5.2.3 列族数量

不要在一张表里定义太多的column family。目前Hbase并不能很好的处理超过2~3个column family的表。因为某个column family在flush的时候,它邻近的column family也会因关联效应被触发flush,最终导致系统产生更多的I/O。所以,根据官方的建议,一个HBase表中创建一个列族即可。

本文档仅限内部使用,未经双方许可,请勿扩散到第三方。

第 28 页 共 40 页

开发规范(JAVA部分)

5.2.4 可配置的数据块大小

HFile数据块大小可以在列族层次设置。这个数据块不同于HDFS数据块。其默认值是65,536字节,或64KB。数据块索引存储每个HFile数据块的起始键。数据块大小设置影响到数据块索引的大小。数据块越小,索引越大,从而占用更大内存空间。同时因为加载进内存的数据块更小,随机查找性能更好。但是如果你需要更好的序列扫描性能,那么一次能够加载更多HFile数据进入内存则更为合理,这意味着数据块应该设置为更大的值。相应地索引变小,你将在随机读性能上付出代价。

5.2.5 数据块缓存

把数据放进读缓存,但工作负载却经常不能从中获得性能提升。例如,如果一张表或表里的列族只被顺序化扫描访问或者很少被访问,你不会介意Get或Scan花费时间是否有点儿长。在这种情况下,你可以选择关闭那些列族的缓存。如果你只是执行很多顺序化扫描,你会多次倒腾缓存,并且可能会滥用缓存把应该放进缓存获得性能提升的数据给排挤出去。如果关闭缓存,你不仅可以避免上述情况发生,而且可以让出更多缓存给其他表和同一表的其他列族使用。

5.2.6 激进缓存

你可以选择一些列族,赋予它们在数据块缓存里有更高的优先级(LRU缓存)。如果你预期一个列族比另一个列族随机读更多,这个特性迟早用得上。

本文档仅限内部使用,未经双方许可,请勿扩散到第三方。

第 29 页 共 40 页


数据中心产品开发规范(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016-2017学年度第一学期小主持人社团活动教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: