1、HBase体系结构

2、HBase功能

HBase来源于Google的三篇论文中的BigTable(GFS->HDFS,MapReduce->MapReduce,BigTable->HBase),是一种Hadoop 数据库,实时处理和离线批处理场景都应用,用于存储数据和检索数据。与RDBMS 相比,HBase可以存储海量数据,数据条目数可达上亿条,可以准实时检索,检索的速度达到秒级别。HBase是基于HDFS的,具有HDFS的优势:存在多个副本,数据安全性高,普通商用PC或Server就可以,而RDBMS的服务器都很贵。
HBase官网:http://hbase.apache.org/
对比RDBMS关系型数据库特点:

数据库名 端口号 存储数据量 特点
MySQL 3306 2千万~3千万条 适用于中小型企业,社区版是免费的
Oracle 1521 达到亿级别 适用于大型企业,商业版是收费的
SQL Server 1433 2千万条左右 适用于Windows系统,不够稳定

MySQL与HBase的对比:

特点 MySQL HBase
数据库的概念 有数据库的概念database和表的概念table 没有数据库概念database,有替代的namespace的概念,有表的概念,所有的表都是在一个namespace下的
主键 主键唯一决定了一行 没有主键,但是有行健:rowkey(可以理解为就是相当于是主键)
字段 表中直接包含字段 有列簇的概念,每个列簇中才包含了字段,给相同属性的列划分一个组,叫做column family列簇,在建表的时候至少要指明一个列簇,可以不给字段
版本 行列交叉得到一个唯一的单元格,数据的版本数只有1 可以存储多个版本version(相当于是可以存储多个值),HBase行列交叉得到一个唯一的单元格组,组中可以有多个单元格,可以设置hbase的version版本数,是int值,当version为1的时候,就没有单元格组的概念了,就是一个单元格,默认情况下,显示timestamp(时间戳)最新的那个单元格的值
空值 MySQL中没有值的话,就是null值,是占空间的 对于HBase来说,如果没有这一列的信息,那么就不会存储,不会分配任何的空间

3、HBase表的设计

HBase是一种列式存储的数据库,也是一种NOSQL数据库(NOSQL = Not Only SQL),每一列可以存放多个版本的值,表中每条数据有唯一的标识符,即rowkey,就是这一条数据的主键。
每条数据的构成格式:rowkey + columnfamily + column01 + timestamp : value => cell。cell中用字节数组进行存储,可使用工具类Bytes进行字节数组和其他类型的转换。
NOSQL型数据库还有mongodb,redis(key-value形式)等等。

4、HBase的安装

参考文档:https://archive.apache.org/dist/hbase/hbase-0.98.6/
(1)进入/opt/software/目录,将hbase安装包上传虚拟机。
(2)对HBase安装包赋予执行权限:
software]$ chmod u+x hbase-0.98.6-hadoop2-bin.tar.gz
(3)解压HBase安装包:
software]$ tar -zxf hbase-0.98.6-hadoop2-bin.tar.gz -C /opt/modules/
(4)进入/opt/modules/hadoop-2.5.0目录,启动namenode和datanode。
(5)修改配置文件/opt/modules/hbase-0.98.6-hadoop2/conf/hbase-site.xml。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定hbase的数据文件存储在HDFS上的路径,就是RegionServer的共享目录 --><property><name>hbase.rootdir</name><value>hdfs://hadoop-senior.ibeifeng.com:8020/hbase</value></property><!-- 指定临时目录的存放位置,和hadoop.tmp.dir相似 --><property ><name>hbase.tmp.dir</name><value>/opt/moduels/hbase-0.98.6-hadoop2/data/tmp</value></property><!-- 指定hbase的运行模式为分布式模式,false就是单机模式,true就是分布式集群模式 --><property><name>hbase.cluster.distributed</name><value>true</value></property><!-- 指定ZooKeeper的地址 --><property><name>hbase.zookeeper.quorum</name><value>hadoop-senior.ibeifeng.com</value></property>
</configuration>

