HBase简介

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

Hbase的相关概念

主键RowKey

主键是用来检索记录的主键,访问hbase table中的行,只有三种方式:

  • 通过单个row key访问
  • 通过row key的range
  • 全表扫描

列族

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

时间戳timestamp

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

HBase的基础知识

架构体系

  • Client 包含访问hbase 的接口,client 维护着一些cache 来加快对hbase 的访问,比如regione 的位置信息
  • Zookeeper
    a.保证任何时候,集群中只有一个running master
    b.存贮所有Region 的寻址入口
    c.实时监控Region Server 的状态,将Region server 的上线和下线信息,实时通知给Master
    d.存储Hbase 的schema,包括有哪些table,每个table 有哪些column family
  • Master 可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
    a.为Region server 分配region
    b.负责region server 的负载均衡
    c.发现失效的region server 并重新分配其上的region

Region Server

维护Master 分配给它的region,处理对这些region 的IO 请求
负责切分在运行过程中变得过大的region
可以看出,client 访问hbase 上数据的过程并不需要master 参与,寻址访问先zookeeper再regionserver,数据读写访问regioneserver。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

HBase中有两张特殊的Table,namespace和meta
namespace:记录了meta表的Region信息,namespace只有一个regio
meta记录了用户创建的表的Region信息,meta可以有多个regoin
Zookeeper中记录了namespace表的location
Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问

物理存储

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

HBase的安装配置

解压 tar -zxvf tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /home/

单节点配置

添加环境变量
vi /etc/profile
export HBASE_HOME=/home/hbase
exportPATH= $HBASE_HOME/bin
修改conf目录下的hbase-env.sh
export JAVA_HOME=/home/jdk
修改hbase-site.xml

     <configuration><property><name>hbase.rootdir</name><value>/home/hbase</value></property></configuration>

启动:bin/目录下的start-hbase.sh脚本

集群搭建

要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下

  • 修改hbase-env.sh
    export JAVA_HOME=/usr/java/jdk1.7.0_55
    //告诉hbase使用外部的zk
    export HBASE_MANAGES_ZK=false
  • 修改hbase-site.xml
 <configuration><!-- 指定hbase在HDFS上存储的路径 --><property><name>hbase.rootdir</name><value>hdfs://ns1/hbase</value></property><!-- 指定hbase是分布式的 --><property><name>hbase.cluster.distributed</name><value>true</value></property><!-- 指定zk的地址,多个用“,”分割 --><property><name>hbase.zookeeper.quorum</name><value>hadoop04:2181,hadoop05:2181,hadoop06:2181</value></property></configuration>
  • vim regionservers
    hadoop03
    hadoop04
    hadoop05
    hadoop06

  • 复制Hbase到其他节点
    scp -r /home/hbase/ hadoop02:/home/
    scp -r /home/hbase/ hadoop03:/home/
    scp -r /home/hbase/ hadoop04:/home/
    scp -r /home/hbase/ hadoop05:/home/
    scp -r /home/hbase/ hadoop06:/home/

  • 启动所有的hbase
    分别启动zk
    ./zkServer.sh start
    启动hbase集群
    start-dfs.sh
    启动hbase,在主节点上运行:
    start-hbase.sh

  • 通过浏览器访问hbase管理页面
    192.168.1.101:60010

  • 为保证集群的可靠性,要启动多个HMaster
    hbase-daemon.sh start master

HBase shell操作

delete表
disable ‘student’
drop ‘student’
create :
create ‘people’,{NAME=>‘info’,VERSIONS=>3},{NAME=>‘data’,VERSIONS=>1}
put ‘people’,‘rk001’,‘info:name’,‘libo’
put ‘people’,‘rk001’,‘info:age’,20
put ‘people’,‘rk001’,‘info:age’,22
put ‘people’,‘rk001’,‘data:phone’,‘110’
put ‘people’,‘rk002’,‘info:name’,‘tang’
查看历史版本
scan ‘people’,{COLUMN=>‘info’,VERSIONS=>3}
超过版本号
scan ‘people’, {RAW => true, VERSIONS => 10}

