`

HBase摘抄内容

 
阅读更多
一、HBase的特点

高并发、稀疏型

二、HBase架构
底层是HDFS的DataNode。
HMaster集群、RegionServer。
ZK做服务器心跳检测。
HRegionServer实际上是一个进程,不实际存储数据,掌握的元数据。
包括HLOG、写数据先进入HLOG中。

一个表对应多个Region,一个Region仅对应一张表。
一个列镞对应多个Store,一个Store。合并仅合并一个列镞,多个不同的HFILE。不会针对不同列镞进行合并。
每个Store都有一个MemStore。

三、HBase写操作

1.client->发送请求到ZK集群,获取meta表所在RS,ZK集群返回meta表所在RS(1).
2.RS(1)获取meta表,返回meta表数据。
3.发送写入数据请求。数据先写入HLOG,再往MemStore内存中写入数据。写完内存数据之后
直接返回client写入成功。不会等数据真正写入HDFS。
4.meta表中存的是表的rowkey范围在具体某个regionServer上。
Hmaster挂掉,而Hbase仍然能够正常的读写。Hmaster负责数据的拆分。
5.
6.数据flush
在Hbase-default.xml中配置了数据flush的时间和大小。即数据从内存(MemStore)写入到磁盘中。

6.1 hbase.regionserver.global.memstore.size
regionServer的全局memstore大小,超过该大小会触发flush到磁盘的操作。默认是堆
大小的40%,而且regionserver级别的flush会堵塞客户端读写。

6.2 内存中的文件在自动刷新之前能够存活的最长时间。默认为1h
hbase.regionserver.optionalcacheflushinterval
即使内存大小没有达到(hbase.regionserver.global.memstore.size),当数据时间超过
此参数的时间,仍然会进行数据的flush。
且当一个regionServer中的一个memSotre达到此时间,所有的memStore都会flush。

6.3 hbase.hregion.memstore.flush.size(128M)
单个region里的memstore的缓存大小,超过参数值则整个HRegion就会flush。默认为128M。

以上的Flush会产生小数据文件问题,HBase会对小文件进行合并。
hbase.hregion.majorcompaction.
一个region进行major compaction合并的周期,在这个点的时候,这个region下的所有
hfile会进行合并,默认为7天。major compaction非常耗资源,建议生产进行关闭,
在应用空闲时间进行手工触发。

hbase.hstore.compactionThreshold 
一个store里面允许存在的hfile个数,超过这个数会被写到一个hfile里面。
也即使每个region每个列族对应的memstore flush为hfile的时候,默认情况下当超过
3个hfile的时候就会合并重写为一个新文件,设置越大可以减少触发合并的时间。
但是每次合并的时间就会越长。
当合并文件的时候,对打了删除标记的数据进行删除。
--------------------------------------------------------------------------------------
HBASE优化
一、Hmaster高可用
Hmaster负责RegionServer的生命周期,均衡RegionServer的负载。不参与读写,发送数据的切分指令,合并等。


二、预分区
每一个Region维护着startRow和endRowKey,如果加入的数据符合某个region维护的rowKey范围,
则该数据交给这个region维护,那么依据这个原则,我们可以将数据说要投放的分区提前大致规划好,
以提高HBASE性能。
不采用预分区,Hbase的自身拆分策略会导致Region之间数据不均衡,存在数据倾斜的问题。
建议针对一张表,一个RegionServer放2-3个Region比较合适。

1.手动设定预分区
CREATE 'staff1','info','partition1',SPLITS=>['1000','2000','3000','4000']
2.生成16进制序列预分区(用的比较少)
CREATE 'staff2','info','partition2',{NUMREGIONS=>15,SPLITALGO=>'HexStringSplit'}
3.按照文件中设置的规则预分区
创建splits.txt文件内容如下:
aaaa
bbbb
cccc
dddd
然后执行
CREATE 'staff3','partition3',SPLITS_FILE=>'splits.txt'
4.使用JavaAPI创建预分区
//自定义算法,产生一系列Hash散列值存储在二维数组中
byte[][] splitKeys = 某个散列值函数
//创建HBaseAdmin示例
HBaseAdmin admin = new HBaseAdmin(HBaseConfiguration.CREATE());
//创建HTableDescriptor实例
HTableDescriptor tableDesc = new HtableDescriptor(tableName);
//通过HtableDescriptor实例和散列值二维数组创建带有预分区HBase表
hAdmin.createtable(tableDesc,splitKeys);


三、RowKey设计
一条数据的唯一标识就是rowkey,那么这条数据存储哪个分区,取决于rowkey处于哪个预分区的区间内,
涉及rowkey的主要目的,就是让数据均匀的分布于所有的region中,在一定程度防止数据倾斜。
rowkey最大为64k,一般70~100个字节就可以了。
1.生成随机数、hash、散列值。
比如1001 SHA1后变成xxxxxxxx。
2.字符串反转
比如20170524000001转成10000042507102
3.字符串拼接

rowkey键设置,若采用随机数,可以分布的比较均匀,但无法获取数据,最好采用数据的value值,采用mod或者hash
函数获取其值。

rowkey的设计主要四个原则:
唯一性
长度
散列(即均匀分布)
同时查询数据时,尽量保障数据处于一个region中,若跨region,则性能较差。


电信需求:统计某个人(具体电话号)每年,每月,每天的通话记录、包括通话时长、通话次数。
rowkey
预分区键:01,02,03,04,05。
定位到月,一个客户号一个月的数据存放在一个region中。
rowkey设计:mod(hash(手机号_年月),5)_手机号_年月日_时间戳
保证相同的手机号、相同年月处于同一个region中。

四、内存基础优化
HBase操作过程中需要大量的内存开销,毕竟Table是可以缓存在内存中的,一般分配整个可用内存的70%给
HBase的Java堆。但不建议分配非常大的堆内存,因为GC过程持续太久会导致RegionServer处于长期不可用状态,
一般16~48G内存就可以了。如果因为框架占用内存过高导致内存不足,框架一样被系统服务拖死。
基础优化
1.允许在HDFS的文件中追加内容。
2.优化DataNode允许的最大文件打开数
3.优化延迟高的数据操作的等待时间
4.优化数据的写入效率
5.设置RPC监听数量
6.优化HStore文件大小
7.优化hbase客户端缓存。
8.指定scan.next扫描HBase所获取的行数。

 

分享到:
评论

相关推荐

    HbaseTemplate 操作hbase

    java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行

    pinpoint的hbase初始化脚本hbase-create.hbase

    搭建pinpoint需要的hbase初始化脚本hbase-create.hbase

    HBase开启审计日志

    HBase开启审计日志

    HBase数据库设计.doc

    1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...

    HBase(hbase-2.4.9-bin.tar.gz)

    HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...

    java大数据作业_3HBase

    3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase shell是基于哪种JVM运行的语言实现的 6. HBase shell如何写过滤条件 7. 如何删除HBase中的表 8....

    实验三:熟悉常用的HBase操作

    本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1)操作系统:Linux。 (2)Hadoop ...

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架

    hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架。 针对HBase各版本API(1.x~2.x)间的差异,在其上剥离出了一层统一的抽象。并提供了以类SQL的方式来读写HBase表中的数据。对...

    HBase学习利器:HBase实战

    HBase开发实战,HBase学习利器:HBase实战

    Hbase资源整理集合

    HBase 官方文档.pdf HBase的操作和编程.pdf HBase Cpressr优化与实验 郭磊涛.pdf null【HBase】Data Migratin frm Gri t Clu Cmputing - Natural Sienes .pdf 分布式数据库HBase快照的设计与实现.pdf 【HBase】...

    hbase-2.3.5单机一键部署工具

    注意:zookeeper3.4.13和hbase2.3.5都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/120915194 说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、...

    hbase资料api

    HBASE

    HBase海量数据存储实战视频教程

    课程内容 第一章 HBase入门 1. 简介 2. 集群搭建 3. HBase数据模型 4. 常用shell操作 5. shell管理操作 6. Hbase Java编程 7. HBase高可用 8. HBase架构 第二章 陌陌海量存储案例 1. 案例介绍 2. 打招呼消息数据集...

    hbase-shell批量命令执行脚本的方法

    批量执行hbase shell 命令 #!/bin/bash source /etc/profile ...以上这篇hbase-shell批量命令执行脚本的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。

    HBase3.0参考指南

    HBase3.0参考指南 This is the official reference guide for the HBase version it ships with. Herein you will find either the definitive documentation on an HBase topic as of its standing when the ...

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构

    Hbase基本用法简介

    Hbase shell 、Hbase api、Hbase 配置

    Hbase权威指南(HBase: The Definitive Guide)

    如果你正在寻找一种具备可伸缩性的存储解决方案来适应几乎没有穷尽的数据的话,这本书将可以向你表明apache hbase完全能够满足你的需求。作为google bigtable架构的开源实现,hbase能够支持数以十亿计的记录数和数以...

    Hbase2.2.4.rar

    Hbase2.2.4安装包,HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供...

    Hbase与zookeeper文档

    HBase即Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在普通的PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable利用...

Global site tag (gtag.js) - Google Analytics