(6)修改配置文件/opt/modules/hbase-0.98.6-hadoop2/conf/hbase-env.sh。

export JAVA_HOME=/opt/modules/jdk1.7.0_67
# export HBASE_MANAGES_ZK=true

由于HBase自带了ZooKeeper的jar包,如果用户要使用单独安装的ZooKeeper的话,需要将HBASE_MANAGES_ZK更改为false。
(7)修改配置文件/opt/modules/hbase-0.98.6-hadoop2/conf/regionservers,指定从节点所在机器。

hadoop-senior.ibeifeng.com

(8)进入/opt/modules/hbase-0.98.6-hadoop2/lib目录,hbase-0.98.6默认hadoop-2.2.0,换成我使用的hadoop版本hadoop-2.5.0。删除lib目录下的hadoop-2.2.0版本的所有jar包(以hadoop开头的所有jar包都删除),上传hadoop-2.5.0版本,并将zookeeper-3.4.6.jar替换为zookeeper-3.4.5.jar:

[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-annotations-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-auth-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-common-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-hdfs-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-mapreduce-client-app-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-mapreduce-client-common-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-mapreduce-client-core-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-mapreduce-client-jobclient-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-mapreduce-client-shuffle-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-yarn-api-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-yarn-client-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-yarn-common-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-yarn-server-common-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-yarn-server-nodemanager-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./hadoop-client-2.2.0.jar
[beifeng@hadoop-senior lib]$ rm -rf ./zookeeper-3.4.6.jar

(9)hbase启动方式之一:进入/opt/modules/hbase-0.98.6-hadoop2目录,启动hbase进程,使用hbase自带的zookeeper(我们已经将zookeeper-3.4.6.jar替换为zookeeper-3.4.5.jar):
hbase-0.98.6-hadoop2]$ bin/start-hbase.sh
查看hbase进程:

[beifeng@hadoop-senior hbase-0.98.6-hadoop2]$ jps
2813 HRegionServer
3162 Jps
2724 HMaster
2670 HQuorumPeer
2196 DataNode
2137 NameNode

(10)hbase启动方式之二:启动我们自己安装的zookeeper,并分别启动master和regionserver:
zookeeper-3.4.5]$ bin/zkServer.sh start
hbase-0.98.6-hadoop2]$ bin/hbase-daemon.sh start master
hbase-0.98.6-hadoop2]$ bin/hbase-daemon.sh start regionserver
查看hbase进程:
[beifeng@hadoop-senior hbase-0.98.6-hadoop2]$ jps

6283 QuorumPeerMain
6483 Jps
6334 HMaster
2196 DataNode
2137 NameNode
6431 HRegionServer

(11)停止hbase进程:
hbase-0.98.6-hadoop2]$ bin/stop-hbase.sh
(12)外部界面
HBase的外部UI界面地址:http://hadoop-senior.ibeifeng.com:60010,端口号:60010。

5、HBase的基本使用

(1)启动hbase shell命令行:
hbase-0.98.6-hadoop2]$ bin/hbase shell
(2)列出当前数据库中的所有namespace:
hbase(main):001:0> list_namespace
(3)列出hbase中的表:
hbase(main):001:0> list

TABLE
2018-07-22 11:46:58,921 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
0 row(s) in 3.0660 seconds=> []

(4)创建namespace:
查看帮助信息,找到创建的语法格式,注意要加上引号:
help 'create_namespace'
创建namespace:create_namespace 'nstest'
(5)描述查看namespace的结构:
describe_namespace 'nstest'
(6)删除namespace:
drop_namespace 'nstest'
(7)创建表,表名user,列簇info:

示例:
create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}1)ns1指的就是namespace
2)t1代表table_name
3)ns1:t1这样的格式就是唯一确定了一张表
4)在hbase中=>符号表示等于
5)f指的是列簇,建表时要指定一个列簇
6)VERSIONS => 5代表同时能够存储的版本数
7)可以指定多个列簇,一个大括号中只能指定一个NAME(变量)
8)一个列簇就是一个大括号
9)在建表的时候可以指定在某个namespace下,比如:ns1:t1,没有指定就是在默认的数据库下面创建