create ‘student’,‘info’,‘score’;
put ‘student’,‘rk001’,‘info:name’,‘libo’;
get ‘people’,‘rk002’

delete
delete ‘people’, ‘rk001’;
删除user表row key为rk0001,列标示符为info:name的数据
delete ‘people’, ‘rk001’, ‘info:name’

修改表结构
disable 'user
删除一个列族:
alter ‘user’, NAME => ‘f1’, METHOD => ‘delete’ 或 alter ‘user’, ‘delete’ => ‘f1’
添加列族f1同时删除列族f2
alter ‘user’, {NAME => ‘f1’}, {NAME => ‘f2’, METHOD => ‘delete’}
将user表的f1列族版本号改为5
alter ‘people’, NAME => ‘info’, VERSIONS => 5
启用表
enable ‘user’

注:http://jiajun.iteye.com/blog/899632/ 介绍的比较详细的一个资料

Hbase shell命令操作:
查看所有表list:
进入hbase命令行
./hbase shell
显示hbase中的表
list
创建user表,包含info、data两个列族
create ‘user’, ‘info1’, ‘data1’
create ‘user’, {NAME => ‘info’, VERSIONS => ‘3’}
向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan
put ‘user’, ‘rk0001’, ‘info:name’, ‘zhangsan’
向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female
put ‘user’, ‘rk0001’, ‘info:gender’, ‘female’
向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20
put ‘user’, ‘rk0001’, ‘info:age’, 20
向user表中插入信息,row key为rk0001,列族data中添加pic列标示符,值为picture
put ‘user’, ‘rk0001’, ‘data:pic’, ‘picture’
获取user表中row key为rk0001的所有信息
get ‘user’, ‘rk0001’
获取user表中row key为rk0001,info列族的所有信息
get ‘user’, ‘rk0001’, ‘info’
获取user表中row key为rk0001,info列族的name、age列标示符的信息
get ‘user’, ‘rk0001’, ‘info:name’, ‘info:age’
获取user表中row key为rk0001,info、data列族的信息
get ‘user’, ‘rk0001’, ‘info’, ‘data’
get ‘user’, ‘rk0001’, {COLUMN => [‘info’, ‘data’]}
get ‘user’, ‘rk0001’, {COLUMN => [‘info:name’, ‘data:pic’]}
获取user表中row key为rk0001,列族为info,版本号最新5个的信息
get ‘people’, ‘rk0002’, {COLUMN => ‘info’, VERSIONS => 2}
get ‘user’, ‘rk0001’, {COLUMN => ‘info:name’, VERSIONS => 5}
get ‘user’, ‘rk0001’, {COLUMN => ‘info:name’, VERSIONS => 5, TIMERANGE => [1392368783980, 1392380169184]}
获取user表中row key为rk0001,cell的值为zhangsan的信息
get ‘people’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:图片’)”}
获取user表中row key为rk0001,列标示符中含有a的信息
get ‘people’, ‘rk0001’, {FILTER => “(QualifierFilter(=,‘substring:a’))”}
put ‘user’, ‘rk0002’, ‘info:name’, ‘fanbingbing’
put ‘user’, ‘rk0002’, ‘info:gender’, ‘female’
put ‘user’, ‘rk0002’, ‘info:nationality’, ‘中国’
get ‘user’, ‘rk0002’, {FILTER => “ValueFilter(=, ‘binary:中国’)”}
查询user表中的所有信息
scan ‘user’
查询user表中列族为info的信息
scan ‘people’, {COLUMNS => ‘info’}
scan ‘user’, {COLUMNS => ‘info’, RAW => true, VERSIONS => 5}
scan ‘persion’, {COLUMNS => ‘info’, RAW => true, VERSIONS => 3}
查询user表中列族为info和data的信息
scan ‘user’, {COLUMNS => [‘info’, ‘data’]}
scan ‘user’, {COLUMNS => [‘info:name’, ‘data:pic’]}
查询user表中列族为info、列标示符为name的信息
scan ‘user’, {COLUMNS => ‘info:name’}
查询user表中列族为info、列标示符为name的信息,并且版本最新的5个
scan ‘user’, {COLUMNS => ‘info:name’, VERSIONS => 5}
查询user表中列族为info和data且列标示符中含有a字符的信息
scan ‘people’, {COLUMNS => [‘info’, ‘data’], FILTER => “(QualifierFilter(=,‘substring:a’))”}
查询user表中列族为info,rk范围是[rk0001, rk0003)的数据
scan ‘people’, {COLUMNS => ‘info’, STARTROW => ‘rk0001’, ENDROW => ‘rk0003’}
查询user表中row key以rk字符开头的
scan ‘user’,{FILTER=>“PrefixFilter(‘rk’)”}
查询user表中指定范围的数据
scan ‘user’, {TIMERANGE => [1392368783980, 1392380169184]}
删除数据
删除user表row key为rk0001,列标示符为info:name的数据
delete ‘people’, ‘rk0001’, ‘info:name’
删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据
delete ‘user’, ‘rk0001’, ‘info:name’, 1392383705316
清空user表中的数据
truncate ‘people’
修改表结构
首先停用user表(新版本不用)
disable ‘user’
添加两个列族f1和f2
alter ‘people’, NAME => ‘f1’
alter ‘user’, NAME => ‘f2’
启用表
enable ‘user’
###disable ‘user’(新版本不用)
删除一个列族:
alter ‘user’, NAME => ‘f1’, METHOD => ‘delete’ 或 alter ‘user’, ‘delete’ => ‘f1’
添加列族f1同时删除列族f2
alter ‘user’, {NAME => ‘f1’}, {NAME => ‘f2’, METHOD => ‘delete’}
将user表的f1列族版本号改为5
alter ‘people’, NAME => ‘info’, VERSIONS => 5
启用表
enable ‘user’
删除表
disable ‘user’
drop ‘user’
get ‘person’, ‘rk0001’, {FILTER => “ValueFilter(=, ‘binary:中国’)”}
get ‘person’, ‘rk0001’, {FILTER => “(QualifierFilter(=,‘substring:a’))”}
scan ‘person’, {COLUMNS => ‘info:name’}
scan ‘person’, {COLUMNS => [‘info’, ‘data’], FILTER => “(QualifierFilter(=,‘substring:a’))”}
scan ‘person’, {COLUMNS => ‘info’, STARTROW => ‘rk0001’, ENDROW => ‘rk0003’}
scan ‘person’, {COLUMNS => ‘info’, STARTROW => ‘20140201’, ENDROW => ‘20140301’}
scan ‘person’, {COLUMNS => ‘info:name’, TIMERANGE => [1395978233636, 1395987769587]}
delete ‘person’, ‘rk0001’, ‘info:name’
alter ‘person’, NAME => ‘ffff’
alter ‘person’, NAME => ‘info’, VERSIONS => 10
get ‘user’, ‘rk0002’, {COLUMN => [‘info:name’, ‘data:pic’]}
scan ‘people’, {COLUMNS => ‘info’,RAW => true, VERSIONS => 3}

