大数据——HBase基础

HBase概述

HBase是一个领先的NoSQL数据库

  • 是一个面向列存储的数据库
  • 是一个分布式hash map
  • 基于Google Big Table论文
  • 使用HDFS作为存储并利用其可靠性

HBase特点

  • 数据访问速度快,响应时间约2-20毫秒
  • 支持随机读写,每个节点20k~100k+ops/s
  • 可扩展性,可扩展到20000+节点

HBase发展历史

时间时间
2006年Google发表了关于Big Table论文
2007年第一个版本的HBase和Hadoop0.15.0一起发布
2008年HBase作为Hadoop的子项目
2010年HBase称为Apache顶级项目
2011年Cloudera基于HBase0.90.1推出CDH3
2012年HBase发布了0.94版本
2013-2014年HBase先后发布了0.96版本/0.98版本
2015-2016年HBase先后发布了1.0版本、1.1版本和1.2.4版本
2017年HBase发布1.3版本
2018年HBase先后发布了1.4版本和2.0版本

HBase用户群体

在这里插入图片描述

HBase应用场景(一)

增量数据-时间序列数据

  • 高容量,高速写入
    在这里插入图片描述

HBase应用场景(二)

信息交换-消息传递

  • 高容量,高速读写
    在这里插入图片描述

HBase应用场景(三)

内容服务-Web后端应用程序

  • 高容量,高速读写
    在这里插入图片描述

HBase应用场景示例

Facebook

  • 9000 memcached instances,4000 shards mysql

Alibab

  • 自2010年以来,HBase一直为阿里搜索系统的核心存储

  • 当前规模(到2018为止)

     3个集群,每个有1000+ nodes
     在Yarn上与Flink共享
      每天提供超过10M+ops/s的服务
    

Apache HBase生态圈

HBase生态圈技术

  • Lily-基于HBase的CRM
  • OpenTSDB-HBase面向时间序列数据管理
  • Kylin-HBase上的OLAP
  • Phoenix-SQL操作HBase工具
  • Splice Machine-基于HBase的OLTP
  • Apache Tephra-HBase事务支持
  • TiDB-分布式SQL DB
  • Apache Omid-优化事务管理
  • Yarn application timeline server v.2迁移到HBase
  • Hive metadata存储可以迁移到HBase
  • Ambari Metrics Server将使用HBase做数据存储

HBase物理架构

概述

HBase采用Master/Slave架构

  • HMaster
  • RegionServer
  • Zookeeper
  • HBase Client
  • Region

在这里插入图片描述

HMaster

HMaster的作用

  • 是HBase集群的主节点,可以配置多个,用来实现HA
  • 管理和分配Region
  • 负责RegionServer的负载均衡
  • 发现失效的RegionServer并重新分配其上的Region

RegionServer

RegionServer负责管理维护Region

  • 一个RegionServer包含一个WAL、一个BlockCache(读缓存)和多个Region
  • 一个Region包含多个存储区,每个存储区对应一个列簇
  • 一个存储区由多个StoreFile和MemStore组成
  • 一个StoreFile对应于一个HFile和一个列簇
  • HFile和WAL作为序列文件保存在HDFS上
  • Client与RegionServer交互

在这里插入图片描述

Region和Table

  • 单个Table(表)被分区成大小大致相同的Region
  • Region是HBase集群分别数据的最小单位
  • Region被分配给集群中的RegionServer
  • 一个Region只能分配给一个RegionServer

在这里插入图片描述

HBase逻辑架构-Row

Rowkey(行键)是唯一的并已排序
Schema可以定义何时插入记录
每个Row都可以定义自己的列,即使其他Row不使用

  • 相关列定义为列簇

使用唯一时间戳维护多个Row版本

  • 在不同版本中值类型可以不同

HBase数据全部以字节存储
在这里插入图片描述

HBase数据管理

数据管理目录

  • 系统目录表hbase:meta

     存储元数据等
    
  • HDFS目录中的文件

  • Servers上的region实实例

HBase数据在HDFS上

  • 可以通过HDFS进行修复File

  • 修复路径

     RegionServer->Table->Region->RowKey->列簇
    

在这里插入图片描述

HBase架构特点

强一致性
自动扩展

  • 当Region变大会自动分割
  • 使用HDFS扩展数据并管理空间

写恢复

  • 使用WAL(Write Ahead Log)

与Hadoop集成

HBase Shell

HBase Shell是一种操作HBase的交互模式

  • 支持完整的HBase命令集
命令类别命令
Generalversion, status, whoami, help
DDLalter, create, describe, disable, drop, enable, exists, is_disabled, is_enabled, list
DMLcount, delete, deleteall, get, get_counter, incr, put, scan, truncate
Toolsssign, balance_switch, balancer, close_region, compact, flush, major_compact, move, split, unassign, zk_dump
Replicationadd_peer, disable_peer, enable_peer, remove_peer, start_replication, stop_replication

HBase服务启动

  • 启动hadoop
[root@hadoop100 ~]# start-all.sh
[root@hadoop100 ~]# jps

在这里插入图片描述

  • 启动master