hbase(main):002:0> create 'user','info'

0 row(s) in 0.6260 seconds=> Hbase::Table - user

(8)描述表user的结构:
hbase(main):003:0> describe 'user'

DESCRIPTION                                                                            ENABLED                                        'user', {NAME => 'info', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICA true                                           TION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL =                                                > 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false                                                ', BLOCKCACHE => 'true'}
1 row(s) in 0.0700 seconds

(9)向表user中插入数据。表名user,rowkey为10001,列簇info,列名name等,cell值为zhangsan:
hbase(main):004:0> put 'user','10001','info:name','zhangsan'
hbase(main):005:0> put 'user','10001','info:age','25'
hbase(main):006:0> put 'user','10001','info:sex','male'
hbase(main):007:0> put 'user','10001','info:address','shanghai'

HBase中的数据查询有三种方式:
1)依据rowkey查询,这是最快的,使用get命令;
2)依据范围查询,这是最常用的,使用scan range命令;
3)全表扫描,这是最慢的,使用scan命令。

(10)查询user表中rowkey为10001的信息:
hbase(main):008:0> get 'user','10001'

COLUMN                             CELL                                                                                               info:address                      timestamp=1532231767144, value=shanghai                                                            info:age                          timestamp=1532231729180, value=25                                                                  info:name                         timestamp=1532231687833, value=zhangsan                                                            info:sex                          timestamp=1532231746853, value=male
4 row(s) in 0.0300 seconds

查询user表中rowkey为10001,列簇为info的信息:
hbase(main):009:0> get 'user','10001','info'
查询user表中rowkey为10001,列簇为info,列名为name的信息:
hbase(main):009:0> get 'user','10001','info:name'

COLUMN                             CELL                                                                                               info:name                         timestamp=1532231687833, value=zhangsan
1 row(s) in 0.0160 seconds

(11)插入rowkey为10002的信息:
hbase(main):010:0> put 'user','10002','info:name','wangwu'
hbase(main):011:0> put 'user','10002','info:age','30'
hbase(main):012:0> put 'user','10002','info:tel','25354212'
hbase(main):013:0> put 'user','10002','info:qq','232523551'
全表扫描:
hbase(main):014:0> scan
全表扫描user表:
hbase(main):014:0> scan 'user'

ROW                                COLUMN+CELL                                                                                        10001                             column=info:address, timestamp=1532231767144, value=shanghai                                       10001                             column=info:age, timestamp=1532231729180, value=25                                                 10001                             column=info:name, timestamp=1532231687833, value=zhangsan                                          10001                             column=info:sex, timestamp=1532231746853, value=male                                               10002                             column=info:age, timestamp=1532232249589, value=30                                                 10002                             column=info:name, timestamp=1532232223162, value=wangwu                                            10002                             column=info:qq, timestamp=1532232294714, value=232523551                                           10002                             column=info:tel, timestamp=1532232273419, value=25354212
2 row(s) in 0.0450 seconds

(12)插入user表中列簇为10003的信息:
hbase(main):015:0> put 'user','10003','info:name','zhaoliu'
(13)范围查询:查询user表中的name列和age列的信息:
hbase(main):016:0> scan 'user',{COLUMNS => ['info:name','info:age']}

ROW                                COLUMN+CELL                                                                                        10001                             column=info:age, timestamp=1532231729180, value=25                                                 10001                             column=info:name, timestamp=1532231687833, value=zhangsan                                          10002                             column=info:age, timestamp=1532232249589, value=30                                                 10002                             column=info:name, timestamp=1532232223162, value=wangwu                                            10003                             column=info:name, timestamp=1532232516020, value=zhaoliu
3 row(s) in 0.0410 seconds

