hbase(一) : HTable

hbase(一) : HTable,第1张

hbase13

HTable 是我们对数据读取, *** 作的入口, implements HTableInterface, RegionLocator

内部构造

有一个检查 的动作待详细查看

关于BufferedMutator, 是用来缓存客户端的 *** 作的, hbase 将客户端的DML抽象成了 Mutation , 子类有: Append, Delete, Increment, Put *** 作

put方法将Put对象包装成Mutation,交给BufferedMutator, 到达设置的大小限制,或者主动调用flush *** 作, 会触发 backgroundFlushCommits(boolean synchronous) *** 作, 然后Mutation由 AsyncProcess 提交,详细查看 BufferedMutatorImpl 类

由 AscncProcess 提交后, (注释:Action类是将行与对应 *** 作结合的类), 由connection去寻找每一行对应的region位置, 包装action, server, region等信息添加到 MutiAction 中去, 这个类持有按照region分组的actions,

然后会对每个action都创建 SingleServerRequestRunnable (rpc caller 和rpc callable, caller call callable), 交给线程池去运行

删除 *** 作很简单: 创建 RegionServerCallable , 然后rpc工厂类创建rpc caller来调用它

get和scan都是继承了Query

get很简单:首先检查,这个get是否只是检查数据存在否, 并且检查是否指定了一致性等级(默认 (ConsistencySTRONG) ), 之后创建rpc请求Request, 如果 不是强一致性ConsistencyTIMELINE , 则调用 RpcRetryingCallerWithReadReplicas , 它可以从replica上读取, 返回的数据被标记为stale(读 *** 作是通过 ConsistencyTIMELINE ,然后读RPC将会首先发送到主region服务器上,在短时间内(hbaseclientprimaryCallTimeoutget默认为10ms),如果主region没有响应RPC会被发送到从region。 之后结果会从第一个完成RPC的返回。如果响应是来自主region副本,我们就会知道数据是最新的,ResultisStale() API是检查过期数据,如果结果是 从region返回,那么ResultisStale()为true,然后用户就可以检查关于过期数据可能的原因。)

当replica_id=0的regin不可以时候, 给所有的replica region发送请求,获取第一个从这些replica返回的数据, 客户端可以 ResultisStale()检查是否是来自副本的数据

Scan 类可以设置一系列的属性, startkey,endkey, 过滤器, 版本,缓存,最大取回大小等等, 但是获取数据是由 getScanner(Scan)返回的 ResultScanner *** 作的

返回的 ResultScanner 有small, Reversed,big和纯client 的不同,

什么是small scan

见 >

用happybase进行hbase中数据的增删改查

前提:已经安装happybase库(pip install happybase),已有hbase环境并开启thrift通讯端口(nohup hbase thrift start &),thrift默认端口为9090,101030200为hbase主机ip

scan方法:

参数:

row_start、row_stop:起始和终止rowkey,查询两rowkey间的数据

row_prefix:rowkey前缀。注:使用row_prefix的时候,row_start和row_stop不能使用

filter:要使用的过滤器(hbase 092版本及以上生效)

timestamp:按指定时间戳查询

reverse:默认为False。为True时,scan结果按rowkey倒序排列

eg:

put方法:

eg:

△ 如put中的rowkey已存在,则为修改数据

delete方法:

row:删除rowkey为row的数据

columns:指定columns参数时,删除

eg:

删除rowkey为student2的name数据:

删除成功:

batch方法:

1、批量 *** 作

2、使用with管理批量

row方法及rows()方法,检索指定rowkey的数据

检索一条:

检索多条:

返回结果:

eg:

结果:

暂时就这些0v0

前面我们已经通过flink将数据介入到了hbase当中去了,那么我们接下来就可以通过hive整合hbase,将hbase当中的数据映射到hive表当中来,然后通过kylin来对hive当中的数据进行预分析,实现实时数仓的统计功能

第一步:拷贝hbase的五个jar包到hive的lib目录下

将我们HBase的五个jar包拷贝到hive的lib目录下

hbase的jar包都在/kkb/install/hbase-120-cdh5142/lib

我们需要拷贝五个jar包名字如下

hbase-client-120-cdh5142jar

hbase-hadoop2-compat-120-cdh5142jar

hbase-hadoop-compat-120-cdh5142jar

hbase-it-120-cdh5142jar

hbase-server-120-cdh5142jar

我们直接在node03执行以下命令,通过创建软连接的方式来进行jar包的依赖

ln -s /kkb/install/hbase-120-cdh5142/lib/hbase-client-120-cdh5142jar /kkb/install/hive-110-cdh5142/lib/hbase-client-120-cdh5142jar

