必应网站首页的图片怎么做的,网站添加锚点,多功能wordpress图片主题,济南建站公司效果1. hbase的读数据流程
在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息
HFILE 存储在hdfs中的hbase文件#xff0c;这个文件中会存在hbase中的数据以kv类型显示#xff0c;同时还会存在hbase的元数据信息#xff0c;包括整个hfile文件的索引大小…1. hbase的读数据流程
在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息
HFILE 存储在hdfs中的hbase文件这个文件中会存在hbase中的数据以kv类型显示同时还会存在hbase的元数据信息包括整个hfile文件的索引大小描述k和v的均匀长度文件中包含的开始的key和结束的key以及中位数key等信息便于检索以及布隆过滤器等信息这个数据在我们hbase进行查询读取的时候按照64KB为一个大小进行读取内容数据其中读取的元数据会全部加载但是kv类型的真正存储数据会按照64KB为最小单位读取进来。 # flush表的数据清空memstore
flush table
# 查看命令为
hbase hfile -m -b -p -f hfile的文件路径
-m 打印元数据信息
-b 打印块信息
-p 打印数据内容
-f 后面接文件
例子hfile的文件路径 查看某一列的数据信息 布隆过滤器 一个使用hash表作为计算规则的过滤器也就是在写入数据到hbase的时候要先将数据写出到memstore中在memstore写满了以后就会将数据以storeFile形式写出到磁盘上这个时候也会生成一份对应数据的hash表文件以metablock的形式存储到起来它的功能非常实用比如我们在查询数据的时候就可以首先将这个数据进行hash处理然后和hash表进行比对如果不存在可以直接避免扫描这个storeFile文件。在巨大的数据面前可以进行高效的数据。 一句话查询数据的时候将对其进行哈希处理然后与哈希地图进行比对如果哈希表取到的值为空说明storeFile没有该要查询的数据如果哈希表找到的值不为空也不一定存在要查询的数据。 blockCache 对应表数据的regionserver级别的缓存组件主要使用规则就是在查询数据的时候也会将查询结果缓存到regionserver对应的blockCache组件中下次查询的时候可以直接使用上次查询的结果blockCache中存储的数据内存包含索引文件布隆过滤器的值和数据的key其他的value数据会以64Kb为大小进行存储如果数据过期了先清理value的数据而索引等数据和元数据信息不会清理出去。 blockCache是regionserver级别的缓存组件我的hbase集群只有两个工作节点即存在两个regionserver每个regionserver都存在一个blockCache所以我desc info表会出现两条记录。 所以hbase的读写数据流程为: 读取数据流程
首先读取zookeeper中的元数据meta表的信息其次根据meta表的信息找寻相应的region获取元数据信息然后将meta表的元数据信息放入到自己的客户端缓存中根据meta表的信息找寻student表对应的region所在的regionserver然后根据查询的内容先去memstore文件中找寻数据如果没有再去blockcache缓存中找寻数据但是并不是直接将数据返回而是通过key和索引文件去storeFile中查询比对不然会出现数据过期问题都没有再从storeFile和hfile中找寻数据这个过程会使用到布隆过滤器然后在将数据存储到blockcache中然后在返回给客户端
2. hbase读取数据
在hainiu命名空间创建student表
hbase:007:0 put hainiu:student,001,cf1:name,1
Took 0.0828 seconds
hbase:008:0 put hainiu:student,002,cf1:name,2
Took 0.0173 seconds
hbase:009:0 put hainiu:student,001,cf1:age,10
Took 0.0267 seconds
hbase:010:0 put hainiu:student,002,cf1:age,20
Took 2.0660 seconds
hbase:011:0 scan hainiu:student
ROW COLUMNCELL 001 columncf1:age, timestamp2024-11-11T19:15:07.044, value10 001 columncf1:name, timestamp2024-11-11T19:14:40.544, value1 002 columncf1:age, timestamp2024-11-11T19:15:18.621, value20 002 columncf1:name, timestamp2024-11-11T19:14:54.939, value2
2 row(s)
Took 0.1542 seconds
hbase:012:0 put hainiu:student,001,cf2:adress,beijin
Took 0.0695 seconds
hbase:013:0 put hainiu:student,002,cf2:adress,beijin
Took 0.0147 seconds
hbase:014:0 scan hainiu:student
ROW COLUMNCELL 001 columncf1:age, timestamp2024-11-11T19:15:07.044, value10 001 columncf1:name, timestamp2024-11-11T19:14:40.544, value1 001 columncf2:adress, timestamp2024-11-11T19:15:52.033, valuebeijin 002 columncf1:age, timestamp2024-11-11T19:15:18.621, value20 002 columncf1:name, timestamp2024-11-11T19:14:54.939, value2 002 columncf2:adress, timestamp2024-11-11T19:16:03.664, valuebeijin
2 row(s)
Took 0.0241 seconds
# get 获取一个内容按照rowkey查询数据
get hainiu:student,001
# get 获取对应列族的数据
get hainiu:student,001,cf1
# get 获取对应列的信息
get hainiu:student,001,cf1:name
hbase:017:0 get hainiu:student,001
COLUMN CELL cf1:age timestamp2024-11-11T19:15:07.044, value10 cf1:name timestamp2024-11-11T19:14:40.544, value1 cf2:adress timestamp2024-11-11T19:15:52.033, valuebeijin
1 row(s)hbase:019:0 get hainiu:student,001,cf1
COLUMN CELL cf1:age timestamp2024-11-11T19:15:07.044, value10 cf1:name timestamp2024-11-11T19:14:40.544, value1
1 row(s)
Took 0.0321 seconds
hbase:020:0 get hainiu:student,001,cf1:name
COLUMN CELL cf1:name timestamp2024-11-11T19:14:40.544, value1
1 row(s)
Took 0.0231 seconds
# scan扫描表的数据
scan table
# 扫描limit
scan hainiu:student, {LIMIT 2}
# 扫描指定的列族
scan hainiu:student,{COLUMNScf1}
# 扫描指定的列
scan hainiu:student,{COLUMNScf1:age}
hbase:022:0 scan hainiu:student,{COLUMNcf1}
ROW COLUMNCELL 001 columncf1:age, timestamp2024-11-11T19:15:07.044, value10 001 columncf1:name, timestamp2024-11-11T19:14:40.544, value1 002 columncf1:age, timestamp2024-11-11T19:15:18.621, value20 002 columncf1:name, timestamp2024-11-11T19:14:54.939, value2
2 row(s)
Took 0.0588 seconds
hbase:023:0 scan hainiu:student,{COLUMNcf1:age}
ROW COLUMNCELL 001 columncf1:age, timestamp2024-11-11T19:15:07.044, value10 002 columncf1:age, timestamp2024-11-11T19:15:18.621, value20
2 row(s)# 过滤器查询
scan hainiu:student, FILTERValueFilter(,binary:20)
# 指定列等值查询
scan hainiu:student,{COLUMNScf1:age,FILTERValueFilter(!,binary:20)}
# 范围查询
scan hainiu:student, { STARTROW 001, STOPROW 003}
# 分页查询
scan hainiu:student, {COLUMNS cf1, LIMIT 2, STARTROW 001}
# 范围查询指定相应的列信息
scan hainiu:student, { STARTROW 001, STOPROW 002, COLUMN cf1:name} 在范围查询中从rowKey的[STARTROW, STOPROW)为范围查询左闭右开区间包含STARTROW但不包含STOPROW。
行数查询
# 查询表的行数
# 语法count table, {INTERVAL intervalNum, CACHE cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey默认1000
# CACHE每次去取的缓存区大小默认是10调整该参数可提高查询速度
count hainiu:student
# 直接查询完毕返回值
count hainiu:student, {INTERVAL 2,CACHE50}
# 间隔两秒返回一次结果值
每间隔50秒一次性取50行ky。 大表统计
# 大表统计的时候不能使用hbase自带的count命令这样hbase压力太大
# 我们可以通过外置的mr进行计算统计大小
hbase org.apache.hadoop.hbase.mapreduce.RowCounter tablename
多版本查询
#修改设置版本查询时加上版本就可以查出来版本
alter hainiu:student,{ NAME cf1, VERSIONS 2 }put hainiu:student,id10, cf1:name,name10a
put hainiu:student,id10, cf1:name,name10aa
put hainiu:student,id10, cf1:name,name10aaa#此时可以查询出2个版本的数据
get hainiu:student, id10, { COLUMN cf1:name, VERSIONS 2}