欢迎投稿

今日深度:

hbase基础,

hbase基础,


进入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_350m', {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表中

 

学习笔记

www.htsjk.Com true http://www.htsjk.com/hbase/41558.html NewsArticle hbase基础, 进入hbase shell bin/hbase shell   Table Columnfamily Column01,column02 每条数据有唯一的标识符 Rowkey 主键 rowkey+columnfamily+column1+timestamp:value=cell 插入一条数据 put 'user','100001','info:name','zh...
相关文章
    暂无相关文章
评论暂时关闭