HBase初识之学生心得总结


一、HBase简介

1.1 定义

-- 1. HBase是什么?
    1. 分布式
    2. 可扩展
    3. 支持海量数据的存储
    4. NoSQL的数据库。

-- 2. 说明:
   a、NoSQL: Not only SQL,不仅仅是一个数据库
   b、是基于谷歌的三篇论文之bigtable生成的。
   c、HBase:理解为Hadoop base
   
-- 3. 大数据框架:
   a、数据的存储:hdfs / hive / hbase
   b、数据的传输:flume / sqoop
   c、数据的计算:tez / mr / spark / flink

-- 4. 和传统数据库的差别:
   传统数据库的结构:数据库 --> 表 --> 行和列
   HBase的结构 : namespace(命名空间) --> table --> 列族 --> 行和列 --> orgion --> store
   HBase可以理解为多维的map,嵌套的map结构。

1.2 HBase数据模型

1.2.1 HBase逻辑结构

image-20200623181231019

1.2.2 HBase的物理结构

image-20200810140718245

1.2.3 数据模型
--1. HBase表的几个概念
    1. 'namespace':命名空间,类似mysql的数据库,在HBase中默认有两个namespace:default/HBase
    2. '列族'3. 'column'   :列,在使用时,格式为:'列族名:列名'
    4. 'row'      :行,在HBase中,行是逻辑概念上的,在物理内存中,同一行的数据很可能不在一起的。
                    "那么我们通过什么参数来判断两个数据是不是属于同一行呢"?
                    就是下面的rowkey,rowkey相同,就表示是同一行的数据。
    5. 'rowKey'   :行的标签,唯一定位行的标识             
    6. 'region'   :区域,表示多行数据,在HBase中,一个table默认是一个region
    7. 'store'    :在同一个region中,列族的个数 = store的个数,store有两种:memstore/storefile
    8. 'timeStemp':时间戳,表示数据执行的时间,每执行一次操作就会生成一个版本。
    9. 'table'    :表,可以理解为多维的map,在创建表的时候,只需要声明表名和列族就可以.
                    "非常适用于非结构化数据,不需要指定数据的格式"
    10. 'cell'    : 单元格,在表中的同一个位置'某一行的某一列位置',会有多个cell,相同的位置每修改一次,就会生成一个cell。
                    由{rowkey,列族:列名,time stamp},进行唯一标识。

-- 2. HBase集群的几个概念
    1. 'master':可以理解为hadoop的NM,专门负责管理小弟'regionServer',实现类为:Hmaster
    2. 'regionServer':可以理解为hadoop的DM,专门负责管理region中的数据,还有两个组件:WAL'可理解为NM的内存区域的元数
    				   据'和balckcache,至于具体是干嘛的,后面写操作的时候讲,实现类为:HRegionServer
    3. 'meta'  : 元数据,zookeeper有它的地址,某一个regionServer保存着这个数据。主要有table和region所在的位置。 
    4. 'zookeeper':① master的高可用 ② RegionServer的监控 ③ Region的元数据管理。

-- 3. 说明:
   在底层存储时,数据按照rowkey的字典顺序从小到大进行排列。

image-20200623184151239

二、 HBase的安装

2.1 部署zookeeper和Hadoop

2.2 解压HBase到指定的位置

[atguigu@hadoop105 software]$ tar -zxvf hbase-2.0.5-bin.tar.gz -C /opt/module

2.3 配置环境变量

[atguigu@hadoop105 ~]$ sudo vim /etc/profile.d/my_env.sh
  • 添加
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase-2.0.5
export PATH=$PATH:$HBASE_HOME/bin

2.4 配置HBase的文件

  • 修改HBase对应的配置文件
#export HBASE_MANAGES_ZK=true 
修改至:
export HBASE_MANAGES_ZK=false
  • hbase-site.xml增加如下配置内容:
<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop105:8020/hbase</value>
    </property>

    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>

    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop105,hadoop106,hadoop107</value>
    </property>

    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
    
    <property>
        <name>hbase.wal.provider</name>
        <value>filesystem</value>
    </property>
</configuration>
  • 配置regionservers
hadoop105
hadoop106
hadoop107

2.5 分发HBase

[atguigu@hadoop105 module]$ xsync hbase-2.0.5

2.6 启动HBase

先启动hadoop集群,再启动zk,然后启动HBase

  • 单点启动
hbase-daemon.sh start master
hbase-daemon.sh start regionserver

-daemon是指后台启动。
  • 群起
[atguigu@hadoop105 hbase-2.0.5]$ start-hbase.sh

-- 说明:
   a、会启动当前节点的master
   b、在所有节点启动regionServer
   c、Hmaster和regionServer都是一个进程。

2.7 查看HBase的页面

网址:hadoop105:16010

2.8 master的高可用(可选)

  • 关闭HBase的集群
stop-hbase.sh
  • 在conf目录下创建backup-masters文件
touch conf/backup-masters
  • 在backup-masters文件中配置高可用HMaster节点
echo hadoop106 > conf/backup-masters
  • 将整个conf目录scp到其他节点
xsync conf

