知无不言 代立冬:大家都在关注hbase到底是怎样的? -欧洲杯足彩官网

【编者按】hbase作为hadoop家族的重要一员,其不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是,它基于列的而不是基于行的模式。

为了帮助大家更加系统全面地学习hbase知识,我们csdn知识库特邀请了知名的社区专家代立冬老师,绘制了hbase知识图谱,根据知识点挑选优质内容呈现给大家

引用
代立冬,csdn知识库特邀编辑,csdn社区专家。信柏信息科技有限公司架构师,专注于数据平台的规划、集群调优、数据安全、数据仓库构建以及线上trouble shooting,个人博客

hbase知识库即将发布,抢先占座地址



代立冬

csdn知识库:你是如何与计算机结缘,踏上软件开发之路的,能否跟我们分享一下。

代立冬:我走上计算机这条路主要源于大学室友熏陶,我本身是学数学专业的,按常理毕业后应该当个教师。而我们宿舍6个室友有一半学数学,一半学计算机。经常看室友们写点小程序,觉得挺厉害,有时还听他们吹牛皮:他们班一同学写了个校园论坛云云,长期耳濡目染后,自然走上了这条道。有一段时间还常跑去听他们老师讲专业课。后来在网上找到一些商城的开源代码,有空就折腾折腾,不时添加点需求实现下,当然当时的主流还是做网站开发,ssh框架大行其道,不像现在择业方向这样广。

csdn知识库:hbase作为nosql数据库,与其他nosql产品有哪些区别和优势?

代立冬:这里拿nosql主要的两个代表作品做下对比(hbase和mongodb),两者主要的区别:
  • mongodb是文档型数据库,整个数据都存在磁盘中,hbase是列式数据库,存储时按column family保存到对应的hdfs文件中;
  • mongodb支持二级索引,而hbase本身不支持二级索引;
  • mongodb的update是update-in-place,也就是原地更新,而hbase的修改和添加都使用put,实际上hbase内部对已经存在的rowkey数据,只是将这一数据用不同的版本号保存下来而已,hbase默认的保存版本的数量是3;
  • hbase根据文件的大小来控制region的分裂,在hbase内部,存储时,数据按照row key的字典序(byte order)排序存储;mongodb根据负载来决定shards的分裂;
  • mongodb和hbase都支持mapreduce,不过mongodb的mapreduce支持不够强大,调试也较麻烦;
  • mongodb的读效率比写高,hbase默认适合写多读少的情况。

以我们的线上使用情况,对rowkey分布均匀的情况,hbase集群的写速度单台regionserver达到3~4w/秒,单key查询一般10ms内返回(如果使用ssd硬盘会更快)。由于我们线上每天写入70多亿条数据,当时mongodb还没有收购wiredtiger,当时mongodb的写入锁是个很大问题,所以我们技术选型就选的hbase。

csdn知识库:如何提升hbase的读写性能?

代立冬:首先我们需要知道影响读写性能有什么因素:

写速度关键因素
  • table region分布均衡;
  • 单台region server的region数;
  • hbase.regionserver.handler.count;
  • hbase.regionserver.global.memstore.upperlimit;
  • hbase.hregion.memstore.block.multiplier;
  • hbase.hstore.blockingstorefiles;
  • hbase.hregion.max.filesize;

读速度关键因素
  • 单台region server上的region数;
  • storefile数;
  • bloomfilter;
  • in-memory flag;
  • blockcache设置;
  • hfile.block.cache.size;

然后具体性能优化可分为服务端和客户端,服务端和客户端我列几个代表性的(详细请参见)

服务端:
  • hbase.hregion.max.filesize:默认是10g,如果任何一个column familiy里的storefile超过这个值, 那么这个region会一分为二,因为region分裂会有短暂的region下线时间(通常在5s以内),建议手动定时分裂,可以设置为60g;
  • hbase.hregion.majorcompaction:hbase的region主合并的间隔时间,默认为1天,建议设置为0,禁止自动的major主合并,major合并会把一个store下所有的storefile重写为一个storefile文件,还会把有删除标识的数据删除,业务低峰期major合并;
  • hbase.hregion.memstore.flush.size:默认值128m,单位字节,一旦有memstore超过该值将被flush,如果regionserver的jvm内存比较充足(16g以上),可以调整为256m;
  • hbase.hstore.compaction.max:默认值为10,一次最多合并多少个storefile,避免oom;
  • hbase.hstore.blockingstorefiles:默认为7,如果任何一个store(非.meta.表里的store)的storefile的文件数大于该值,则在flush memstore前先进行split或者compact,同时把该region添加到flushqueue,延时刷新,这期间会阻塞写操作直到compact完成或者超过hbase.hstore.blockingwaittime(默认90s)配置的时间,可以设置为30,避免memstore不及时flush。

