HBase
2020-06-09 09:45:13 0 举报
AI智能生成
登录查看完整内容
HBase知识点覆盖
作者其他创作
大纲/内容
HBase
hbase的架构
Client
Zookeeper
HRegionServer向ZK发送心跳
当HRegionServer心跳失败后,通知HMaster
节点上下线感知
存元数据
HMaster
对HRegionServer管理的region数作负载均衡
当某个HRegionServer挂掉后,HMaster会将它所管理的Region分配给其它可用的HRegionServer
HRegionServer
负责客户端的读写请求
运行过程中region变大时,对其切分
HBase上Regionserver的内存分为两个部分
Memstore,主要用来写
BlockCache,主要用于读数据
Region
集群中分布式存储的最小单元
memstore
内存缓冲区
BlockCache
存储经常访问的数据
hbase存储数据结构
rowkey
Column Family
Column
Timestamp
cell
cell中的数据是没有类型的,全部是以字节数组进行存储
HBase的存储原理
HregionServer
store
storeFile
HFile
HBase的读写数据流程
读操作
客户端发起读请求 get
1.首先从zk找到meta表的region位置,然后读取meta表中的数据,meta表中存储了用户表的region信息
2、根据要查询的namespace、表名和rowkey信息。找到写入数据对应的region信息
3、找到这个region对应的regionServer,然后客户端发送请求给RegionServer
4、查找对应的region
5、先从memstore查找数据,如果没有,再从BlockCache上读取
6、如果BlockCache中也没有找到,再到StoreFile上进行读取
7、从storeFile中读取到数据之后,不是直接把结果数据返回给客户端,而是把数据先写入到BlockCache中,目的是为了加快后续的查询;然后在返回结果给客户端
写操作
客户端发起写请求 put
4、把数据分别写到HLog(write ahead log)和memstore各一份
5、memstore达到阈值后把数据刷到磁盘,生成storeFile文件
6、删除HLog中的历史数据
Flush机制
hbase.hregion.memstore.flush.size
当memstore中的数据时间超过1小时,会flush到磁盘
hbase.regionserver.optionalcacheflushinterval
hbase.regionserver.global.memstore.size
手动flush
flush tableName
minor compaction 小合并
表示至少需要三个满足条件的store file时,minor compaction才会启动
hbase.hstore.compaction.min
表示一次minor compaction中最多选取10个store file
hbase.hstore.compaction.max
表示文件大小小于该值的store file 一定会加入到minor compaction的store file中,默认128M
hbase.hstore.compaction.min.size
hbase.hstore.compaction.max.size
major compaction 大合并
合并Store中所有的HFile为一个HFile
有删除标记的数据会被真正移除,同时超过单元格maxVersion的版本记录也会被删除
默认值为7天进行一次大合并
hbase.hregion.majorcompaction
手动触发
major_compact tableName
region 拆分机制
SteppingSplitPolicy (2.0版本默认这个)
region个数等于1 ? 切分阈值为flush size * 2 : MaxRegionFileSize
KeyPrefixRegionSplitPolicy
根据rowKey的前缀对数据进行分组,这里是指定rowKey的前多少位作为前缀
DelimitedKeyPrefixRegionSplitPolicy
保证相同前缀的数据在同一个region中
DisabledRegionSplitPolicy
表的预分区
手动指定预分区
HexStringSplit 算法
HexStringSplit会将数据从“00000000”到“FFFFFFFF”之间的数据长度按照n等分之后算出每一段的起始rowkey和结束rowkey,以此作为拆分点
region 合并
通过Merge类冷合并Region
需要先关闭hbase集群
hbase org.apache.hadoop.hbase.util.Merge 表名 region_key1 region_key2
通过online_merge热合并Region
不需要关闭hbase集群,在线进行合并
实战
打成jar包提交到集群中运行
hadoop jar hbase_java_api-1.0-SNAPSHOT.jar com.kaikeba.HBaseLoad
加载HFile文件到hbase表中
代码加载
//构建LoadIncrementalHFiles加载HFile文件 LoadIncrementalHFiles load = new LoadIncrementalHFiles(configuration); load.doBulkLoad(new Path(\"hdfs://node1:9000/output_HFile\
命令加载
1.hadoop jar hbase-server-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable
2.- 先将hbase的jar包添加到hadoop的classpath路径下 export HBASE_HOME=/opt/bigdata/hbase export HADOOP_HOME=/opt/bigdata/hadoop export HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`
3.hadoop jar /opt/bigdata/hbase/lib/hbase-server-1.2.1.jar completebulkload /output_HFile t5
hbase集成hive
创建基于hbase的hive表
将hive表映射到hbase表中
rowkey设计
长度原则
建议越短越好,不要超过16个字节。设计过长会降低memstore内存的利用率和HFile存储数据的效率
owkey散列原则
rowkey唯一原则
hbase表的热点的解决方案
预分区
加盐:在rowkey的前面增加随机数
哈希
反转,牺牲了rowkey的有序性
hbase的数据备份
基于hbase提供的类对hbase中某张表进行备份
全量备份
HBase数据导出到HDFShbase org.apache.hadoop.hbase.mapreduce.Export test /hbase_data/test_bak
HBase数据导出到本地文件hbase org.apache.hadoop.hbase.mapreduce.Export test file:///home/hadoop/test_bak
将本地文件上的数据导入到备份目标表中hbase org.apache.hadoop.hbase.mapreduce.Driver import test_bak file:///home/hadoop/test_bak/*
将hdfs上的数据导入到备份目标表中hbase org.apache.hadoop.hbase.mapreduce.Driver import test_bak /hbase_data/test_bak/*
增量备份
hbase org.apache.hadoop.hbase.mapreduce.Export test /hbase_data/test_bak_increment 开始时间戳 结束时间戳
基于snapshot的方式实现对hbase中某张表进行备份
hbase的二级索引
本质就是建立hbase表中列与行键之间的映射关系
确保query查询使用Index
创建 convered index
create index USER_COOKIE_ID_AGE_INDEX on USER (\"f\".\"cookie_id\") include(\"f\".\"age\");
在查询中提示其使用index
使用本地索引 (创建Local Indexing 索引)
索引性能调优
1. index.builder.threads.max 创建索引时,使用的最大线程数。 默认值: 10。
2. index.builder.threads.keepalivetime 创建索引的创建线程池中线程的存活时间,单位:秒。 默认值: 60
3. index.writer.threads.max 写索引表数据的写线程池的最大线程数。 更新索引表可以用的最大线程数,也就是同时可以更新多少张索引表,数量最好和索引表的数量一致。 默认值: 10
4. index.writer.threads.keepalivetime 索引写线程池中,线程的存活时间,单位:秒。默认值:60
6. hbase.htable.threads.keepalivetime 索引表线程池中线程的存活时间,单位:秒。 默认值: 60
7. index.tablefactory.cache.size 允许缓存的索引表的数量。 增加此值,可以在写索引表时不用每次都去重复的创建htable,这个值越大,内存消耗越多。 默认值: 10
8. org.apache.phoenix.regionserver.index.handler.count 处理全局索引写请求时,可以使用的线程数。 默认值: 30
phoenix
squirrel GUI工具连接
0 条评论
回复 删除
下一页