ln -s /kkb/install/hbase-120-cdh5142/lib/hbase-hadoop2-compat-120-cdh5142jar /kkb/install/hive-110-cdh5142/lib/hbase-hadoop2-compat-120-cdh5142jar

ln -s /kkb/install/hbase-120-cdh5142/lib/hbase-hadoop-compat-120-cdh5142jar /kkb/install/hive-110-cdh5142/lib/hbase-hadoop-compat-120-cdh5142jar

ln -s /kkb/install/hbase-120-cdh5142/lib/hbase-it-120-cdh5142jar /kkb/install/hive-110-cdh5142/lib/hbase-it-120-cdh5142jar

ln -s /kkb/install/hbase-120-cdh5142/lib/hbase-server-120-cdh5142jar /kkb/install/hive-110-cdh5142/lib/hbase-server-120-cdh5142jar

第二步:修改hive的配置文件

编辑node03服务器上面的hive的配置文件hive-sitexml添加以下两行配置

cd /kkb/install/hive-110-cdh5142/conf

vim hive-sitexml

<property>

<name>hivezookeeperquorum</name>

<value>node01,node02,node03</value>

</property>

第三步:修改hive-envsh配置文件添加以下配置

cd /kkb/install/hive-110-cdh5142/conf

vim hive-envsh

export HADOOP_HOME=/kkb/install/hadoop-260-cdh5142

export HBASE_HOME=/kkb/install/hbase-120-cdh5142/

export HIVE_CONF_DIR=/kkb/install/hive-110-cdh5142/conf

第四步:创建hive表,映射hbase当中的数据

进入hive客户端,创建hive映射表,映射hbase当中的两张表数据

create database hive_hbase;

use hive_hbase;

CREATE external TABLE hive_hbasedata_goods(goodsId int ,goodsName string ,sellingPrice string ,productPic string ,productBrand string ,productfbl string ,productNum string ,productUrl string ,productFrom string ,goodsStock int , appraiseNum int)

STORED BY 'orgapachehadoophivehbaseHBaseStorageHandler' WITH SERDEPROPERTIES

("hbasecolumnsmapping" = ":key,f1:goodsName ,f1:sellingPrice ,f1:productPic ,f1:productBrand ,f1:productfbl ,f1:productNum ,f1:productUrl ,f1:productFrom ,f1:goodsStock , f1:appraiseNum")

TBLPROPERTIES("hbasetablename" ="flink:data_goods");

CREATE external TABLE hive_hbasedata_orders(orderId int,orderNo string ,userId int,goodId int ,goodsMoney decimal(11,2) ,realTotalMoney decimal(11,2) ,payFrom int ,province string ,createTime timestamp )

STORED BY 'orgapachehadoophivehbaseHBaseStorageHandler' WITH SERDEPROPERTIES

("hbasecolumnsmapping" = ":key, f1:orderNo , f1:userId , f1:goodId , f1:goodsMoney ,f1:realTotalMoney,f1:payFrom ,f1:province,f1:createTime")

TBLPROPERTIES("hbasetablename" ="flink:data_orders");

第五步:在kylin当中对我们hive的数据进行多维度分析

直接登录kylin的管理界面,对我们hive当中的数据进行多维度分析

ElasticSearch自身提供了一个River机制,用于同步数据。

这里可以找到官方目前推荐的River:

>

HBaseGetList是一个Java类,用于从HBase表中获取数据。在HBase中,数据以行的形式存储,并根据行键进行排序。HBaseGetList通过指定扫描起始行和扫描结束行之间的行键列表来获取数据。

HBaseGetList的大小设置通常是通过设置扫描缓存和扫描批次大小来实现的。 扫描缓存指的是一次从HBase中获取的行的数量,在扫描过程中,HBase会将这些行缓存起来以提高读取效率。扫描批次大小是指一次从HBase中获取的列的数量。这两个参数的设置应基于你的数据大小和硬件资源。

以下是一些常用的大小设置示例

1 设置扫描缓存大小为1000,扫描批次大小为100

Scan scan = new Scan();

scansetCaching(1000);

scansetBatch(100);

2 设置扫描缓存大小为500,扫描批次大小为50

Scan scan = new Scan();

scansetCaching(500);

scansetBatch(50);

3 设置扫描缓存大小为2000,扫描批次大小为200

Scan scan = new Scan();

scansetCaching(2000);

scansetBatch(200);

前身:BigTable

网页搜索:

google分布式存储系统BigTable依赖GFS

Hbase(bigtable的开源实现): 高可靠、高性能、面向列、可伸缩

