Hbase特点
HBase是一个构建在HDFS上的分布式列存储系统;
HBase是基于Google BigTable模型开发的,典型的key/value系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

Hbase 储存原理
HBase不是一个关系型数据库,它需要不同的方法定义你的数据模型,HBase实际上定义了一个四维数据模型,下面就是每一维度的定义:
行键:每行都有唯一的行键,行键没有数据类型,它内部被认为是一个字节数组。
列簇:数据在行中被组织成列簇,每行有相同的列簇,但是在行之间,相同的列簇不需要有相同的列修饰符。在引擎中,HBase将列簇存储在它自己的数据文件中,所以,它们需要事先被定义,此外,改变列簇并不容易。
列修饰符:列簇定义真实的列,被称之为列修饰符,你可以认为列修饰符就是列本身。
版本:每列都可以有一个可配置的版本数量,你可以通过列修饰符的制定版本获取数据

 

Hbase是一个非关系型的、持久的、分布式的、强一致性的存储结构、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。
Hbase是Hadoop生态系统的一部分,Hbase数据最终是存储到HDFS文件系统当中;
Hbase是基于列存储的数据库,具有负载均衡和故障恢复功能,同时可以自动扩展,具有高效的读写功能。

(1)对于定义当中的几个名词的解释:
非关系型的:存储的数据格式是非结构化的数据
持久的:数据是存放到磁盘(Hbase是存储在基于HDFS文件系统的文件里面),而不是存于内存分布式的:主要是关系型数据库做对比,不是仅有一个服务器,数据存储的方式是分布式的,数据是分布在多台服务器;
强一致性:
一致性查到的概念如下:保证数据库客户端操作的正确性,数据库必须保持每一步操作都是从一个一致的状态到下一个一致的状态。
一致性又分为很多级别,强一致性的概念是数据的变化是原子的,一经改变立即生效。
我的理解是放到高并发的场景,数据的状态的固定的,根据高并发的采取的措施的不同有不同的效果,而出现了不同级别的一致性特征。
列式存储:
列式存储是以列为单位聚合数据,然后将列值顺序地存入磁盘;与此相对应的是行式存储,行式存储我们脑海当中有一定的印象,列式存储可以形象的理解为矩阵转置。
列式存储自带的优势: 1.方便压缩 2.减少I/O
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
面向列:面向列(族)的存储和权限控制,列(族)独立检索;
稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;
数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
数据类型单一:HBase中的数据都是字符串,没有类型。

1.2 HBase相关名词解释
Hbase位于结构化存储层,Hadoop HDFS为hbase提供了高可靠性的底层存储支持,hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
1)行键(RowKey)
– 行键是字节数组, 任何字符串都可以作为行键(”主键”);
– 表中的行根据行键进行排序,数据按照Row key的字节序(byte order)排序存储;
– 所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描) (二级索引)
2)列族(ColumnFamily)
– CF必须在表定义时给出
– 每个CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入
– 数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个Store),这种设计非常适合于数据分析的情形
3)时间戳(TimeStamp)
– 每个Cell可能又多个版本,它们之间用时间戳区分
4)单元格(Cell)
– Cell 由行键,列族:限定符,时间戳唯一决定,数据全部以字节码形式存储
5)区域(Region)
– HBase自动把表水平(按Row)划分成多个区域(region),每个region会保存一个表里面某段连续的数据;
– 每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region;
– 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Region 上。
– HRegion是HBase中分布式存储和负载均衡的最小单元(默认256M)。最小单元表示不同的HRegion可以分布在不同的HRegionServer上。但一个HRegion不会拆分到多个server上。

hbase分布式配置
这里需要先配置hadoop
另外,这里不使用自带的zooKeeper

hadoop@muhe221:~/soft/hbase-2.1.3/conf$ vi hbase-env.sh
export JAVA_HOME=/home/muhe221/soft/jdk1.8.0_121
#是否使用自带的ZooKeeper
export HBASE_MANAGES_ZK=false

hadoop@muhe221:~/soft/hbase-2.1.3/conf$ vi hbase-site.xml
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://10.121.63.240:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>muhe222,muhe221,caoming</value>
    </property>
</configuration>

hadoop@muhe221:~/soft/hbase-1.3.3/conf$ vi regionservers
caoming
muhe222

hadoop@muhe221:~/soft/hbase-1.3.3/conf$ scp -r hbase-1.3.3 hadoop@muhe222:/home/hadoop/soft
hadoop@muhe221:~/soft/hbase-1.3.3/conf$ scp -r hbase-1.3.3 hadoop@caoming:/home/hadoop/soft

 运行hbase前必须保证已经启动hadoop、zookeeper,而且最好保持各主机时间一致

hadoop@muhe221:~/soft/hbase-2.1.3/bin$ ./start-hbase.sh
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/soft/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/soft/hbase-2.1.3/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
running master, logging to /home/hadoop/soft/hbase-2.1.3/bin/../logs/hbase-hadoop-master-muhe221.out
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/soft/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/soft/hbase-2.1.3/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
caoming: running regionserver, logging to /home/hadoop/soft/hbase-2.1.3/bin/../logs/hbase-hadoop-regionserver-caoming.out
muhe222: running regionserver, logging to /home/hadoop/soft/hbase-2.1.3/bin/../logs/hbase-hadoop-regionserver-muhe222.out

各主机运行状态

hadoop@muhe221:~/soft/hbase-2.1.3/bin$ jps
24421 HMaster
19046 NameNode
19207 DataNode
19576 ResourceManager
24635 Jps
19405 SecondaryNameNode
19709 NodeManager
21150 QuorumPeerMain
hadoop@caoming:~/soft/zookeeper-3.4.13/bin$ jps
6324 NodeManager
6773 QuorumPeerMain
6170 DataNode
7340 Jps
7198 HRegionServer
hadoop@muhe222:~/soft/zookeeper-3.4.13/bin$ jps
3664 HRegionServer
3363 NodeManager
3226 DataNode
3531 QuorumPeerMain
3804 Jps