HBase_02_安装部署&命令行操作

2 Hbase入门

2.1 Hbase安装部署

步骤1:启动HDFS和Zookeeper

myhadoop.sh start
myzk.sh start

步骤2:解压HBase安装包

tar -zxvf hbase-2.0.5-bin.tar.gz -C /opt/module
# 修改名称
cd /opt/module
mv hbase-2.0.5 hbase

步骤3:修改配置环境变量

sudo vim /etc/profile.d/myenv.sh

# HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=$PATH:$HBASE_HOME/bin

步骤4:修改配置文件

  • hbase-env.sh

    HBase默认集成了Zookeeper,但是我们一般使用外置的Zookeeper,所以需要显示的将内置的ZK置为false。

export HBASE_MANAGES_ZK=false
  • hbase-site.xml
<configuration>
    <!--hbase存储到hdfs上的文件路径-->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop102:8020/hbase</value>
    </property>
    <!--开启分布式集群-->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
	<!--zookeeper集群地址-->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop102,hadoop103,hadoop104</value>
    </property>
    
    <property>
        <name>hbase.unsafe.stream.capability.enforce</name>
        <value>false</value>
    </property>
    
    <property>
        <name>hbase.wal.provider</name>
        <value>filesystem</value>
    </property>

    <property>
        <name>hbase.master.maxclockskew</name>
        <value>180000</value>
        <description>Time difference of regionserver from master</description>
    </property>
</configuration>
  • regionservers

    HBaseregion集群地址

hadoop102
hadoop103
hadoop104

步骤5:同步集群

xsync /opt/module/hbase

步骤6:启动集群

  • 单点启动:
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
  • 集群启动
start-hbase.sh
# 关闭
stop-hbase.sh

步骤7:通过web监控页面访问Hbase

http://hadoop102:16010

image-20201209205812186

配置集群高可用

步骤1:关闭HBase集群

bin/stop-hbase.sh

步骤2:在conf目录下创建backup-masters文件

touch conf/backup-masters

步骤3:在backup-masters文件中配置高可用HMaster节点名称

hadoop103

步骤4:分发配置文件

xsync /opt/module/hbase/conf

步骤5:通过web监控页面可以看到

image-20201209210056875

image-20201209210113758

2.2 Hbase shell

①基本操作

  1. 进入Hbase shell

    [atguigu@hadoop102 hbase]$ hbase shell                                                                                                    
    hbase(main):001:0>
    
  2. 查看帮助命令

    help
    
  3. 退出hbase shell

    quit
    

②命名空间的操作

命名空间:namespace,类似于MySql中的database库。

Hbase系统默认定义了两个namespace

  • hbase:系统内建表,包括namespace 和 meta 表

  • default:用户建表时未指定namespace的表都创建在此

    • 可以在MySql中的/hbase/data可以看到库和表:

    image-20201209160130556

    • 也可以在Hbase的web页面hadoop102:16010查看

      image-20201209160620966

  1. 查看命名空间

    --查看hbase中所有的命名空间
    hbase(main):003:0> list_namespace
    
  2. 创建命名空间

    hbase(main):004:0> create_namespace 'test'
    
  3. 查看某个命名空间

    hbase(main):005:0> describe_namespace 'test'
    
  4. 删除命名空间

    hbase(main):007:0> drop_namespace 'test'
    

