Apache HBase常用命令

简介: 一.简述 Apache HBase是基于Apache Hadoop的面向列的NoSQL数据库,是Google的BigTable的开源实现。HBase是一个针对半结构化数据的开源的、多版本的、可伸缩的、高可靠的、高性能的、分布式的和面向列的动态模式数据库。

一.简述

Apache HBase是基于Apache Hadoop的面向列的NoSQL数据库,是Google的BigTable的开源实现。HBase是一个针对半结构化数据的开源的、多版本的、可伸缩的、高可靠的、高性能的、分布式的和面向列的动态模式数据库。

Apache Hadoop是一个高容错、高延时的分布式文件系统和高并发的批处理系统,不适用于提供实时计算,而 HBase 是可以提供实时计算的分布式数据库,数据被保存在 HDFS (分布式文件系统)上,由 HDFS 保证其高容错性。

HBase与Hadoop适配

数据模型

hbase在表里存储数据使用的是四维坐标系统,依次是:行健,列族,列限定符和时间版本。 hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序

  1. 表(Table): HBase采用表来组织数据,表由许多行和列组成,列划分为多个列族
  2. 行(Row): 在表里面,每一行代表着一个数据对象。每一行都是由一个行键(Row Key)和一个或者多个列组成的。行键是行的唯一标识,行键并没有什么特定的数据类型,以二进制的字节来存储,按字母顺序排序
  3. 列(Column): 列由列族(Column Family)和列限定符(Column Qualifier)联合标识,由“:”进行间隔,如 family:qualifiero
  4. 列族(Column Family): 定义 HBase 表的时候需要提前设置好列族,表中所有的列都需要组织在列族里面。列族一旦确定后,就不能轻易修改,因为它会影响到 HBase 真实的物理存储结构,但是列族中的列限定符及其对应的值可以动态增删
  5. 列限定符(Column Qualifier): 列族中的数据通过列限定符来进行映射。列限定符不需要事先定义,也不需要在不同行之间保持一致。列限定符没有特定的数据类型,以二进制字节来存储
  6. 单元(Cell): 行键、列族和列限定符一起标识一个单元,存储在单元里的数据称为单元数据,没有特定的数据类型,以二进制字节来存储
  7. 时间戳(Timestamp): 默认情况下,每一个单元中的数据插入时都会用时间戳来进行版本标识

RegionServer拆分原理

RegionServer在拆分前后通知Master,更新.META;RegionServer会保留有关执行状态的内存日记,以便发生错误时启用回滚

  1. RegionServer在本地决定拆分region,并准备拆分。RegionServer获取表上的共享读锁,以防止在拆分过程中修改模式。然后它在zookeeper在下/hbase/region-in-transition/region-name创建一个znode,并将znode的状态设置为SPLITTING
  2. Master监控znode,因为它有一个父region-in-transitionznode 的观察者
  3. RegionServer在HDFS中的父级region目录下创建名为.splits的子目录
  4. RegionServer关闭父region,并在其本地数据结构中将该region标记为脱机。此时,将发送到父region的客户端请求NotServingRegionException
  5. RegionServer在.splits目录下为子region A和B创建region目录,并创建必要的数据结构。然后它会分割存储文件,因为它会在父region中为每个存储文件创建两个参考文件
  6. RegionServer在HDFS中创建实际的region目录,并移动每个子项的参考文件
  7. RegionServer向.META表发送Put请求,在.META表中将父级设置为脱机,并添加子region信息
  8. RegionServer并行打开子region A和B
  9. RegionServer将子region A和B,以及托管region信息添加到.META表中
  10. RegionServer将/hbase/region-in-transition/region-name目录下,ZooKeeper的znode更新为state SPLIT
  11. 拆分完成后,.META表和HDFS仍将包含对父region的引用,当子region中的压缩重写数据文件时,将删除这些引用;Master的垃圾收集任务定期检查子region是否仍引用父region的文件

Regions层次结构

|- Table                 ————————     [HBase 表]
  |- Region              ————————     [HBase 表的 Regions]
    |- Store             ————————     [存储 Region 的每个 ColumnFamily]
      |- MemStore        ————————     [存储 Store 的每个 MemStore]
      |- StoreFile       ————————     [存储 Store 的每个 StoreFile]
        |- Block         ————————     [存储 StoreFile中的每个 Block]

Region的状态转换