HBase简介及使用相关推荐

  1. Hbase简介及常用命令相关知识总结

    文章目录 目录 前言: 1.Hbase简介 1.1.什么是Hbase 1.2.与传统数据库的对比 1.3.Hbase集群中的角色 2.Hbase数据模型 3.Hbase命令 总结: 目录 前言: 对于 ...

  2. 【hadoop生态之Hbase】HBASE简介【笔记+代码】

    一.HBaes介绍 1.1.HBase简介 HBase是一个分布式的.面向列的开源数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. 大:上亿行.百万 ...

  3. HBase 2.x ---- HBase简介

    HBase 2.x ---- HBase简介 1. HBase定义 2. HBase数据模型 1. HBase逻辑结构 2. HBase物理存储结构 3. 数据模型 3. HBase基本架构 1. H ...

  4. HBase简介及安装

    一.HBase简介 1.什么是HBase HBase(Hadoop DataBase)是一个高可靠性.高性能.面向列.可伸缩.实时读写的分布式存储系统,利用HBase技术可在廉价PC Server上搭 ...

  5. HBase基础【HBase简介、HBase安装、HBase shell操作】

    文章目录 一 HBase简介 1 HBase定义 2 HBase数据模型 (1) HBase逻辑结构 (2) HBase物理存储结构 (3)数据模型 a)Name Space b)Table c)Ro ...

  6. 大数据技术之 HBase简介

    大数据技术之 HBase 第 1 章 HBase 简介 1.1 HBase 定义 HBase 是一种分布式.可扩展.支持海量数据存储的 NoSQL 数据库. 1.2 HBase 数据模型 逻辑上,HB ...

  7. Phoenix(sql on hbase)简介

    Phoenix(sql on hbase)简介 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC dri ...

  8. 大数据技术之HBase(一)HBase简介、HBase快速入门、HBase进阶

    文章目录 1 HBase 简介 1.1 HBase 定义 1.2 HBase 数据模型 1.2.1 HBase 逻辑结构 1.2.2 HBase 物理存储结构 1.2.3 数据模型 1.3 HBase ...

  9. 【笔记】大数据技术之HBase简介与应用(四)

    HBase简介 是BigTable开源实现 网页索引:爬虫-> BigTable运行MapReduce HBase 是谷歌的GFS的开源实现 面向列,分布式数据库 底层对应关系 BigTable ...

  10. Hbase简介与基本原理

    一.Hbase简介 HBase(Hadoop Database)是一个开源的非关系型的分布式数据库,运行于HDFS文件系统之上,可以容错地存储海量稀疏的数据.HBase是一个高可靠.高性能.面向列.可 ...

