天天看点

HBase 笔记

参考资料:HBase权威指南

一行由若干列组成,若干列又构成一个列族

一个列族的所有列存储在同一个底层的存储文件里,这个文件叫HFile

列族的数量有限制;一个列族里列的数量没限制

谓词删除:例如允许用户只保存过去一周

HBase中扩展和负载均衡的基本单位是region,一张表初始只有一个region,region大小超过限制后会拆分region变成两个

每个region只能由一个region服务器加载,每台region服务器可以同时加载多个region

HBase中有3个主要组件:客户端库、一台主服务器、多台region服务器,主服务器通过zookpper为region服务器分配region

在服务器的地址空间中执行来自客户端的代码,支持这种功能的服务端框架叫做协处理器

HBase的api主要是java代码,但也支持其他编程语言

数据存储在存储文件中(HFile),文件由连续的块组成,HFile通常保存在Hadoop分布式文件系统(HDFS)中

存储文件是不可以改变的,所以无法通过移除某个键值对来删除,解决般办法是做个删除标记

HBase 笔记

 当在同一服务器上运行Hadoop和HBase时,最少会有3个java进程(DataNode、TaskTracker和RegionServer),而且在执行MapReduce作业时,进程数还会激增,要运行这些程序需要一定数量的内存、磁盘和CPU资源

使用java时,不应该为一个进程设置过多的内存,因为java重写堆时,会暂停所有进程内的逻辑并进行清理,堆越大,清理的时间就越长

如果HBase警告无法找到可执行的java安装路径,就需要在conf/hbase-env.sh文件中编辑JAVA_HOME这一行,设置正确的java安装路径

HBase只能依赖特定的Hadoop版本,因为他们之间的远程过程调用RPC是版本化的,调用方和被调用方要互相匹配,细微的差异都有可能导致通信失败

由于HBase依赖Hadoop,所以要求Hadoop的JAR必须部署在HBase的lib目录下

HBase使用的Hadoop版本必须与底层Hadoop集群上使用的Hadoop版本一致,使用Hadoop集群正在运行的JAR替换HBase的lib目录中依赖的Hadoop的JAR可以避免版本不匹配问题

集群中所有节点都需要更新为一样的JAR,否则版本不匹配会造成集群无法启动或假死现象

在服务器上禁止使用交换区,一旦服务器发生交换,HBase服务器就无法与zookeeper服务器交换信息

集群中节点时间必须一致,仅仅一分钟的偏差就有可能是集群产生莫名其妙的行为,可以使用NTP或同等功能来“同步集群的时间”

======================

参考文献:https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html

HBase 适用于结构化的存储。并且 HBase 是一种列式的分布式数据库

HBase 则为大型分布式 NoSql 数据库

HBase 与 Hive 的区别:

1 Hive 适合用来对一段时间内的数据进行分析查询;

2 Hive 不应该用来进行实时的查询(Hive 的设计目的,也不是支持实时的查询)。因为它需要很长时间才可以返回结果;HBase 则非常适合用来进行大数据的实时查询

3 对于 Hive 和 HBase 的部署来说,也有一些区别,Hive 一般只要有 Hadoop 便可以工作。而 HBase 则还需要 Zookeeper 的帮助

4 HBase 本身只提供了 Java 的 API 接口,并不直接支持 SQL 的语句查询(除非与其他框架一起使用,如 Phoenix、Hive),而 Hive 则可以直接使用 HQL(一种类 SQL 语言)

HBase 的使用建议:

1 一个 HBase 数据库是否高效,很大程度会和 Row-Key 的设计有关:

1)当客户端需要频繁的写一张表,随机的 RowKey 会获得更好的性能。

2)当客户端需要频繁的读一张表,有序的 RowKey 则会获得更好的性能。

3)对于时间连续的数据(例如 log),有序的 RowKey 会很方便查询一段时间的数据(Scan 操作)

2 在大多数的情况下,一个表格不会超过 2 到 3 个 CF,而且很多情况下都是 1 个 CF 就足够了。

继续阅读