(14)范围查询:查询user表中起始rowkey为10002开始的行信息:
hbase(main):017:0> scan 'user', {STARTROW=>'10002'}

ROW                                COLUMN+CELL                                                                                        10002                             column=info:age, timestamp=1532232249589, value=30                                                 10002                             column=info:name, timestamp=1532232223162, value=wangwu                                            10002                             column=info:qq, timestamp=1532232294714, value=232523551                                           10002                             column=info:tel, timestamp=1532232273419, value=25354212                                           10003                             column=info:name, timestamp=1532232516020, value=zhaoliu
2 row(s) in 0.0340 seconds

STARTROW代表开始的行号,大括号中的所有变量都必须是大写:

scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
scan 'nstest:tb1', {STARTROW => '20170521_10002'}

STOPROW代表结束的行号,包头不包尾:

scan 'nstest:tb1', {STARTROW => '20170521_10001',STOPROW => '20170521_10003'}

(15)删除user表中rowkey为10001,列簇为info,列名为name,值为zhangsan的数据(可能该值有多个版本):
hbase(main):018:0> delete 'user','10001','info:name','zhangsan'
删除user表中rowkey为10001,列簇为info,列名为name的列数据:
hbase(main):018:0> delete 'user','10001','info:name'
(16)全表扫描user表:
hbase(main):019:0> scan 'user'

ROW                                COLUMN+CELL                                                                                        10001                             column=info:address, timestamp=1532231767144, value=shanghai                                       10001                             column=info:age, timestamp=1532231729180, value=25                                                 10001                             column=info:sex, timestamp=1532231746853, value=male                                               10002                             column=info:age, timestamp=1532232249589, value=30                                                 10002                             column=info:name, timestamp=1532232223162, value=wangwu                                            10002                             column=info:qq, timestamp=1532232294714, value=232523551                                           10002                             column=info:tel, timestamp=1532232273419, value=25354212                                           10003                             column=info:name, timestamp=1532232516020, value=zhaoliu
3 row(s) in 0.0340 seconds

(17)删除user表中rowkey为10001的全部信息:
hbase(main):020:0> deleteall 'user','10001'
全表扫描user表:
hbase(main):021:0> scan 'user'

ROW                                COLUMN+CELL                                                                                        10002                             column=info:age, timestamp=1532232249589, value=30                                                 10002                             column=info:name, timestamp=1532232223162, value=wangwu                                            10002                             column=info:qq, timestamp=1532232294714, value=232523551                                           10002                             column=info:tel, timestamp=1532232273419, value=25354212                                           10003                             column=info:name, timestamp=1532232516020, value=zhaoliu
2 row(s) in 0.0230 seconds

(18)禁用user表:
hbase(main):022:0> disable 'user'
hbase(main):022:0> disable_all
(19)启用user表:
hbase(main):023:0> enable 'user'
hbase(main):023:0> enable_all
(20)删除user表:
hbase(main):024:0> drop 'user'
在hbase中表有启用和禁用的状态区分,在删除和修改前需要先禁用,如果是修改那么修改完成后需要再启用。
(21)退出hbase shell命令行:
hbase(main):025:0> exit
(22)输入help获取帮助信息。
(23)shell命令行的删除,需要按住ctrl+删除键才可以删除。

