
Hbase是一种NoSQL数据库,这意味着它不像传统的RDBMS数据库那样支持SQL作为查询语言。Hbase是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多RDBMS系统的特性,比如列类型,辅助索引,触发器,和高级查询语言等待
那Hbase有什么特性呢?如下:
强读写一致,但是不是“最终一致性”的数据存储,这使得它非常适合高速的计算聚合
自动分片,通过Region分散在集群中,当行数增长的时候,Region也会自动的切分和再分配
自动的故障转移
Hadoop/HDFS集成,和HDFS开箱即用,不用太麻烦的衔接
丰富的“简洁,高效”API,Thrift/REST API,Java API
块缓存,布隆过滤器,可以高效的列查询优化
*** 作管理,Hbase提供了内置的web界面来 *** 作,还可以监控JMX指标
什么时候用Hbase?
Hbase不适合解决所有的问题:
首先数据库量要足够多,如果有十亿及百亿行数据,那么Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。因为数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态
其次,如果你不需要辅助索引,静态类型的列,事务等特性,一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统。
最后,保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。
Hbase在单机环境也能运行,但是请在开发环境的时候使用。
内部应用
存储业务数据:车辆GPS信息,司机点位信息,用户 *** 作信息,设备访问信息。。。
存储日志数据:架构监控数据(登录日志,中间件访问日志,推送日志,短信邮件发送记录。。。),业务 *** 作日志信息
存储业务附件:UDFS系统存储图像,视频,文档等附件信息
不过在公司使用的时候,一般不使用原生的Hbase API,使用原生的API会导致访问不可监控,影响系统稳定性,以致于版本升级的不可控。
HFile
HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。
探讨数据库的数据存储方式,其实就是探讨数据如何在磁盘上进行有效的组织。因为我们通常以如何高效读取和消费数据为目的,而不是数据存储本身。
Hfile生成方式
起初,HFile中并没有任何Block,数据还存在于MemStore中。
Flush发生时,创建HFile Writer,第一个空的Data Block出现,初始化后的Data Block中为Header部分预留了空间,Header部分用来存放一个Data Block的元数据信息。
而后,位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中:
注:如果配置了Data Block Encoding,则会在Append KeyValue的时候进行同步编码,编码后的数据不再是单纯的KeyValue模式。Data Block Encoding是HBase为了降低KeyValue结构性膨胀而提供的内部编码机制。
1.下载和安装hbase数据库[root@tong1 ~]# wget http://mirrors.hust.edu.cn/apache/hbase/stable/hbase-0.98.9-hadoop2-bin.tar.gz
[root@tong1 ~]# tar xvf hbase-0.98.9-hadoop2-bin.tar.gz
[root@tong1 ~]# mv hbase-0.98.9-hadoop2 /usr/local/
[root@tong1 local]# chown -R hadoop:hadoop hbase-0.98.9-hadoop2
[root@tong1 local]# ll hbase-0.98.9-hadoop2
total 352
drwxr-xr-x. 4 hadoop hadoop 4096 Dec 16 14:16 bin
-rw-r--r--. 1 hadoop hadoop 164928 Dec 16 14:20 CHANGES.txt
drwxr-xr-x. 2 hadoop hadoop 4096 Jan 8 12:48 conf
drwxr-xr-x. 4 hadoop hadoop 4096 Dec 16 14:16 dev-support
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:22 hbase-annotations
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-assembly
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:22 hbase-checkstyle
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-client
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:22 hbase-common
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-examples
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:25 hbase-hadoop1-compat
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-hadoop2-compat
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-hadoop-compat
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-it
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-prefix-tree
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-protocol
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-rest
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-server
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-shell
drwxr-xr-x. 2 hadoop hadoop 4096 Dec 16 14:23 hbase-testing-util
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 14:23 hbase-thrift
-rw-r--r--. 1 hadoop hadoop 11358 Dec 2 07:36 LICENSE.txt
drwxrwxr-x. 2 hadoop hadoop 4096 Jan 8 12:01 logs
-rw-r--r--. 1 hadoop hadoop897 Dec 16 14:16 NOTICE.txt
-rw-r--r--. 1 hadoop hadoop 81667 Dec 16 14:16 pom.xml
-rw-r--r--. 1 hadoop hadoop 1377 Dec 16 14:16 README.txt
drwxr-xr-x. 3 hadoop hadoop 4096 Dec 16 06:37 src
[root@tong1 local]#
2.修改hbase配置文件
[root@tong1 local]# cd /usr/local/hbase-0.98.9-hadoop2/conf/
[root@tong1 conf]# vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://tong1:9000/hbase</value>-与hadoop中的core-site.xml文件中一至
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
</configuration>
[root@tong1 conf]# vim hbase-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_25
[root@tong1 conf]#
3.启动hbase服务
[root@tong1 conf]# su - hadoop
[hadoop@tong1 ~]$ start-hbase.sh
localhost: starting zookeeper, logging to /usr/local/hbase-0.98.9-hadoop2/bin/../logs/hbase-hadoop-zookeeper-tong1.out
starting master, logging to /usr/local/hbase-0.98.9-hadoop2/logs/hbase-hadoop-master-tong1.out
localhost: starting regionserver, logging to /usr/local/hbase-0.98.9-hadoop2/bin/../logs/hbase-hadoop-regionserver-tong1.out
[hadoop@tong1 ~]$ hbase shell
2015-01-08 15:01:36,052 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
2015-01-08 15:01:36,082 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
2015-01-08 15:01:36,109 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
2015-01-08 15:01:36,135 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
2015-01-08 15:01:36,147 INFO [main] Configuration.deprecation: hadoop.native.lib is deprecated. Instead, use io.native.lib.available
HBase Shellenter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.9-hadoop2, r96878ece501b0643e879254645d7f3a40eaf101f, Mon Dec 15 23:00:20 PST 2014
hbase(main):008:0* create 'tong1' ,'test'
0 row(s) in 0.9120 seconds
=>Hbase::Table - tong1
hbase(main):009:0>scan 'tong1'
ROW COLUMN+CELL
0 row(s) in 0.0390 seconds
hbase(main):010:0>
4.在浏览器查看状态即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)