HBase在 hbase:meta 中管理着每个Region的状态,而hbase:meta在Zookeeper中持久存在

  • OFFLINE : Region处于脱机状态且未打开
  • OPENING : Region正在被开放
  • OPEN : Region已打开且RegionServer已通知Master
  • FAILED_OPEN : RegionServer无法打开Region
  • CLOSING : Region正处于关闭状态
  • CLOSED : RegionServer已关闭Region并通知Master
  • FAILED_CLOSE : RegionServer无法关闭Region
  • SPLITTING : RegionServer通知Master该Region正在拆分
  • SPLIT : RegionServer通知Master该Region已完成拆分
  • SPLITTING_NEW : Region是由正在进行的拆分创建
  • MERGING : RegionServer通知Master该Region正在与另一个Region合并
  • MERGED : RegionServer通知Master该Region已合并
  • MERGING_NEW : 该Region是由2个Region合并而成

二.常用命令

Ⅰ).查询服务器状态

status

Ⅱ).查询版本号

version

Ⅲ).namespace

namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database; HBase系统默认定义了两个缺省的namespace
hbase:系统内建表,包括namespace和meta表
default:用户建表时未指定namespace的表都创建在此

a).创建namespace

create_namespace 'namespace_name'

b).删除namespace

drop_namespace 'namespace_name'

c).查看namespace

describe_namespace 'namespace_name'

d).列出所有namespace

list_namespace

e).namespace下创建表

create 'namespace_name:table_name', 'ColumnFamily_name'

f).列出所有namespace

list_namespace

Ⅳ).table

a).列出所有table

list

b).创建table

create 'table_name', 'ColumnFamily_name'

c).禁用table

disable 'table_name'

d).查看table是否被禁用

is_disabled 'table_name'

e).启用table

enable 'table_name'

f).查看table是否启用table

is_enable 'table_name'

g).查看table描述和修改

describe 'table_name'

h).修改table属性

alter 'table_name', NAME => 'ColumnFamily_name', VERSIONS => 3

i).插入数据

put 'table_name','row1','ColumnFamily_name:column_name','value'

j).get读取数据

describe 'table_name'

k).查看table描述和修改

## 读取指定行
get 'table_name','row1'

## 读取指定列
get 'table_name','ColumnFamily_name:column_name'

l).scan扫描数据

scan 'table_name'

m).统计数据

count 'table_name'

n).清空table数据

此命令将禁止、删除、重新创建一个表

truncate 'table_name'

o).删除table

## 禁用table
disable 'table_name'

## 删除table
drop 'table_name'
drop_all 'table_name*'

p).删除指定列族

alter 'table_name',{NAME=>'ColumnFamily_name',METHOD=>'delete'}

q).删除指定行

delete 'table_name','row1','ColumnFamily_name:column_name'

Ⅴ).导入导出数据

## 导入数据
hbase org.apache.hadoop.hbase.mapreduce.Driver import table_name /hdfspath

hbase org.apache.hadoop.hbase.mapreduce.Import table_name /hdfspath

## 导出数据
### 1.导出数据到HDFS
hbase org.apache.hadoop.hbase.mapreduce.Export -D mapred.output.compress=true table_name /hdfspath

hbase org.apache.hadoop.hbase.mapreduce.Driver export table_name /hdfspath

   -D mapred.output.compress=true 输出压缩
   -D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec 压缩方式
   -D mapred.output.compression.type=BLOCK 按块压缩

   -D hbase.mapreduce.scan.column.family=<familyName> 列簇
   -D hbase.mapreduce.include.deleted.rows=true 
   -D hbase.mapreduce.scan.row.start=<ROWSTART> 开始rowkey
   -D hbase.mapreduce.scan.row.stop=<ROWSTOP>  终止rowkey

   -Dhbase.client.scanner.caching=100 客户端缓存条数
   -Dmapred.map.tasks.speculative.execution=false
   -Dmapred.reduce.tasks.speculative.execution=false

    -Dhbase.export.scanner.batch=10 批次大小

### 2.过滤导出数据
echo "scan 'namespace_name:table_name',{COLUMNS => 'ColumnFamily_name:column_name',ROWPREFIXFILTER => '****',FILTER=>\"SingleColumnValueFilter('ColumnFamily_name','column_name',=,'regexstring:null')\"}" | hbase shell > export_file_name.txt
## CopyTable是Hbase提供的一个数据同步工具,可用于同步表的部分或全部数据。CopyTable通过运行一个map-reduce任务从源表读出数据再写入到目标表
hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=200 -Dmapreduce.local.map.tasks.maximum=16 -Dmapred.map.tasks.speculative.execution=false --peer.adr=hostname:2181/hbase table_name
## distcp是Hadoop提供的用于复制HDFS文件的工具,可用于同步HBase数据
## 1.停止写入数据
## 2.数据copy到目标集群
hadoop distcp source_hdfs_file_path distination_hdfs_file_path

