了解hbase(二)

来源:互联网 发布:安徽农村高考知乎 编辑:程序博客网 时间:2024/06/06 14:26

什么时候用 HBase?


HBase不适合所有问题.

首先,确信有足够多数据,如果有上亿或上千亿行数据,HBase是很好的备选。 如果只有上千或上百万行,则用传统的RDBMS可能是更好的选择。因为所有数据可以在一两个节点保存,集群其他节点可能闲置。

其次,确信可以不依赖所有RDBMS的额外特性 (e.g., 列数据类型, 第二索引, 事物,高级查询语言等.) 一个建立在RDBMS上应用,如不能仅通过改变一个JDBC驱动移植到HBase。相对于移植, 需考虑从RDBMS 到 HBase是一次完全的重新设计。

第三, 确信你有足够硬件。甚至 HDFS 在小于5个数据节点时,干不好什么事情 (根据如 HDFS 块复制具有缺省值 3), 还要加上一个 NameNode。HBase 能在单独的笔记本上运行良好。但这应仅当成开发配置。


认识hbase:

1、HBase的表是按rowkey排序的,排序方式之针对字节的。即按照字典顺序从低到高排序,所有的表都必须要有主键-key.

2、一个列名是由它的列族前缀和修饰符(qualifier)连接而成。例如列contents:html是列族 contents加冒号(:)加 修饰符 html组成的。

3、一个 {row, column, version} 元组是HBase中的一个单元(cell)。

4、always close the ResultScanner!即使用scan后要在try..finally中关闭结果集连接。

5、删除的原理:通过创建名为墓碑(tombstones)的新标志进行处理。这些墓碑和死去的值,在主紧缩时清除。数据不会立即从文件中删除。他使用删除标记来屏蔽掉这些值。

5、一个 {row, column, version} 元组是HBase中的一个单元(cell).但是有可能会有很多的单元的行和列是相同的,可以使用版本来区分不同的单元.

6、一个Put操作会给一个cell,创建一个版本,默认使用当前时间戳。要想覆盖一个现有的值,就意味着你的row,column和版本必须完全相等。

7、行的版本的数量是HColumnDescriptor设置的,每个列族可以单独设置,默认是3。不推荐将版本最大值设到一个很高的水平 (如, 成百或更多),除非老版本的数据对你很重要。

8、数据类型:HBase 通过 Put 和 Result支持 "bytes-in/bytes-out" 接口,所以任何可被转为字节数组的东西可以作为值存入。输入可以是字符串,数字,复杂对象,甚至图像,只要他们能转为字节。

9、条件查询使用列过滤器。

10、通常认为行选择时Scan采用 startRow/stopRow 方法比较好。然而 RowFilter 也可以用。

0 0
原创粉丝点击