客户端
  • hbase.client.write.buffer:默认为2m,写缓存大小,推荐设置为5m,单位是字节,当然越大占用的内存越多,此外测试过设为10m下的入库性能,反而没有5m好;
  • hbase.client.pause:默认是1000(1s),如果你希望低延时的读或者写,建议设为200,这个值通常用于失败重试,region寻找等;
  • hbase.client.retries.number:默认值是10,客户端最多重试次数,可以设为11,结合上面的参数,共重试时间71s;
  • hbase.ipc.client.tcpnodelay:默认是false,建议设为true,关闭消息缓冲;
  • hbase.client.scanner.caching:scan缓存,默认为1,避免占用过多的client和rs的内存,一般1000以内合理,如果一条数据太大,则应该设置一个较小的值,通常是设置业务需求的一次查询的数据条数,如果是扫描数据对下次查询没有帮助,则可以设置scan的setcacheblocks为false,避免使用缓存;
  • 限定扫描范围:指定列簇或者指定要查询的列,指定startrow和endrow。通过java多线程入库和查询,并控制超时时间。

csdn知识库:hbase的rowkey设计需要注意哪些情况,有哪些好的设计方案?

代立冬:整体上说rowkey设计尽量分布均匀,避免热点。常见的均匀rowkey设计可考虑逆序,加盐值打散,如果是递增数字,还可考虑使用long.maxvalue减去当前值。

rowkey的特点:

  • 三维有序rowkey(行主键,按ascii排序)
  • columnkey(columnfamily qualifier)
  • timestamp(时间戳)

举个简单例子,比如手机号分为13,15,17,18等号段,但是13开头的手机号码特别的多,这时就可以考虑逆序下是否能满足需求。rowkey的设计应具体场景具体对待。如果怎么设计,都避免不了会产生热点的问题,也不用太担心,下面这个问题是针对热点的一些处理办法。

csdn知识库:hbase发生数据热点问题时,应该从哪些角度分析问题?

代立冬:热点问题通常是某些region读取或写入压力过大,热点可以通过设置监控阀值来发现。
在监控检测到热点region时,可以手动(自动)进行热点region split,如果发现某台region server上不少region是热点,可以考虑,move region到其它空闲的region server上,注意监控region server服务器的硬件,比如cpu、memory、io、network等指标。如果需要删除大量数据,尽量考虑设置ttl数据自动过期删除。而后可以返回来去考虑主键的设计,是否采用压缩等。

csdn知识库:如何基于hbase实现二级索引,开源方案中常用的有哪些,以及性能如何?

代立冬:这个我没有实际使用过,一些开源的二级索引通过使用协处理器去做的,但协处理器运行在region server本身的内存中,对于大型集群,不建议使用。有些替代的办法比如可以考虑结合elasticsearch使用

csdn知识库:从哪些方面可以判断hbase集群是否健康?

代立冬:对于1个需要7*24小时在线服务的集群来说,这个通常需要有一套监控报警系统去监控hbase集群的运行状况,我们当时调研过世面上很多开源的监控,都不大满意。最后参照sematext公司的产品实现了1套自己的hbase(含hdfs)监控报警体系。

对于hbase健康,我主要关注以下指标:
  • zookeeper的状态、连接数(一般一台zookeeper节点上连接数不会超过200)、发送和接收数据量
  • region热点,region storefile个数和size,region split失败次数情况(吃过大亏)
  • region memstore大小、flush队列大小、flush耗时及大小情况。
  • block cache命中率及cache大小
  • region server的合并/分裂队列数,我们是每天在业务低峰时定时合并/分裂region的,所以这个值大部分时间都是0
  • region server上rpc连接数,jvm内存gc情况,经jvm参数优化,对64g的jvm内存还没有出现过full gc的情况

当然还有一些指标,不一一列举了。

csdn知识库:介绍一些hbase的典型应用场景?

代立冬:个人总结的一些场景,欢迎补充:
  • 存储大量数据(tb级以上),需要很高的写吞吐能力,在大规模数据集中随机访问(基于rowkey),需要水平扩展能力,易维护;
  • 不适合对事务要求高、多维度查询的场景。

csdn知识库:对hbase初学者有没有什么好的建议?

代立冬:建议理论->实践->理论理论这样的路线,hbase的用法跟关系型数据库的用法不大一样,从关系型转过来的同学需要稍转变下思路,现在网上的关于hbase资料很多,多看,多练,对于测试集群来说,尝试把服务搞瘫痪,再尝试修复。还可以关注官方的issue列表,国内还可以加几个群,多问问群里的热心人

csdn知识库:你最近在研究哪些技术?谈谈自己的感受。

代立冬:现在数据平台整体稳定,我个人抽时间学了些深度学习方面的技术,主要是cnn、rnn。对我冲击最大的是深度学习效果在某些场景(比如分类)为何如此好,当然也有我头疼的地方,就是它现在还需要有大量的标注数据然后效果才能上去。很多传统的机器学习做法,比如复杂的验证码识别等用深度学习实现,效果很好。

csdn知识库:关于技术学习您有什么心得?我们上线了知识库系统化学习的方法,您会怎么应用呢?

