hbase基础

本文深入讲解HBase数据模型,包括表、列簇、列及时间戳的概念,详细阐述HBase数据查询、写入流程,以及预分区、数据导入等高级特性。同时,介绍了HBase与Hive的集成应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进入hbase shell

bin/hbase shell

 

Table

Columnfamily

Column01,column02

每条数据有唯一的标识符

Rowkey 主键

rowkey+columnfamily+column1+timestamp:value=>cell

插入一条数据

put 'user','100001','info:name','zhangsan'

表名、rowkey、列簇:列名、value(timestamp可以不指定)

 

Hbase里的存储都是字节数组

一个表里可以有很多个列簇

Hbase数据查询的三种方式:

1.依据rowkey查询,最快

get

2.范围查询

scan range   使用最多

3.全表扫描

scan

(get 'user','100001','info:name')

注:  按指定rowkey获取唯一一条记录:get方法。

按指定条件获取一批记录:scan方法。

实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值的注意:

scan可以通过setCaching与setBatch方法提高速度(以空间换时间)

scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。

scan可以通过setFilter方法添加过滤器,这也是分页(性能差)、多条件查询的基础。

scan.setCacheBlocks()

Hadoop的MR运算中,Hbase可以作为输入数据源参与运算,其中作为HTable的迭代器Scan有几个使用技巧

涉及的方法如下:

public void setBatch(int batch)
public void setCaching(int caching)
public void setCacheBlocks(boolean cacheBlocks)

public void setBatch(int batch) :

为设置获取记录的列个数,默认无限制,也就是返回所有的列

public void setCaching(int caching):

每次从服务器端读取的行数,默认为配置文件中设置的值

public void setCacheBlocks(boolean cacheBlocks):

为是否缓存块,默认缓存,我们分内存,缓存和磁盘,三种方式,一般数据的读取为内存->缓存->磁盘,当MR的时候为非热点数据,因此不需要缓存

因此在MR的时候最好设置如下:

scan.setCacheBlocks(false);(读,不要缓存,设置为false

scan.setCaching(200);//大了占内存,但是rpc少
scan.setBatch(6);//你需要的列

 

Hbase数据写入流程

put-->cell

0)wal( hdfs)  预写日志

1)memstore

2)storefile(hdfs)

 

Hbase的数据是按region划分的

当一个region越来越大就会划分为2个region 

region的存储信息(startkey,endkey)

Hbase的底层的执行流程(put、get、scan)

client->zookeeper->hbase-meta->user-table->put\get\scan

Hbase的数据导入(常用)

file-》Hfile-》bulk load

 

Hbase的预分区,region

region划分,依赖于rowkey,要预估一些rowkey

  hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']

10,20,30是rowkey

  hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']

  hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'

  hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }

  hbase> # Optionally pre-split the table into NUMREGIONS, using

  hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)

  hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

  hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}

  hbase> create 't1', {NAME => 'f1', DFS_REPLICATION => 1}

 

'db', {NAME => 't', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

IN_memory=>false  in_memoru队列用于保存Hbase meta表的元数据信息,因此如果将数据量很大的表设置为true的话,可能会导致meta表缓存失效,进而对整个集群的性能产生影响,所以这个值一般都是true

RegionServer的大小一般设置大一些,10G或12G以上

Hive(impala)与Hbase集成

外部表

(场景)现在已经存在了一个Hbase表,需要对表中数据进行分析。(用hiveql)

管理表

创建表的时候,指定数据存储在hbase表中

 

学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值