存储结构化和半结构化的数据

优点:

水平可扩展性特别好:

依赖:

文件存储系统:HDFS

海量数据处理:MapReduce

协同管理服务:Zookeeper

满足了:大数据量的实时计算

数据类型:

    RDBMS:关系数据模型、多种数据类型

    Hbase:

数据 *** 作:

存储模式:

索引:

数据维护:

可伸缩性:

        纵向扩展:

        水平扩展:

Hbase的访问接口:

            JAVA API

            shell

            thrift Gateway

            restful Gateway

            SQL接口:pig编写类sql  hive用hivesql访问Hbase

Hbase的数据类型:

        列限定符

        每个值都是未解释的bytes

        一个行可以有一个行键和多列

        表由列族组成

Hbase数据模型:

    列族支持动态扩展、保留旧版本(HDFS只能追加数据)

基础元素:

    行键 : rowkey

    列族

    列限定符

    单元格 (时间戳概念、对应数据版本)

坐标概念:

    四维定位:行键、列族、列限定符、时间戳

稀疏表

HBASE:面向列的存储:高数据压缩率、分析便捷

RDBMS :面向行存储,事务性 *** 作(记录完整)、不便于分析(需要全表扫描)

43 HBASE 的实现原理

431 库函数 、master服务器、region服务器

Master服务器:

分区信息进行维护和管理

维护region服务器列表

确认当前工作的region服务器

负责对region进行分配和负载平衡

对表的增删改查

region服务器:

客户端不依赖于Master获取位置信息

用户数据的存储和管理

Region服务器--10-1000个region -----Store是一个列族----每个列族就是一个Hfile----所有region公用1个Hlog

写数据流程:Region服务器---写缓存Memstore---写日志(Hlog)

读数据流程:Region服务器-读缓存Memstore(最新数据)----StoreFile

缓存刷新:周期性将缓存内容刷写到Storefile 清空缓存---Hlog写入标记

每次刷写会生成新的StoreFile 每个Store包含多个StoreFile

每个Region服务器都有一个自己的Hlog,将启动检查确认缓存刷新是否有新的内容需要刷写,发现则刷写新的storefile,完成后删除Hlog,开始对外提供服务

Storefile的合并,storefile 的数量达到阈值后,会进行合并。当Storefile超过大小阈值则会触发Region的分裂

44 Hlog的工作原理

Zookeeper负责监听region服务器,由master处理故障,通过故障服务器的Hlog恢复,按region切分Hlog,将region和对应的Hlog分配到新的region服务器上

一个HBASE表会被划分成多个Region(1G-2G 取决于服务器性能)

同一个region不会被拆分到不同服务器上

Region的寻找:

Meta表:regionID 服务器ID 存储元数据

Root表:只有一个region

三级寻址:

zookeeper文件---root表-多个meta表--多个用户数据表

客户端会有Hbase三层寻址的缓存,调用访问Hbase的接口,缓存失效后,再次寻址

zookeeper决定master服务器,确保只有一个master

45 Hbase的应用方案

性能优化:

1)时间靠近存放----将时间戳引入行键,使用Longmax-时间戳进行排序

2)提升读写性能,创建表时设置HcloumnDescriptorsetMemory=true,会将表放入内存的缓存中

3)节省存储·空间----设置最大版本数、保存最新版的数据,将最大版本参数设置为1

4)timetolive参数,会将过期数据自动清空

检测Hbase性能:

Maste-status(web浏览器查询)

ganglia

OpenTSDB

Armbari

sql 查询HBASE

1)hive整合hbase

2)Phoenix

Hbase 二级索引 (辅助索引)

默认只支持对rowkey进行索引

Hbase行访问:

1)单行键访问

2)确定起点和终点访问区间数据

3)全表扫描

二级索引样例:

    Hindex    Hbase+redis  Solr+ Hbase

二级索引的机制:

        Hbase Coprocessor 

        endpoint  ---存储过程

        observer----触发器

        通过Observer监测数据插入动作,同步写入索引表,完成对表和列的索引

      Hbase 主表 索引表

46 HBASE的shell命令

三种部署模式:单机 伪分布式  分布式

HDFS

创建表

create table, F1, F2, F3

list table

每次只能为1行的1列添加数据

put  table R1,R1:C1 ,“1,2,3”

scan  table  R1,{column='R1:C1'}

get  table

删除表:

disable table +drop table

47 JAVA API +HBASE

以上就是关于hbase(一) : HTable全部的内容,包括:hbase(一) : HTable、spark1.2.1实现读取hbase的数据后怎么实现实时查询、用happybase happy地查询hbase数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9692265.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存