代立冬:大数据时代随着很多新兴概念逐渐流行,相应的技术也会有很多,我觉得还是脚踏实地,尽量在工作中运用上所学技术,实践中积累,总结,同时多分享自己的所学知识给伙伴们,在给别人帮助同时受益可能最大的还是自己。现在在搜一些问题解决方法时,也经常能看到csdn的身影,对csdn付出如此大的力气去做这个知识体系建设,实属难得。我刚好在学习深度学习,现在知识库里面列出了深度学习体系的知识点,并且每个知识点有不少精选的文章,我会着重找下相关的最新的业界进展,顺便看下有没有相关开放的数据集,另外我也会搜集整理成自己的知识体系。

推荐阅读:
  • 大小: 19.4 kb
1
0
评论 共 1 条 请登录后发表评论
1 楼 2018-01-31 10:46

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 什么是热点? ...

  • 大数据从入门到实战 - hbase 开发:使用java操作hbase 一、关于此次实践 1、实战简介 2、全部任务 二、实践详解 1、第1关:创建表 2、第2关:添加数据 3、第3关:获取数据 4、第4关:删除表 叮嘟!这里是小啊呜的...

  • 第一关 packagestep1;...importorg.apache.hadoop.hbase.hbaseconfiguration; importorg.apache.hadoop.hbase.hcolumndescriptor; importorg.apache.hadoop.hbase.htabledescriptor; import...

  • 一、初识hbase hbase 是一个面向列式存储的分布式数据库,其设计思想来源于 google 的 bigtable 论文。hbase 底层存储基于 hdfs 实现,集群的管理基于 ...hbase 的扩展性主要体现在两个方面,一个是基于运算能力(regio

  • 一、实验目的 熟悉hbase数据库操作常用的java api 二、实验平台 操作系统:centos 8 hadoop版本:3.2.3 hbase版本:2.4.12 jdk版本:1.8 java ide:eclipse 三、实验过程 1. 创建表

  • 前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和...在需要实时读写随机访问超大规模数据集时,可以使用 hbase。 hbase的特点 海量存储——可以存储大批量的数据 列

  • 如何使用java连接hbase数据库连接需要两个类:hbaseconfiguration要连接我们首先需要创建对象,这个对象我们需要通过(配置)对象来进行创建,看名字我们就能猜到它的用途:读取指定路径下和的配置信息。具体用法: ...

  • 在hbase shell中创建表: 前几天还可以,今天想重温一下突然就不行了 查了很多都是说list不行的,而我遇到的问题时list可以创建表不行 看了很多发现很多是说zookeeper的问题,清除hbase缓存,我哭了,因为我就没有装...

  • hbase 开发:使用java操作hbase 第2关:添加数据

  • 今天在cdh装hbase时,本来以为几分钟就完事了,结果,,,装完后,hmaster启动不起来,看日志报如下错误: error org.apache.hadoop.hbase.master.hmaster: failed to become active master org.apache.hadoop....

  • hbase 开发:使用java操作hbase 第3关:获取数据

  • 文章目录项目场景:问题描述:原因分析:欧洲杯足彩官网的解决方案: 项目场景: ubuntu20.04 hadoop3.2.2 ...在启动 hbase shell 后,使用 create, list 等命令时,出现如下报错: hbase(main):001:0> list table

  • 简而言之,hbasewriter 通过 hbase 的 java 客户端,通过 htable,put等 api,将从上游reader读取的数据写入hbase你hbase11xwriter与hbase094xwriter的主要不同在于api的调用不同,hbase1.1.x废弃了很多hbase0.94.x...

  • 在使用 hbase 命令时,出现以下: error: org.apache.hadoop.hbase.pleaseholdexception: master is initializing 原因分析: 出现该问题大概有三个原因: 一、各集群服务器时间不同步 二、hbase-site.xml 文件 ...

  • 昨天打开hbase创建表给我报了error: org.apache.hadoop.hbase.pleaseholdexception: master is initialzing 查了很多有说时间不同步的,也修改 hdfs-site.xml文件的最后都没有解决,最后是找到了zookeeper删除了...

  • 与2018年夏季天气同样火爆的就属大数据了,作为一个可以敢和太阳肩并肩的新事物,大数据火爆、受人关注,在各个领域都有实际的应用。如今,无论是企业、商家还是个人对于大数据的关注都丝毫没有降低,那么对于大数据...

  • 出现这样的问题原因:因为重新安装hbase时,旧的元数据信息没有删除,使用zookeeper删除后hbase元数据后重启hbase即可。 在master主机上,进入zookeeper的bin目录,运行: zkcli.sh -server localhost:2181 则看到: ...

  • hbase关键名称: ...如果配置了hbase的环境变量了,就可以知己在命令行中输入hbase shell 命令进入命令行。 hbase shell help命令 可以通过 help '命名名称'来查看命令行的具体使用 查询服务器状态st...

  • hbase 开发:使用java操作hbase 第4关:删除表

  • 重新安装hbase后,在hbase shell中查看所有命名空间时,出现了error:org.apache.hadoop.hbase.pleaseholdexception: master is initializing错误。

global site tag (gtag.js) - google analytics
网站地图