三、 HBase的操作

3.1 基本操作

  1. 进入hbase的客户端
[atguigu@hadoop105 conf]$ hbase shell
  1. 查看所有namespace中所有的表
hbase(main):001:0> list

TABLE   
test:user  #test是一个namespace
user       #没有写命名空间的,则默认是default
2 row(s)
Took 0.4410 seconds 
=> ["test:user", "user"]

3.2 表的操作

  1. 创建表
--1.语法: create 'namespace:tablename','列族1''列族2'...
    如果是namespace是default,则可以省略
--2.实例1:hbase(main):002:0> create 'test','info','info1' 
    实例2:hbase(main):004:0> create 'test:lianzp','info'
  1. 添加数据
-- 1. 语法: put 'tablename','rowkey','列族1:列名''value'
      说明:shell操作每次只能添加一个值
-- 2. 实例: hbase(main):008:0> put 'user','1001','info1:age',20
  1. 全局扫描数据
-- 1. 语法: scan 'tablename'
-- 2. 实例: hbase(main):009:0> scan 'user'
-- 3. 打印结果:#如下是显示了4行数据,实际上数据在表中属于3行
     ROW                          COLUMN+CELL                                                   
     1000                        column=info2:sex, timestamp=1592894945017, value=woman                            
     1001                        column=info1:age, timestamp=1592911858092, value=20                               
     1001                        column=info1:name, timestamp=1592894905511, value=lianzp                          
     1003                        column=info1:age, timestamp=1592894925226, value=50 
  1. 扫描指定行的数据
-- 1. 语法:scan 'tablename',{
   
   STARTROW=>'rowkey',STOPROW=>'rowkey'}
-- 2. 说明:
           a、区间为左闭右开
           b、如果STARTROW没有写,则表示开始的rowkey为负无穷,即没有下限,只有上限
              如果STOPROW没有写,则表示结束的rowkey为正无穷,即没有上限,只有下限
           
-- 3. 实例:hbase(main):012:0> scan 'user',{
   
   STARTROW=>'1000',STOPROW=>'1003'}
            hbase(main):014:0> scan 'user',{
   
   STARTROW=>'1000'}
            hbase(main):015:0> scan 'user',{
   
   STOPROW=>'1001'}
-- 4. 结果:
         ROW                          COLUMN+CELL         
         1000                        column=info2:sex, timestamp=1592894945017, value=woman
         1001                        column=info1:age, timestamp=1592911858092, value=20         
         1001                        column=info1:name, timestamp=1592894905511, value=lianzp   
        2 row(s)
  1. 获取某一行的数据
-- 1. 语法: get 'tablename','rowkey'
-- 2. 实例: get 'user','1001'
  1. 获取某一行指定列的数据
-- 1. 语法: get 'tablename','rowkey''列族1:列名'
-- 2. 实例: get 'user','1001','info1:age'
  1. 获取行的数量
-- 1. 语法: count 'tablename'
-- 2. 实例: hbase(main):001:0> count 'user'
  1. 查询表的结构
-- 1. 语法: describe 'tablename'
-- 2. 实例: hbase(main):002:0> describe 'user'

image-20200623195415990

  1. 删除某一行某一列的值
-- 1. 语法: delete 'tablename','rowkey''列族1:列名'
-- 2. 实例: hbase(main):002:0> hbase(main):005:0> delete 'user','1001','info1:age'
-- 3. 说明:
      a、一个位置默认保留一个版本,如果一个位置被多次修改时,删除当前的数据,再进行查询时,在未flush的情况下,上一个版本的数据
         可以被查询出来。
      b、此处的删除并不是真正的删除,只是给这个删除的数据打上了一个标记,只有当落盘flush的时候,才会真正的被清理掉。

10 . 删除某一行的全部数据

-- 1. 语法: deleteall 'tablename','rowkey'
-- 2. 实例: hbase(main):020:0> deleteall 'user','1001'
  1. 清除表数据
-- 1. 语法: truncate 'tablename'
-- 2. 实例:hbase(main):020:0> truncate 'user'
-- 3. 说明:
      a、在执行的过程中,首先会自动disable 'user'
      b、然后再清空表数据,truncate 'user'
 -- 4. 打印结果
        Truncating 'user' table (it may take a while):
        Disabling table...
        Truncating table...
        Took 1.5164 seconds
  1. 删除表
-- 1. 语法: drop 'tablename'
-- 2. 实例: hbase(main):020:0> drop 'user'
-- 3. 说明:
     如果直接drop表,会报错:ERROR: Table student is enabled. Disable it first
      a、在删除表时,需要手动将表设置为:disable 'tablename'
      b、然后再删除,drop 'tablename'
  1. 多版本
-- 1.设置多版本
   alter 'student' ,{
   
   NAME => 'info',VERSIONS => 3}
-- 2.查询多版本
   get 'student','1001',{
   
   COLUMN => 'info:age' ,VERSIONS => 3 }

3.3 namespace操作

  1. 创建namespace
hbase(main):037:0> create_namespace 'lianzp'
  1. 查询namespace
hbase(main):039:0> list_namespace
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值