当前位置: 首页 > news >正文

大数据技术之HBase(二)HBase原理简介

一、HBase定义

1.1 HBase定义

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库非结构化数据存储的数据库,基于列的模式存储。利用Hadoop HDFS作为其文件存储系统,写入性能很强,读取性能较差。利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。

关系型数据库存储数据是以表格的形式存储,非关系型数据库是以<k,v>进行存储。通过<k,v>进行存储,当在用key读取value的时候,效率更高,速度更快,使用起来更灵活。

划重点:
HBase是基于列存储的,主要用来存储非结构化和半结构化的松散数据,适合大数据的实时查询;
利用HDFS作为其文件存储系统;
利用MapReduce来处理 HBase中的海量数据;
利用Zookeeper作为其分布式协同服务;

1.2 HBase数据模型

  • Name Space

命名空间,类似于关系型数据库的 DatabBase 概念,每个命名空间下有多个表。HBase 有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表, default 表是用户默认使用的命名空间。

  • Table

类似于关系型数据库的表概念。不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。

  • Row

HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成,数据是按照 RowKey 的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要。

  • Column

HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义 。

  • Time Stamp

用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会 自动为其加上该字段,其值为写入 HBase 的时间。

  • Cell

由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。

1.3 HBase 架构

  • Master

Master 是所有 Region Server 的管理者,其实现类为 HMaster(服务器上有个HMaster进程).

功能:负责通过ZK监控RegionServer进程状态,同时是所有元数据变化的接口。内部启动监控执行region的故障转移和拆分的线程。

  • RegionServer

主要进程,具体实现类为HRegionServer,部署在datanode上。

功能:主要负责数据cell的处理。同时在执行区域的拆分和合并的时候由RegionServer来实际执行。

  • Zookeeper

HBase 通过 Zookeeper 来做 Master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。

  • HDFS

HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用的支持。

二、HBase基本操作

-- 启动关闭相关
-- 1.启动hbase
bin/start-hbase.sh
-- 2.查看启动情况,
-- 单机版只会有 HMaster 进程
jps
-- 3.关闭hbase
bin/stop-hbase.sh  

基础命令:

-- 基础命令
-- 1.进入 HBase 客户端命令行
bin/hbase shell
-- 2.查看帮助命令
help
-- 3.查看当前数据库中有哪些表
list

表空间相关操作:

-- 表空间
-- 1.创建namespace
create_namespace 'nametest'  
-- 2.删除namespace
drop_namespace 'nametest'  
-- 3.查看namespace
describe_namespace 'nametest'  
-- 4.列出所有namespace
list_namespace  
-- 5.在namespace下创建表
create 'nametest:testtable', 'fm1'  
-- 6.查看namespace下的表
list_namespace_tables 'nametest'  

表相关操作:

