史上最全面最完整的大数据学习第八章 Hbase ---- 初识 与 环境搭建

HBase

Hbase ---- 初识 与 环境搭建

Hbase(二) shell操作

Hbase(三)Java API

Hbase(四)MR on Hbase & Hbase的 架构

Hbase(五) Hbase 的读写流程

Hbase完结篇 Hbase 集群搭建以及相关操作

今天的更新有点晚了,对不起对不起别骂了别骂了,在骂就傻了~

一、概述

HBase(Hadoop Database),是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统。

在这里插入图片描述

1.1 CAP(之前说过了哦)

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

在这里插入图片描述

1.2 列存储(重点)

这个概念要从RDBMS说起,RDBMS操作的最小单元是行级数据

select name from user;
update  user set username = 'zkf' where sex = 'false';

即使是查询或者更新某个表中某个字段,对于RDBMS来说都是加载整行数据来进行数据的修改

因此RDBMS在处理单个数据的处理方式上,性能并不高,因为会做一些无用的IO操作。

在这里插入图片描述

1.3 HBase

官网地址: http://hbase.apache.org/

HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大规模数据集时,可 以使用HBase。

1.3.1 特点

  • 大:一个表可以有上亿行,上百万列

  • 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。 结构稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

  • 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可 以有截然不同的列。

  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时 的时间戳。

  • 数据类型单一:HBase中的数据都是字符串,没有类型。

1.3.2 HBase和关系数据库区别

  • 数据库类型:HBase中的数据类型都是字符串类型(string)

  • 数据操作:HBase只有普通的增删改查等操作,没有表之间的关联查询

  • 存储模式:HBase是基于列式存储模式,而RDBMS是基于行式存储的

  • 应用场景:HBase适合存储大量数据,查询效率极高

1.4 HBase 数据结构

Hbase 数据结构其实很简单,涉及4个名词:RowKey|Column Family |Cell|TimeStamps,在说数据结构之前先看一张真正的HBase的表,有助于理解HBase的数据结构

行健 时间戳 列 蔟 单元格(值)
“database.software.www” t1 anchor:name John
“database.software.www” t2 info:address BeiJing
“database.software.www” t3 anchor:name James
“database.software.www” t4 anchor:tel 01012345678
“database.software.www” t4 info:PC 100000
“c.software.www” t1 anchor:name James
“c.software.www” t2 anchor:tel 01012345678
“c.software.www” t3 info:address BeiJing

观察上述表格 ,这就是HBASE中存储数据的样子,可以看到HBASE行键是域名倒置的命名方式,时间戳就是当前时间,有不用的时间戳,在冒号之前就是列蔟的名字,但是你会发现,并不是每个的人列蔟都是相同的,你会发现每个人的列蔟都有可能不同,所以这就是体现出了HBase在存储数据的时候可以做到不存储某个属性的数据(在关系型数据中创建表之后,即使该属性没有数据也需要显示为null),这就是Hbase表存储稀疏的特点。

1.4.1 Rowkey | 行键

其实行键就是用来检索记录的主键

与 NoSQL 数据库一样,Row Key 是用来检索记录的主键 。访问HBase中的行,只有三种方式:
1. 通过单个RowKey访问
2. 通过Rowkey的range(正则)
3. 全表扫描

Rowkey可以是任意字符串(注意:最大长度为64 KB),在HBase内部,Rowkey保存为字节数组。存储时,数据按照Rowkey的字典顺序(byte order)排序存储。设计Rowkey时,要充分考虑排序存储这个特性,将经常一起读取的行(IO特性相似的行)存储放到一起。(位置相关性)

1.4.2 Column Family | 列蔟

列蔟:HBase表中的每个列,都归属于某个列蔟,其实就是列的集合。列蔟是表的 Schema 的一部分(而列不是),必须在使用表之前定义。 列名都以列蔟作为前缀。

1.4.3 Cell

关键字:无类型、字节码

由rowkey、column Family :column (值),version 组成的唯一的单元,值得注意是这里的Cell并不单单指当前列蔟的值,而是指好几个属性加起来所表示唯一的值。Cell 中的数据是没有类型 的,全部是字节码形式存储。

HBase和关系数据库区别

  • 数据库类型:HBase中的数据类型都是字符串类型(string)

  • 数据操作:HBase只有普通的增删改查等操作,没有表之间的关联查询

  • 存储模式:HBase是基于列式存储模式,而RDBMS是基于行式存储的

  • 应用场景:HBase适合存储大量数据,查询效率极高

1.4.4 TimeStamps

HBase中通过rowkey和columns确定的为一个存储单元成为Cell。每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是64位整形。时间戳可以由HBase(在数据写入时 自动)赋值, 此时时间戳是精确到毫秒的当前系统时间。时间戳也 可以由客户显示赋值。如果应用程序要避 免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 Cell 中,不同版本的数据按照时间倒序排序, 即最新的数据排在最前面。

二、HBase 环境搭建-单机

2.1 基础环境

  • Hadoop

  • Zookeeper

2.2 安装和配置

[root@HadoopNode00 ~]# tar -zxvf hbase-1.2.4-bin.tar.gz -C /home/hbase/ # 解压至对应的目录
[root@HadoopNode00 ~]# vi .bashrc   # 配置habse 环境变量

export HBASE_HOME=/home/hbase/hbase-1.2.4
export HBASE_MANAGES_ZK=false  # 使用外部ZK
export PATH=$PATH:$HBASE_HOME/bin

[root@HadoopNode00 ~]# source .bashrc    # 使环境变量生效


[root@HadoopNode00 ~]# vi /home/hbase/hbase-1.2.4/conf/hbase-site.xml


<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://HadoopNode00:9000/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>HadoopNode00</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2181</value>
    </property>
</configuration>

[root@HadoopNode00 ~]# vi /home/hbase/hbase-1.2.4/conf/regionservers
HadoopNode00

2.3 启动

[root@HadoopNode00 ~]# start-dfs.sh   # 首先保证hdfs启动
[root@HadoopNode00 ~]# /home/zk/zookeeper-3.4.6/bin/zkServer.sh start /home/zk/zookeeper-3.4.6/conf/zk.cfg  # 首先保证zk启动
[root@HadoopNode00 ~]# start-hbase.sh  # 直接通过指令启动
[root@HadoopNode00 ~]# jps
1699 NameNode
2052 SecondaryNameNode
40660 QuorumPeerMain
42020 Jps
1851 DataNode
41708 HRegionServer  #  健康存活
18476 NodeManager
41548 HMaster        #  健康存活
18239 ResourceManager

2.4 连接

[root@HadoopNode00 ~]# hbase shell

2.5 Web UI

http://hostname:16010

今天的分享到此结束了,希望大家有个愉悦的周末,学习的同时也要注意休息哦~
给个三连吧 爱你们哦~

猜你喜欢

转载自blog.csdn.net/artiil/article/details/107301915
今日推荐