[root@hadoop100 ~]# hhbase-daemon.sh start  master

在这里插入图片描述

  • 启动hbase shell
[root@hadoop100 ~]# hbase shell

在这里插入图片描述

HBase操作

  • 查看版本
version

在这里插入图片描述

  • 查看集群状态
status

在这里插入图片描述

  • 查看当前用户以及分组
whoami

在这里插入图片描述

  • 查看帮助
help

在这里插入图片描述

  • 查看HBase所有的表
list

在这里插入图片描述
list相当于mysql中的show tables

  • 创建一个表
create 'customer',{NAME=>'addr'},{NAME=>'order'}

在这里插入图片描述

  • 列出表的详细信息
desc 'customer'

在这里插入图片描述

  • 添加数据
put 'customer','1','addr:city','montoreal'

在这里插入图片描述

  • 获取数据
get 'customer','1'

在这里插入图片描述

  • 添加数据并查看
put 'customer','1','addr:address','210021 xiaohang road'
get 'customer','1'

在这里插入图片描述
在同一个列名中写入不同的值

put 'customer','1','addr:city','nanjing'
get 'customer','1'

在这里插入图片描述
数据被覆盖了

  • 修改列簇名并查看表详情
disable 'customer'
alter 'customer',{NAME=>'sample'},{NAME=>'order',METHOD=>delete'}
desc 'customer'

在这里插入图片描述
一定用先禁用表:disable

  • 添加数据加上时间戳并查看
enable 'customer'
put 'customer','1','addr:city','xuzhou',1600920903023
get 'customer','1','addr:city'

在这里插入图片描述
注意:如果添加数据为同一列名的,时间戳在已有的数据时间戳后的将覆盖掉数据,否则不会

  • 查看记录
#查看所有记录
scan 'customer'
#查看列名为city的数据
scan 'customer',{COLUMNS=>'addr:city'}
#查看前一条数据
scan 'customer',{LIMIT=>1}

在这里插入图片描述

  • 统计表记录数
put 'customer','2','addr:city','zhenjiang'
put 'customer','2','addr:address','baohua'
scan 'customer'
count 'customer'

在这里插入图片描述

  • 删除行键再统计表记录数
delete 'customer','2'
count 'customer'
  • 添加列簇
alter 'customer',NAME=>'name'
  • 删除列簇
alter 'customer',NAME=>'sample',METHOD=>'delete'
  • 修改表名并查看
snapshot 'customer','temp'
clone_snapshot 'temp','cust'
delete_snapshot 'temp'
desc 'cust'

HBase基本命令总结

用户权限:
user_permisooion ['表名'...]
grant '用户名', 'RWXCA'
表:
    增:create '表名',{NAME=>'列簇名'},{NAME=>'列簇名'}...
    删:disable '表名'  ----> drop '表名'
    改:snapshot '表名','镜像名'    
           clone_snapshot '镜像名','新表名'
    查:list
行:put的时候:put '表名','行键','列簇名:列名','值'[,时间戳]
	可以单独删除行,行内数据全部删除
列簇:
    增:alter '表名',NAME=>'列簇名'
    删alter '表名',NAME=>'列簇名',METHOD='delete'
    改:先加,后删
    查:get '表名','行键','列簇名'
列:
cell:值+时间戳

HBase导入文件

将文档数据导入HBase

##通过hbase shell导入文档数据
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator=,  \
-Dimporttsv.columns="HBASE_ROW_KEY,order:numb,order:date" \
customer file:///home/vagrant/hbase_import_data.csv

示例

  • 先把emp_basic.csv文件放入家目录下
  • 上传到hdfs上
[root@hadoop100 ~]# hdfs dfs -put /root/emp_basic.csv /test/
  • 创建表
create 'emp_basic',{NAME=>'emp'},{NAME=>'time'}

在这里插入图片描述

  • 通过hbase导入文件
[root@hadoop100 ~]# hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator="," \
-Dimporttsv.columns="HBASE_ROW_KEY, \
emp:name,emp:job_title,emp:company,time:sDate,time:eDate" \
"emp_basic" /test/emp_basic.csv

反斜杠\代表换行的意思,如放一行写入,则不需要加反斜杠

  • 查询数据
get 'emp_basic','emp_id'

在这里插入图片描述

修改表权限

  • 配置hbase-site.xml
[root@hadoop100 ~]# vi /opt/hbase/conf/hbase-site.xml
  • 输入
<property>
<name>hbase.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property>
<name>hbase.superuser</name>
<value>root</value>
</property>
  • 保存退出
  • 重启hbase master
[root@hadoop100 ~]# hbase-daemon.sh restart  master
  • 再次进入hbase shell
[root@hadoop100 ~]# hbase shell
  • 赋权
disable 'customer'
grant 'root', 'RWXCA'
R - 代表读取权限
W - 代表写权限
X - 代表执行权限
C - 代表创建权限
A - 代表管理权限

在这里插入图片描述

  • 查看表的权限
user_permission 'customer'

在这里插入图片描述

  • 撤销用户访问表的权限
revoke 'customer'

慎用

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页