最新文章

  1. 说了这么久中台,那你知道中台是什么?在治什么病吗?
  2. DevExpress的LookUpEdit怎样不显示列名
  3. wxWidgets随笔(3)-hello,world
  4. 目标检测--Rich feature hierarchies for accurate object detection and semantic segmentation(CVPR 2014)
  5. c语言打印跳动的图案,c语言程序设计-跳动的三角形
  6. web.xml:url-pattern
  7. 暮光之城破晓 - 看看会发生什么
  8. 适用于您教会的21个最佳教堂WordPress主题(2020)
  9. 复制一颗二叉树(java语言)
  10. 登录页面(含后台)login.php
  11. Kb 和 KB 的区别
  12. 怎样把视频中的音频提取成mp3?
  13. 【元宇宙欧米说】从GameFi的视角讨论Web2到Web3的利弊
  14. Ubuntu 更换软件源
  15. 基于tensorflow + Vgg16进行图像分类识别
  16. excel手机版_适用于手机的Office办公软件:微软采取3合1,这是为何
  17. Java成神及面试资源
  18. Brightcove推出业务连续性套件,以帮助安全地管理业务沟通
  19. 互联网金融专业女生的优势适合女生吗
  20. alter database datafile offline drop 与 alter tablespace drop datafile 区别

热门文章

  1. 安卓开发和python哪个难_入门IT该学Java还是Python?看完这篇你就懂了
  2. shell export path_学习Shell编程
  3. EasyUI:textbox自定义验证手机号(正则)
  4. WOW、ScrollReveal:WOW.js和ScrollReveal.js基础学习
  5. 使用Cmder替换cmd,让你的开发飞起来
  6. datetime sql
  7. 论文笔记_S2D.28_2014-ICRA_REMODE:概率单目实时稠密重建
  8. OpenCV_Find Basis F-Matrix and computeCorrespondEpilines(获取一对图像的基础矩阵及对应极线)
  9. 使用move_base做4个点循环跑的导航
  10. Java线程基础(二)