## 3.目标集群执行
hbase hbck -fixAssignments -fixMeta
## HBase snapshot对region-server影响很小的情况下创建快照、然后复制到目标集群
## 1.源表上创建snapshot
hbase snapshot create -n snapshort_table_name -t table_name 

## 2.snapshot拷贝到目标集群的HDFS
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshort_table_name -copy-from snapshort_hdfs_path -copy-to distination_hdfs_path

Ⅵ).权限管理

a).分配权限

## 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔
## READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')

grant 'user_name','RWC','table_name'

b).查看权限

## 语法:user_permission <table>

user_permission 'table_name'
相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
关系型数据库 MySQL Shell
Apache Doris常用命令
一.配置 Ⅰ).BE vi be.conf # INFO,WARNING,ERROR,FATAL sys_log_level=INFO # ports for admin,web,heartbeat service be_port=9060 be_rpc_port=9070 webserver_.
3707 0
|
分布式数据库 Apache Hbase
《HBase应用与发展之Apache HBase的现状和发展》电子版地址
HBase应用与发展之Apache HBase的现状和发展
85 0
《HBase应用与发展之Apache HBase的现状和发展》电子版地址
|
数据处理 分布式数据库 Apache
《使用Apache Beam和HBase进行高效数据处理》电子版地址
使用Apache Beam和HBase进行高效数据处理
82 0
《使用Apache Beam和HBase进行高效数据处理》电子版地址
|
Shell 分布式数据库 Android开发
HBase的Dead节点问题&&Hbase创建表时报“org.apache.hadoop.hbase.PleaseHoldException: Master is initializing”错误
HBase的Dead节点问题&&Hbase创建表时报“org.apache.hadoop.hbase.PleaseHoldException: Master is initializing”错误
170 0
HBase的Dead节点问题&&Hbase创建表时报“org.apache.hadoop.hbase.PleaseHoldException: Master is initializing”错误
|
缓存 Shell 分布式数据库
hbase的常用命令
现在做的项目用到了hbase,今天就记录一下hbase的一些常用的命令,只是一些比较常用的,当然还有很多命令. 1.进入hbase shell console 2.查看所有的表: list 3.创建表: create 't1', {NAME => 'f1', VERSIONS => 5, TTL => 2592000, BLOCKCACHE => true},创建表名为t1的表,有一个列族为f1,版本有5个版本,过期时间为2592000,开启缓存; 4.删除表: 先disable 't1',在drop 't1'
|
消息中间件 Java Linux
Apache RocketMQ在linux上的常用命令
Apache RocketMQ在linux上的常用命令
290 12
|
分布式计算 资源调度 Hadoop
在文件存储HDFS版上使用 Apache HBase
本文档主要介绍在文件存储HDFS版上使用 Apache HBase 的方法。
199 0
|
Java 测试技术 分布式数据库
Java单元测试之 Apache HBase
对于程序员是否有必要编写test case,何时编写依然存在很多争议,各种互斥的方法论(SE/AM/XP/TDD),以及不同的开发文化,但是可以确定是编写单元测试用例有助于提高编程能力。
661 0
|
消息中间件 Kafka 分布式数据库
Apache Zookeeper常用命令
一.功能简述 Apache ZooKeeper是一种用于分布式应用程序的分布式开源协调服务;提供了命名服务、配置管理、集群管理、分布式锁、队列管理等一系列的功能 Ⅰ).角色功能 ZooKeeper主要包括leader、learner和client三大类角色,其中learner又分为follower和observer 功能描述 a).
3320 0
|
关系型数据库 MySQL 分布式数据库
Apache NiFi之MySQL数据同步到HBase
一.说明 将Apache NiFi做为关系型数据与非关系型数据库的数据同步工具使用,在此场景中需要将mysql导出的avro数据格式转化为json入库HBase 二.开拔 Ⅰ).配置ExecuteSQLRecord a).
2388 0

热门文章

最新文章

相关实验场景

更多

推荐镜像

更多