【HBase】HBase的环境搭建及基本使用相关推荐

  1. 图数据库JanusGraph实战[6]: JanusGraph+HBase+ElasticSearch的环境搭建

    图数据库JanusGraph实战[6]: JanusGraph+HBase+ElasticSearch的环境搭建 作者:胡佳辉(家辉)  日期:2019年01月14日 CSDN博客:https://b ...

  2. hbase本地调试环境搭建

    1,前言 想要深入的了解hbase,看hbase源码是必须的.以下描述了搭建hbase本地调试环境的经历 2,安装步骤 2.1,启动hbase 1,安装java和IDE IntelliJ,下载源码等. ...

  3. 数据仓库组件:HBase集群环境搭建和应用案例

    本文源码:GitHub || GitEE 一.Hbase简介 1.基础描述 Hadoop原生的特点是解决大规模数据的离线批量处理场景,HDFS具备强大存储能力,但是并没有提供很强的数据查询机制.HBa ...

  4. hbase 2.1 环境搭建--独立模式 Standalone Mode

    文章目录 概述 jdk hbase 配置 启动 使用`hbase shell`命令行操作hbase 新建表 新增记录 查看记录 删除记录 启用禁用表 删除表 退出shell 停止HBase 概述 本节 ...

  5. hadoop(八) - hbase集群环境搭建

    1. 上传hbase安装包hbase-0.96.2-hadoop2-bin.tar.gz 2. 解压 tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /clo ...

  6. HBase环境搭建与基本使用(保姆级教程)

    HBase 2.x环境搭建与基本使用 一.HBase简介 数据模型 系统架构 二.HBase伪分布式配置 0. 准备工作 1. HBase配置文件介绍 2. HBase安装与伪分布配置 1)安装HBa ...

  7. hadoop1.2.1+zookeeper3.4.6+hbase0.94集群环境搭建

    hadoop集群环境搭建 参考前面的hadoop集群搭建文档,搭建了三个服务器的集群如下 feixu-master     namenode, secondaryNamenode, jobtracke ...

  8. Linux基础环境搭建(CentOS7)- 安装Flume

    Linux基础环境搭建(CentOS7)- 安装Flume 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! Linux基础环境搭建(CentOS7)- 虚拟机准备 Linux基础环境搭建 ...

  9. HBase单机环境搭建

    HBase单机环境搭建 转自:https://songlee24.github.io/2015/07/20/hbase-standalone-mode/ 在搭建HBase单机环境之前,首先你要保证你已 ...

  10. hbase开发环境搭建及运行hbase小实例(HBase 0.98.3新api)

    问题导读: 1.如何搭建hbase开发环境? 2.HTableDescriptor初始化产生了那些变化? 3.eclipse如何连接hbase集群? hbase开发环境搭建与hadoop开发环境搭建差 ...

最新文章

  1. Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
  2. python面向对象继承_Python 面向对象 --- 继承
  3. 我更看好rust飞鸽传书
  4. 局域网不能进入别人的共享
  5. 详解NLP和时序预测的相似性【附赠AAAI21最佳论文INFORMER的详细解析】
  6. 萤火虫pte小程序_【PTE战报】84炸的Maggie,RS试试这样入手开始练习
  7. dev 域名与 Chrome
  8. 计算机在环境工程专业中的应用,计算机在环境科学与工程方向的应用.pdf
  9. php提取网页mp3,介绍三种提取网页中音乐URL网址的方法
  10. word英文大写问题解决方案
  11. Deepin系统安装docker
  12. 机器人路径规划_人工蜂群算法
  13. Could not retrieve transation read-only status server 的解决办法
  14. 剑指offer——二十六进制和十进制的相互转换
  15. 魅族千元新机曝光:处理器不错!
  16. 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)
  17. 关于U盘装系统的那点破事儿---No bootable device found
  18. python tk下拉列表_Python 窗体(tkinter)下拉列表框(Combobox)实例
  19. python爬虫下载网站磁力链接
  20. mybatis-plus clickhouse支持分页

热门文章

  1. 简单的golang游戏服务器框架《railgun》的文档目录索引
  2. 如何让网站在360搜索结果中显示“官网”标志?
  3. JS 选择性修改input标签的属性
  4. 【网络协议详解】——GNS3的使用(学习笔记)
  5. Python - 装机系列63 docker镜像不通 no such host
  6. 实习日/周/月记学习计划(第一周)
  7. mysql .pdb是什么文件_.NET PDB文件到底是什么?
  8. 考研复试自我介绍总结
  9. 腾讯海外游戏直播Android开发面经
  10. onLoad onShow