创建表,表中有两个列族 baseinfo, schoolinfo
create 'bigdata:student','baseinfo','schoolinfo'查看指定表全名空间中的表
list_namespace_tables 'bigdata'查看表描述
desc/describe 'bigdata:student'禁用/启用
disable 'bigdata:student'
enable 'bigdata:student'查看是否启用/禁用
is_disabled 'bigdata:student'
true                                   
is_enabled 'bigdata:student'
false 删除表  注意,首先要将删除的表设置为禁用状态才可以删除,否则会报错
drop 'bigdata:student'新增列族
alter 'bigdata:student','teacherinfo'删除列族
alter 'bigdata:student',{NAME=>'teacherinfo',METHOD=>'delete'}更改列族存储版本的限制
alter 'bigdata:student',{NAME=>'baseinfo',VERSIONS=>3}增加数据
put 'bigdata:student','rowkey1','baseinfo:name','tom'
put 'bigdata:student','rowkey1','baseinfo:birthday','1999-01-01'
put 'bigdata:student','rowkey1','baseinfo:age','24'
put 'bigdata:student','rowkey1','schoolinfo:name','bdqn'
put 'bigdata:student','rowkey1','schoolinfo:address','jsxueyuan'put 'bigdata:student','rowkey2','baseinfo:name','jerry'
put 'bigdata:student','rowkey2','baseinfo:birthday','2003-07-02'
put 'bigdata:student','rowkey2','baseinfo:age','20'
put 'bigdata:student','rowkey2','schoolinfo:name','njzb'
put 'bigdata:student','rowkey2','schoolinfo:address','wending'put 'bigdata:student','rowkey3','baseinfo:name','mands'
put 'bigdata:student','rowkey3','baseinfo:birthday','2022-05-21'
put 'bigdata:student','rowkey3','baseinfo:age','1'
put 'bigdata:student','rowkey3','schoolinfo:name','yey'
put 'bigdata:student','rowkey3','schoolinfo:address','bj'put 'bigdata:student','rowkey4','baseinfo:name','roboot'
put 'bigdata:student','rowkey4','baseinfo:birthday','2018-12-31'
put 'bigdata:student','rowkey4','baseinfo:age','5'
put 'bigdata:student','rowkey4','schoolinfo:name','xiaoxue'
put 'bigdata:student','rowkey4','schoolinfo:address','shanghai'根据条件查询
get 'bigdata:student','rowkey1'
get 'bigdata:student','rowkey2','baseinfo'
get 'bigdata:student','rowkey2','schoolinfo'
get 'bigdata:student','rowkey2','baseinfo:name'
get 'bigdata:student','rowkey3',{COLUMN=>'baseinfo:name'}查看指定列中不同版本的数据
get 'bigdata:student','rowkey2',{COLUMN=>'baseinfo:name','VERSIONS'=>3}删除指定列族下的指定列
delete 'bigdata:student','rowkey3','baseinfo:age'
删除指定行
deleteall 'bigdata:student','rowkey3'全表扫描
scan 'bigdata:student'
全表扫描指定列族
scan 'bigdata:student', COLUMN=>'baseinfo'
全表扫描指定列族指定列
scan 'bigdata:student', COLUMN=>'baseinfo:birthday'扫描指定起始行至结束行(不包含)
scan 'bigdata:student',{COLUMNS=>'baseinfo:name', STARTROW=>'rowkey1', STOPROW=>'rowkey4'}scan 'bigdata:student',{COLUMNS=>'baseinfo:name', STARTROW=>'rowkey1', STOPROW=>'rowkey4', LIMIT=>3}
scan 'bigdata:student',{COLUMNS=>'baseinfo:name', STARTROW=>'rowkey1', STOPROW=>'rowkey4', LIMIT=>3,VERSIONS=>3}值包含nt
scan 'bigdata:student',FILTER=>"ValueFilter(=,'substring:bdqn')"值=24
scan 'bigdata:student',FILTER=>"ValueFilter(=,'binary:24')"列以birth开头的
scan 'bigdata:student',FILTER=>"ColumnPrefixFilter('birth')"以birth开头,且 值中包含2022
scan 'bigdata:student', FILTER=>"ColumnPrefixFilter('birth') AND ValueFilter(=,'substring:2022')"以birth开头,且 值中包含2022 或者 1999

http://www.lryc.cn/news/33219.html

相关文章:

  • 垒骰子(爆搜/DP)
  • Telink之标准SDK的介绍_1
  • JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理
  • 快递计费系统--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
  • JS - 自定义一周的开始和结束,计算日期所在月的周数、所在月第几周、所在周的日期范围
  • Linux :理解编译的四个阶段
  • 197.Spark(四):Spark 案例实操,MVC方式代码编程
  • Vue 项目如何迁移小程序
  • unit1-问候以及介绍
  • 杂记——19.git上传时出现the remote end hung up unexpectedly错误
  • python123平台题目
  • ROS学习笔记(六):TF坐标变换
  • 【python】为你绘制玫瑰一束,爱意永存
  • 智能家居创意产品一Homkit智能通断器
  • 【数据库】MySQL表的增删改查(基础命令详解)
  • 2023年全国最新保安员精选真题及答案15
  • KPN对任意形状文本检测
  • 同城外卖跑腿系统源码分析
  • SCL_PFENET跑通填坑
  • Redis 做延迟消息队列
  • 刚果金FERI证书模板
  • 什么是蜕变测试?
  • 74. ‘pip‘不是内部或外部命令,也不是可运行的程序-解决办法
  • MIL图像处理那些事:应用程序模块(Mapp)- 初始化和控制MIL应用程序的执行环境
  • Pytorch基础语法学习2——argparse模块
  • CHAPTER 2 目录及文件
  • 2021牛客OI赛前集训营-提高组(第四场) T1最终测试
  • 【华为OD机试2023】租车骑绿岛 C++ Java Python
  • 05-路由中的Hook
  • Ubuntu20.04 源码编译安装SRS-6流媒体服务器,开启GB28181支持