大数据基础之HBase入门介绍

雅泽1年前技术文章347



hbase.png

一、HBase简介

  • HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。

  • 考:如何存储物流信息

运单号:625311858890

2018-01-07 10:09:25	上海			已发货
2018-01-07 18:27:32	上海航空部		已收件
2018-01-07 20:25:38	快件离开上海航空部	已发往北京
2018-01-09 08:27:14	北京回龙观		派件中
2018-01-09 12:37:37	北京回龙观		已签收

二、HBase三要素

  • 1、主键:Row Key (主键是用来检索记录的主键,访问hbase table中的行,只有三种方式:)

    • 通过单个row key访问

    • 通过row key的range

    • 全表扫描(scan)

  • 2、列族:Column Family

    • 列族在创建表的时候声明,一个列族可以包含多个列,列中的数据都是以二进制形式存在,没有数据类型。

  • 3、时间戳:timestamp

    • HBase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引

三、HBASE基础知识

1、物理存储

  • able 在行的方向上分割为多个HRegion,一个region由[startkey,endkey)表示,每个HRegion分散在不同的RegionServer中

2、架构体系

  • Client 包含访问hbase 的接口,client 维护着一些cache 来加快对hbase 的访问,比如regione 的位置信息

  • Zookeeper

    • 保证任何时候,集群中只有一个running master

    • 存贮所有Region 的寻址入口

    • 实时监控Region Server 的状态,将Region server 的上线和下线信息,实时通知给Master

    • 存储Hbase 的schema,包括有哪些table,每个table 有哪些column family。Master 可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行

    • 为Region server 分配region

    • 负责region server 的负载均衡

    • 发现失效的region server 并重新分配其上的region

3、HBase的逻辑梳理

    • HBase中有两张特殊的Table,-ROOT-(hbase:namespace)和.META.(hbase:meta)

    • -ROOT-(hbase:namespace) :记录了.META.(hbase:meta)表的Region信息,-ROOT-(hbase:namespace)只有一个region

    • .META.(hbase:meta) :记录了用户创建的表的Region信息,.META.(hbase:meta)可以有多个regoin

    • Zookeeper中记录了-ROOT-(hbase:namespace)表的location

    • Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-(hbase:namespace)表,接着访问.META.(hbase:meta)表,最后才能找到用户数据的位置去访问

四、Region Server

  • 维护Master 分配给它的region,处理对这些region 的IO 请求

  • 负责切分在运行过程中变得过大的region

可以看出,client 访问hbase 上数据的过程并不需要master 参与,寻址访问先zookeeper再regionserver,数据读写访问regioneserver。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

五、系统架构

六、HBASE与相关软件

  • hadoop-2.2.0

  • hbase-0.96.2-hadoop2

  • JDK7

  • RHEL6.3

  • 前提条件:本机或集群环境下hadoop.1.1.2已经安装成功

七、HBase Shell

  • hbase提供了一个shell的终端给用户交互(#$HBASE_HOME/bin/hbase shell )

名称

命令表达式

创建表

create '表名称', '列族名称1','列族名称2','列族名称N'

添加记录

put '表名称', '行名称', '列名称:', '值'

查看记录

get '表名称', '行名称'

查看表中的记录总数

count '表名称'

删除记录

delete '表名' ,'行名称' , '列名称'

删除一张表

先要屏蔽该表,才能对该表进行删除,第一步 disable '表名称' 第二步 drop '表名称'

查看所有记录

scan "表名称"

查看某个表某个列中所有数据

scan "表名称" , {COLUMNS=>'列族名称:列名称'}

更新记录

就是重写一遍进行覆盖

八、HBASE Shell的DDL操作

  • 1、创建表

>create 'users','user_id','address','info'
  • 2、列出全部表

>list
  • 3、得到表的描述

>describe 'users'
  • 4、创建表

>create 'users_tmp','user_id','address','info'
  • 5、删除表

>disable 'users_tmp'
>drop 'users_tmp'

九、HBASE Shell的DML操作

  • 1、添加记录

put 'users','xiaoming','info:age','24';
put 'users','xiaoming','info:birthday','1987-06-17';
put 'users','xiaoming','info:company','alibaba';
put 'users','xiaoming','address:contry','china';
put 'users','xiaoming','address:province','zhejiang';
put 'users','xiaoming','address:city','hangzhou';
put 'users','zhangyifei','info:birthday','1987-4-17';
put 'users','zhangyifei','info:favorite','movie';
put 'users','zhangyifei','info:company','alibaba';
put 'users','zhangyifei','address:contry','china';
put 'users','zhangyifei','address:province','guangdong';
put 'users','zhangyifei','address:city','jieyang';
put 'users','zhangyifei','address:town','xianqiao';
  • 2、获取一条记录

    • 1.取得一个id的所有数据

    • 2.获取一个id,一个列族的所有数据

    • 3.获取一个id,一个列族中一个列的所有数据

>get 'users','xiaoming'
>get 'users','xiaoming','info'
>get 'users','xiaoming','info:age'
  • 3、更新记录

>put 'users','xiaoming','info:age' ,'29'
>get 'users','xiaoming','info:age'
>put 'users','xiaoming','info:age' ,'30'
>get 'users','xiaoming','info:age'
  • 4、获取单元格数据的版本数据

>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>2}
>get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>3}
  • 5、获取单元格数据的某个版本数据

> get 'users','xiaoming',{COLUMN=>'info:age',TIMESTAMP=>1364874937056}
  • 6、全表扫描

>scan 'users'
  • 7、删除xiaoming值的'info:age'字段

>delete 'users','xiaoming','info:age'
  >get 'users','xiaoming'
  • 8、删除整行

>deleteall 'users','xiaoming'
  • 9、统计表的行数

>count 'users'
  • 10、清空表

>truncate 'users'


相关文章

JMS 介绍

JMS 介绍

一、JMS的基础JMS是什么:JMS是Java提供的一套技术规范JMS干什么用:用来异构系统 集成通信,缓解系统瓶颈,提高系统的伸缩性增强系统用户体验,使得系统模块化和组件化变得可行并更加灵活通过什么...

chronyc时间同步器配置

chronyc时间同步器配置

chronyc & chronydchrony 有两个核心组件:chronyd守护进程,主要用于调整内核中运行的系统时间和时间服务器同步chronyc命令行界面程序,让用户能够对 chrony...

ES底层数据存储原理

ES底层数据存储原理

1、ES底层数据存储原理架构图Segment工作流程:A、 新的文档在内存中组织B、 每隔一段时间,buffer将会被提交:生成一个新的segment(一个额外的新的倒序索引)并被写到磁盘,同时一个新...

用了函数就无法使用索引?MySQL函数索引值得你拥有

MySQL中的索引,就像图书馆里的索引卡片,帮我们快速定位到想要的信息。但是,如果你对这些卡片动了点“手脚”,比如用个函数来“改造”一下索引字段,那么这些卡片可能就不再那么有效了,查找起来就得费劲多了...

flink算子优化

flink算子优化

这里先看两个任务的逻辑执行图:图一:全部打散的任务执行图图二:使用slot资源共享的任务执行图图一和图二中的两个任务是同一个任务,不同点是图一将所有的算子全部打散,在代码中使用了以下逻辑:,或者就是禁...

hbase-auto balancer失效

hbase-auto balancer失效

背景集群中,发现hbase 的compaction 队列一直增长,出现hang住的情况,排查发现,一些表的region集中在某些机器上,分布不均匀。但是排查发现auto balancer是默认开启的。...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。