③表的操作

  1. 创建表

    -- create '表名', '列族名'
    hbase(main):015:0> create 'tacher' , 'info'
    
    --创建表时,默认会存储到default命名空间中
    --如果想要改变默认的命名空间,需要在创建表时指定命名空间
    -- create '命名空间:表名', '列族名' 
    hbase(main):016:0> create 'test:teacher', 'info'
    
  2. 查看表

    -- list默认查看的也是default命名空间中的表
    hbase(main):017:0> list
    
    -- 如果查看某个命名空间中的表,需要指定命名空间
    hbase(main):018:0> list_namespace_tables 'test'
    
  3. 向表中插入数据

    -- put '命名空间:表名', '行键rowkey', '列族:列名', '列值'
    hbase(main):019:0> put 'test:teacher','1001', 'info:name', 'Tom'
    hbase(main):020:0> put 'test:teacher', '1001', 'info:age', '20'            
    hbase(main):021:0> put 'test:teacher', '1001', 'info:sex', 'male' 
    hbase(main):022:0> put 'test:teacher', '1002', 'info:name', 'Jerry'
    
  4. 扫描全表数据

    -- scan '命名空间:表名'
    hbase(main):023:0> scan 'test:teacher'
     ROW              COLUMN+CELL                                                
     1001       column=info:age, timestamp=1607510369918, value=20                     
     1001       column=info:name, timestamp=1607510350588, value=Tom                  
     1001       column=info:sex, timestamp=1607511391959, value=male      
     1002       column=info:name, timestamp=1607511411264, value=Jerry                 
     1003       column=info:name, timestamp=1607511671291, value=Mike
    
  5. 扫描范围数据

    -- scan '命名空间:表名', {STARTROW => '行键1001', STOPROW => '行键1002'}
    -- 注意:不包含STOPROW的行键
    
    hbase(main):026:0> scan 'test:teacher', {STARTROW => '1001', STOPROW => '1002'}
    ROW      		  COLUMN+CELL                               
     1001             column=info:age, timestamp=1607510369918, value=20               
     1001             column=info:name, timestamp=1607510350588, value=Tom
     1001             column=info:sex, timestamp=1607511391959, value=male
     
     -- 仅仅包含START的ROW
     hbase(main):027:0> scan 'test:teacher', {STARTROW => '1001', STOPROW => '1001'}
    ROW                COLUMN+CELL                     
     1001              column=info:age, timestamp=1607510369918, value=20 
     1001              column=info:name, timestamp=1607510350588, value=Tom           
     1001              column=info:sex, timestamp=1607511391959, value=male 
     
     -- 只写STARTROW,表示从当前行键开始,扫描到表末
     hbase(main):029:0> scan 'test:teacher', {STARTROW => '1002'}
    ROW                 COLUMN+CELL  
     1002               column=info:name, timestamp=1607511411264, value=Jerry         
     1003               column=info:name, timestamp=1607511671291, value=Mike
    
  6. 查看表的结构

    hbase(main):030:0> describe 'test:teacher'
    
    --结果
    Table test:teacher is ENABLED
    test:teacher
    COLUMN FAMILIES DESCRIPTION
    {NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'} 
    
  7. 更新指定字段的数据

    hbase(main):031:0> put 'test:teacher', '1001', 'info:name', 'TTT'
    
    --更新数据,其实是覆盖原来的数据,逻辑删除
    hbase(main):032:0> scan 'test:teacher'
    ROW               COLUMN+CELL
     1001             column=info:age, timestamp=1607510369918, value=20
     1001             column=info:name, timestamp=1607512200127, value=TTT
     1001             column=info:sex, timestamp=1607511391959, value=male
     1002             column=info:name, timestamp=1607511411264, value=Jerry
     1003             column=info:name, timestamp=1607511671291, value=Mike
    
  8. 查看”指定行“或”指定列族:列“的数据

    -- get '命名空间:表名', '行键',查看某一行的所有数据
    hbase(main):033:0> get 'test:teacher', '1001'
    COLUMN               CELL
     info:age            timestamp=1607510369918, value=20
     info:name           timestamp=1607512200127, value=TTT
     info:sex            timestamp=1607511391959, value=male
     
    -- get '命名空间:表名', '行键', '列族:列',查看某以行的某一个列族:列的数据
    hbase(main):034:0> get 'test:teacher', '1001', 'info:name'
    COLUMN               CELL
     info:name           timestamp=1607512200127, value=TTT
    
  9. 统计表数据行数

    hbase(main):035:0> count 'test:teacher'
    => 3
    
  10. 删除数据

    -- 删除某rowkey的全部数据
    -- deleteall '命名空间:表名', '行键'
    hbase(main):036:0> deleteall 'test:teacher', '1001'
    
    -- 删除某rowkey的某一列数据
    -- delete '命名空间:表名', '行键', '列族:列'
    hbase(main):037:0> delete 'test:teacher', '1001', 'info:name'
    
  11. 清空表数据

    -- 清空表的操作顺序是先disable,然后再truncate
    hbase(main):039:0> truncate 'test:teacher'
    Truncating 'test:teacher' table (it may take a while):
    Disabling table...
    Truncating table...
    Took 3.5374 seconds
    
  12. 删除表

    -- 首先,改表表为disable状态
    hbase(main):041:0> disable 'test:teacher'
    -- 然后再删除表
    hbase(main):042:0> drop 'test:teacher'
    
    -- 如果直接删除表,会报错:
    ERROR: Table test:student is enabled. Disable it first.
    
  13. 变更表信息:

    -- 将info列族中的数据存放3个版本
    hbase(main):046:0> alter 'test:teacher', {NAME => 'info', VERSIONS => 3}
    hbase(main):003:0> get 'test:teacher', '1001'
    	--info:name        timestamp=1607513492653, value=Tom 
    hbase(main):004:0> put 'test:teacher', '1001', 'info:name', 'TT'
    hbase(main):005:0> get 'test:teacher', '1001'
    	--info:name        timestamp=1607513865957, value=TT
    
    --查询的时候可以指定版本的数量,就可以查看多个时间戳的数据
    hbase(main):006:0> get 'test:teacher', '1001', {
         
         COLUMN => 'info:name', VERSIONS => 3}
     info:name             timestamp=1607513865957, value=TT
     info:name             timestamp=1607513492653, value=Tom
    
  14. 查看包括标记删除和未收集的cell

    --扫描全表,包括标记删除的和未收集的cell
    hbase(main):004:0> scan 'test:student' , {RAW => true, VERSIONS => 10}
    

    image-20201211102353233

④多版本

--创建一个表的时候,创建一个列族,有3个版本
hbase(main):011:0> create 'test:emp', {NAME=>'info', VERSIONS=>3}
--①查看表中数据的多版本
hbase(main):015:0> scan 'test:emp', {VERSIONS=>2}
--②查看表中某个rowKey的多版本
hbase(main):021:0> get 'test:emp','1001',{
   
   COLUMN=>'info:name', VERSIONS=>2}

--修改表,已有的列族更改版本的数量,默认VERSIONS=1
hbase(main):022:0> alter 'test:emp', {NAME=>'info', VERSIONS=>4}

猜你喜欢

转载自blog.csdn.net/qq_43523503/article/details/113531415