HBase--NoSQL的数据库产品

HBase是一款基于Hadoop的高可靠、高性能、列式存储的分布式数据库,适用于处理大规模、稀疏的非结构化和半结构化数据。它支持通过主键进行数据检索,提供实时读写能力,但不支持复杂的事务操作。HBase在Hadoop生态系统中占据重要位置,主要通过横向扩展提升系统能力。
摘要由CSDN通过智能技术生成

1、HBase简介

HBase – HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。

 

hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

它介于nosql和RDBMS之间,仅能通过主键(rowkey)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。

与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

2、HBase中的表一般有这样的特点:

  • 大:一个表可以有上亿行,上百万列
  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
  • 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

3、Hbase在Hadoop Ecosystem中的位置。

4、HBase的特点

表(table)——用于存储数据的,数据也是存放在表中的。

行(row)——嵌套的说法。

行键(row key)——类似于主键,也是用于区分每一行的。

列簇(column family)——列的集合

列(column)——相当于RDBMS中的字段

单元格(cell)——单元格用于存储数据的,存储的事多份,按时间戳来区分

多个版本的数据——带有时间戳的数据,默认取最新的数值

 

hbase中的数据都是字节数组存储的,所以比较时按照一个个字节比较。

hbase中的记录是按照rowkey排序存储的。

hbase中的列簇根据大小划分为很多的region,不同的region可以存储在不同的region服务器(regionServer)中。那么,海量数据的查询就可以转换为并行查询了。

每个region中存放的数据范围[startkey,stopkey]

 

预分区操作指的是在建表的时候,预先划分成指定数量的region,插入数据时均匀的分散到不同的region中。

 

在hbase中,有一张表叫做.META.,里面存储的是用户表的regionserver与rowkey的映射关系。

在hbase中,有一张表叫做-ROOT-,里面存储的是.META.的rowkey与regionserver的映射关系。

 

读取流程图:

 

表示hbase某张表中的一行记录,看rowkey确定一行记录。

行中有很多列。这些列分到很多列簇中存储。

每一个列簇是一个独立的存储文件。

5、常见问题

问:为什么一行记录含有多个时间戳的值?

答:因为这样能够体现聚合的思想,实际上体现了RDBMS中的一对多问题。

 

问:为什么一行记录按照列簇分成独立的物理文件存储,而不是一行记录全部放到一起存储?

答:因为查询时,一行记录并不是全部字段都需要,只需要一部分字段。如果一行记录所有字段的值放在一起的话,那么一次性读取所有字段,显然很浪费。分别存储的话, 一次查询只需要少量字段,那么整体的查询吞吐量就会提高。

 

问:建立索引时为什么key是regionserver,value是rowkey;而不是相反的哪?

答:因为rowkey的数量太大了,按照上面的方式建立索引的话,映射数据量就太大。

 

 

问:设计rowkey是hbase表设计中的重点?

答:(1)因为hbase查询默认是按照rowkey查询的,因此业务上最需要的查询条件应该设计到rowkey的组成中

    (2)因为hbase表分区的话,那么再插入数据的时候容易产生热点。为了避免热点,插入数据应该尽可能随机,需要注意rowkey的设计,最好是rowkey的开始节点都是随机的或者接近随机的。

 

6、集群搭建(查看端口60010)

hbase的集群搭建过程:

********************注意:(1)hadoop必须启动,并且可以写入文件(2)zookeeper必须在各个节点启动成功****************************

1.确定集群结构,以hadoop0作为主节点,hadoop1和hadoop2作为从节点

2.在hadoop0、hadoop1、hadoop2上分别启动ZooKeeper,命令是zkServer.sh start

3.在hadoop0的现有的伪分布配置上做修改

修改/etc/profile文件。

#vi /etc/profile

增加

export HBASE_HOME=/home/hbase

修改

export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HBASE_HOME/bin

保存退出

#source /etc/profile

3.1 修改conf/hbase-env.sh,修改

export JAVA_HOME=/usr/local/jdk

export HBASE_MANAGES_ZK=false

3.2 修改conf/hbase-site.xml,修改hbase.zookeeper.quorum的值改为hadoop0,hadoop1,hadoop2

修改$HBASE_HOME/conf/hbase-site.xml

<property>

  <name>hbase.rootdir</name>

  <value>hdfs://hadoop0:9000/hbase</value>

</property>

<property>

  <name>hbase.cluster.distributed</name>

  <value>true</value>

</property>

<property>

  <name>hbase.zookeeper.quorum</name>

  <value>hadoop0</value>

</property>

<property>

  <name>dfs.replication</name>

  <value>1</value>

</property>

注意:$HBASE_HOME/conf/hbase-site.xml的hbase.rootdir的主机和端口号与$HADOOP_HOME/conf/core-site.xml的fs.default.name的主机和端口号一致

3.3 修改conf/regionservers,修改内容为hadoop1、hadoop2(每个一行)

4.把hbase文件夹复制到hadoop1、hadoop2的对应目录下,执行命令

   scp -r /usr/local/hbase   hadoop1:/usr/local

   scp -r /usr/local/hbase   hadoop2:/usr/local

5.把hadoop0上的/etc/profile复制到其他节点,然后在其他节点执行source /etc/profile

6.首先关闭伪分布,执行命令stop-hbase.sh

7.在hadoop0上执行命令start-hbase.sh,启动集群

 

 

list,查看表

 

实时数据库openTSDB

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值