写点什么

HBase 原理、Shell、API 读写操作

用户头像
binfirechen
关注
发布于: 1 小时前

一、HBase 介绍

1)HBase 分布式、多版本、面向列的开源数据库

2)利用 Hadoop HDFS 作为文件存储系统,提供高可靠性、高性能、列存储、可伸缩、实时读写、适用于非结构化数据存储的数据库系统

3)利用 Hadoop MapReduce 来处理 Hbase 中的海量数据

4)利用 Zoopkeeper 作为分布式系统服务

 

二、特点

1)数据量大:一个表可以上亿行,上百万列(列多时,插入变慢)

2)面向列:面向列簇的存储和权限控制,列(族)独立检索

3)稀疏:对于为空(null)的列,并不占用存储空间

4)多版本:每个 cell 中数据有多个版本,默认版本号自动分配,是单元格插入时的时间戳

5)无类型:Hbase 中的数据都是字符串,没有类型

6)强一致性:同一行数据的读写只在同一台 Region Server 上进行

7)有限查询方式:仅支持三种扫描方式(单个 rowkey 查询,通过 rowkey 的 range 查询,全表扫描)

8)高性能随机读写

 

三、数据模型

1)行:同一个 key 对应所有数据

2)列族:相似的列数据通常被划分成一个列族

3)列:列名

4)Cell 及时间戳(版本)

    每个 cell 有任意多的版本

    建表时设置每个列族可以保留多个版本

5)三维有序

 SortedMap(RowKey,

    List(SortedMap(Column,

        List(value,Timestamp))))

 

rowkey(ASC)+columnLabel(ASC)+Version(DESC)->value



HRegionServer 管理多个 HRegion

HRegion 首先将操作写入 HLog,将数据写入 MemStore 里面,MemStroe 达到一定阈值后,

Flush 到 StoreFile, StoreFile 达到阈值后,会 combine 到 HFile,写入到 Hadoop 集群中

 

Zookeeper:监控 HRegionServer 上线与下线的状态,启动会通知 HMaster

HMaster:负责负载均衡,以及 HRegionServer 的 HRegion 分配

HRegion:管理 MemStore,组合成大的 StoreFile,写入到 HDFS 集群中

 








META 表记录多个 region

ROOT 记录每个 region 所在 region server

ZooKeeper 找到 ROOT 表


META 表记录多个 region

ROOT 记录每个 region 所在 region server

ZooKeeper 找到 ROOT 表

 

 

四、Hbase 应用

 

配置 Hbase-env.sh

Hbase-site.xml

Regionserver

运行 start-hbase.sh

启动 hbase shell

 

Vim hbase-site.xml



Vim regionServer


./start-hbase.sh

 

jps


HQuorumPeer :Zoopkeeper

 

./hbase shell

 

list



Exit



./hadoop fs -ls /hbase 默认会建立/hbase 目录

 


Create ‘test’,’info’  info 列族

Put ‘test’,’row1’,’info:A’,’1’  row1:rowkey info:A 列族 1:值

Put ‘test’,’row1’,’info:’,’1’ 

Put ‘test’,’row1’,’info:B’,’1’

 

Scan ‘test’



更新

Put ‘test’,’row1’,’info:B’,’2’

Scan ‘test’



如何获取之间的版本(通过 api 方式)

Disable ‘test’

Drop ‘test’

List

 

api 操作


Configuraiton conf=new Configuration();

HBaseConfiguration hbconf=new HBaseConfiguration(conf);

HbaseAdmin admin=new HbaseAdmin(hbconf);

HTableDescriptor tableDesc=new HTableDescriptor(“test”);

tableDesc.addFamily(new HColumDescription(“info”));

admin.createTable(tableDesc);

 

List

  

Scan ‘test’



插入数据

Configuraiton conf=new Configuration();

HBaseConfiguration hbconf=new HBaseConfiguration(conf);

HTable table=new HTable(hbconf,”test”);

Put put=new Put(“row1”.getBytes()); //创建 rowKey

Put.add(“info”.getBytes(),”A”.getBytes(),”1”.getBytes());  //插入列族 Put‘test’,’row1’,’info:B’,’2’

table.put();

table.close();

 

Scan ‘test’



查找数据

 

Configuraiton conf=new Configuration();

HBaseConfiguration hbconf=new HBaseConfiguration(conf);

HTable table=new HTable(hbconf,”test”);

Scan scan=new Scan();

ResultScanner rs=table.getScanner(scan);

for(Result r:res){

   for(KeyValue kv:r.row()){

System.out.println(“rowkey=>”+new String(r.getRow())

              +”family=>”+new String(kv.getFamily())  列族

              +”qualfier=>”+new String(kv.getQualifier())列名

              +”timestamp=>”+kv.getTimestamp()

              +”value=>”+new String(kv.getValue())

);

 

}

   

}


用户头像

binfirechen

关注

还未添加个人签名 2020.11.27 加入

85普通大学生的IT之路

评论

发布
暂无评论
HBase 原理、Shell、API读写操作