spark使用hbase报ArithmeticException

回复

有问必答希孟 发起了问题 • 1 人关注 • 0 个回复 • 87 次浏览 • 2018-07-04 16:59 • 来自相关话题

Hbase优化之预分区

文章分享Aaron 发表了文章 • 0 个评论 • 156 次浏览 • 2018-07-03 12:32 • 来自相关话题

    如果在hbase shell中使用create建表时只写了表名和列族名,那么这张表将只有一个region ,当一个region的大小超过阈值时会自动split成两个,但split操作会带来资源消耗。region个数太少时,在数据量大、访问量大,或被批处理程序读写情况下性能可能会很差,并且伴随大批量读写而来的GC可能会使regionserver宕机,接着region被transit到其他节点上,将逐步拖垮Hbase集群上的所有节点。

    所以推荐在建表时进行预分区,充分考虑rowkey的分布做出合理的预分区方案。要考虑的点包括region的个数、region的大小等。
 
region的个数

    如果使用MapReduce读取Hbase表数据,Map的个数等于该表region的个数,每个region都会有一个单独进程来处理,这个进程会逐条处理region中的每一行数据。举例来说如果只有一个region,那么读取数据的就只有一个进程;如果拆成10个数据均匀分布的region,那么10个map会带来10倍的效率提升。

    大数据量情况下越发需要并行处理,因此我们往往希望源表的region的个数多一些。但是同时也要考虑集群的承载能力,Hbase的region个数上限可以参考官网给出的如下公式,其中RS Xmx是regionserver的内存堆栈大小,官网建议每台20~24或更小,因为过大的内存会导致GC时间过长(GC方式从CMS改为G1后可以增大该值,机器内存足够的情况下可以翻倍甚至更大)。

((RS Xmx) *hbase.regionserver.global.memstore.size) / (hbase.hregion.memstore.flush.size *(# column families))。

    即24G*0.45/128M=86.4个,在实际使用中很容易超过这个值。另外官网建议每个RS 20~200个regions是比较合理的。因此region个数也不是越多越好,还要考虑集群情况。我们可以在Hbase WebUI上看到这个值。







    对于不需要用MR批量读Hbase表,相比需要MR读的表region个数可以少一些,以此来控制regionserver上region总数。
 
region的大小

    单个region最大大小官方推荐5~10GB,这是三备份前的数据大小,通过hbase.hregion.max.filesize配置,当超过这个值后region会split,估计好数据量并合理的划分region会减少不必要的性能损失。甚至设置足够大的值,日常监控中发现过大后手工做split。
 
预分区的方法

    预建region可以在shell中或者程序中实现,网上很多文章,如下是一些例子,不再赘述。要想清楚rowkey的边界,比如对于全部都是数字开头的rowkey,分200个region,边界就是000,005,010……995。

hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']  

hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt'

hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} private void createTable() { HBaseAdmin admin = null; String tableName="NewTable"; String columnFamilyName="cf"; try { Configuration conf = HBaseConfiguration.create(); admin = new HBaseAdmin(conf); TableName tableNameV = TableName.valueOf(tableName); if (admin.tableExists(tableNameV)) { System.out.println("Table " + tableName + " already exist."); return; } HTableDescriptor tableDesc = new HTableDescriptor(tableNameV); HColumnDescriptor columnDesc = new HColumnDescriptor(columnFamilyName); tableDesc.addFamily(columnDesc); admin.createTable(tableDesc, splits()); System.out.println("Created table : " + tableName + " successfully."); } catch (Exception e) { System.out.println("Failed create table " + tableName+ e.toString()); } } private static byte splits() {}
  查看全部
    如果在hbase shell中使用create建表时只写了表名和列族名,那么这张表将只有一个region ,当一个region的大小超过阈值时会自动split成两个,但split操作会带来资源消耗。region个数太少时,在数据量大、访问量大,或被批处理程序读写情况下性能可能会很差,并且伴随大批量读写而来的GC可能会使regionserver宕机,接着region被transit到其他节点上,将逐步拖垮Hbase集群上的所有节点。

    所以推荐在建表时进行预分区,充分考虑rowkey的分布做出合理的预分区方案。要考虑的点包括region的个数、region的大小等。
 
  • region的个数


    如果使用MapReduce读取Hbase表数据,Map的个数等于该表region的个数,每个region都会有一个单独进程来处理,这个进程会逐条处理region中的每一行数据。举例来说如果只有一个region,那么读取数据的就只有一个进程;如果拆成10个数据均匀分布的region,那么10个map会带来10倍的效率提升。

    大数据量情况下越发需要并行处理,因此我们往往希望源表的region的个数多一些。但是同时也要考虑集群的承载能力,Hbase的region个数上限可以参考官网给出的如下公式,其中RS Xmx是regionserver的内存堆栈大小,官网建议每台20~24或更小,因为过大的内存会导致GC时间过长(GC方式从CMS改为G1后可以增大该值,机器内存足够的情况下可以翻倍甚至更大)。

((RS Xmx) *hbase.regionserver.global.memstore.size) / (hbase.hregion.memstore.flush.size *(# column families))。

    即24G*0.45/128M=86.4个,在实际使用中很容易超过这个值。另外官网建议每个RS 20~200个regions是比较合理的。因此region个数也不是越多越好,还要考虑集群情况。我们可以在Hbase WebUI上看到这个值。


20180626092151769.png


    对于不需要用MR批量读Hbase表,相比需要MR读的表region个数可以少一些,以此来控制regionserver上region总数。
 
  • region的大小


    单个region最大大小官方推荐5~10GB,这是三备份前的数据大小,通过hbase.hregion.max.filesize配置,当超过这个值后region会split,估计好数据量并合理的划分region会减少不必要的性能损失。甚至设置足够大的值,日常监控中发现过大后手工做split。
 
  • 预分区的方法


    预建region可以在shell中或者程序中实现,网上很多文章,如下是一些例子,不再赘述。要想清楚rowkey的边界,比如对于全部都是数字开头的rowkey,分200个region,边界就是000,005,010……995。

hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']  

hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt'

hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} private void createTable() { HBaseAdmin admin = null; String tableName="NewTable"; String columnFamilyName="cf"; try { Configuration conf = HBaseConfiguration.create(); admin = new HBaseAdmin(conf); TableName tableNameV = TableName.valueOf(tableName); if (admin.tableExists(tableNameV)) { System.out.println("Table " + tableName + " already exist."); return; } HTableDescriptor tableDesc = new HTableDescriptor(tableNameV); HColumnDescriptor columnDesc = new HColumnDescriptor(columnFamilyName); tableDesc.addFamily(columnDesc); admin.createTable(tableDesc, splits()); System.out.println("Created table : " + tableName + " successfully."); } catch (Exception e) { System.out.println("Failed create table " + tableName+ e.toString()); } } private static byte splits() {}
 

【融360招聘】大数据架构师

回复

招聘应聘xiangqiao 发起了问题 • 1 人关注 • 0 个回复 • 150 次浏览 • 2018-06-29 16:28 • 来自相关话题

存入hbase的数据存在具有唯一标识的字段,在新增修改的时候如果判断是否重复

有问必答zhangcheng 回复了问题 • 2 人关注 • 3 个回复 • 114 次浏览 • 2018-06-28 10:11 • 来自相关话题

java api访问hbase,报错EOFException,jps查看是regionserver挂了,怎么解决。。。。。。

回复

招聘应聘陈阳 回复了问题 • 1 人关注 • 1 个回复 • 112 次浏览 • 2018-06-26 17:31 • 来自相关话题

Hbase自定义Filter

回复

有问必答billy 发起了问题 • 1 人关注 • 0 个回复 • 123 次浏览 • 2018-06-26 10:40 • 来自相关话题

Hbase表有两个region大合并结束不了

回复

有问必答Leo 发起了问题 • 2 人关注 • 0 个回复 • 150 次浏览 • 2018-06-19 14:20 • 来自相关话题

HBaseConWest2018演讲 - HBase Practice In XiaoMi

文章分享openinx 发表了文章 • 0 个评论 • 199 次浏览 • 2018-06-19 09:33 • 来自相关话题

HBaseConWest2018 于6.18日在美国加州圣何塞举办,本次会议由Hortonworks承办。每年去美国硅谷参加HBaseConWest已经算是小米HBase团队的惯例了,一方面小米团队在HBase社区的影响力有目共睹,目前已经培养了7位HBase Committer,其中有2位HBase PMC;另外一方面,小米内部也很乐意对外去分享公司一年所做的工作,相当于把一年的工作(包括内部的实践以及社区贡献)做一个年度总结分享给大家。 
 
所以,2018年我们也很积极的提交了演讲议题(HBase Practice In XiaoMi),并花了很多精力整理总结,内部还做过3次英文试讲。但遗憾的是,今年中美关系比较紧张,美国签证没有如期办下来。按照组内历年的经验,一般提前一个月左右办理签证,能很顺利办下来。今年我们在5.14日去大使馆面试申请签证,被要求填写补充材料,在5.16拿到承办方的visa letter并提交补充材料之后,一直到现在签证尚未发放。本想没办法去现场的话,就只能把我们这个议题提交到8.17日的HBaseConAsia去讲。写邮件跟组委会沟通,组委会之前把我们talk的优先级放的比较高,也比较喜欢我们演讲内容,所以后面就想让我们做一个远程分享。为了以防万一设备异常之类的,就先让我们准备一个视频,有任何异常的话,直接放视频也不慌。于是,我们就录了一个,发现视频效果还行(主要是可以做剪辑,哈哈),就跟组委会说,现场干脆直接用视频好了,有任何疑问的话,远程答疑就好。 
 
于是,最后在HBaseConWest2018上看到的就是以下PPT和视频了。演讲内容主要分两部分,第一部分小米内部实践,由我的同事田竞云来分享,第二部分复制功能改进,由我来分享。 
 
1. PPT 
2. 视频地址 
 
总体来说,没有机会去HBaseConWest2018现场分享这个事情,个人还是挺遗憾的。之前Hortonworks的Ted Yu和Pinterest的TianYing获知我们要去美国分享,都很积极的约了我们聚会,最后也只能取消。原定的去美国一些其他行程,也只得取消。有一点值得欣慰的是,在组委会和我们的共同努力下,总算是有机会把小米过去一年做的一些工作整理并呈现给大家,包括美国HBase社区的朋友们。感谢组委会和社区,也感谢铎神和小豪在试讲中提出的很多宝贵建议。
  查看全部

HBaseConWest2018 于6.18日在美国加州圣何塞举办,本次会议由Hortonworks承办。每年去美国硅谷参加HBaseConWest已经算是小米HBase团队的惯例了,一方面小米团队在HBase社区的影响力有目共睹,目前已经培养了7位HBase Committer,其中有2位HBase PMC;另外一方面,小米内部也很乐意对外去分享公司一年所做的工作,相当于把一年的工作(包括内部的实践以及社区贡献)做一个年度总结分享给大家。 
 
所以,2018年我们也很积极的提交了演讲议题(HBase Practice In XiaoMi),并花了很多精力整理总结,内部还做过3次英文试讲。但遗憾的是,今年中美关系比较紧张,美国签证没有如期办下来。按照组内历年的经验,一般提前一个月左右办理签证,能很顺利办下来。今年我们在5.14日去大使馆面试申请签证,被要求填写补充材料,在5.16拿到承办方的visa letter并提交补充材料之后,一直到现在签证尚未发放。本想没办法去现场的话,就只能把我们这个议题提交到8.17日的HBaseConAsia去讲。写邮件跟组委会沟通,组委会之前把我们talk的优先级放的比较高,也比较喜欢我们演讲内容,所以后面就想让我们做一个远程分享。为了以防万一设备异常之类的,就先让我们准备一个视频,有任何异常的话,直接放视频也不慌。于是,我们就录了一个,发现视频效果还行(主要是可以做剪辑,哈哈),就跟组委会说,现场干脆直接用视频好了,有任何疑问的话,远程答疑就好。 
 
于是,最后在HBaseConWest2018上看到的就是以下PPT和视频了。演讲内容主要分两部分,第一部分小米内部实践,由我的同事田竞云来分享,第二部分复制功能改进,由我来分享。 
 
1. PPT 
2. 视频地址 
 
总体来说,没有机会去HBaseConWest2018现场分享这个事情,个人还是挺遗憾的。之前Hortonworks的Ted Yu和Pinterest的TianYing获知我们要去美国分享,都很积极的约了我们聚会,最后也只能取消。原定的去美国一些其他行程,也只得取消。有一点值得欣慰的是,在组委会和我们的共同努力下,总算是有机会把小米过去一年做的一些工作整理并呈现给大家,包括美国HBase社区的朋友们。感谢组委会和社区,也感谢铎神和小豪在试讲中提出的很多宝贵建议。
 

CFP: HBaseConAsia 2018演讲议题征集

文章分享openinx 发表了文章 • 0 个评论 • 149 次浏览 • 2018-06-15 10:16 • 来自相关话题

 
EasyChair Link: https://easychair.org/cfp/hbaseconasia-2018?track=215839 

HBaseCon是由HBase社区举办的活动。Apache HBase是Hadoop生态圈内的一个分布式数据库实现,提供了对大数据的实时随机读写能力。欢迎所有的HBase开发者,贡献者,运维人员还有普通使用者来HBaseCon分享你的观点,经验以及使用案例,互相学习,共同进步。

HBaseConAsia是在亚洲举办的HBaseCon。今年的会议将在中国北京举办,由阿里巴巴主办,参会者无须缴纳任何费用。

组委会期望的演讲主题包括但不限于案例分享,HBase的改进和开发,集群管理和运维方面的最佳实践以及对HBase未来的展望。我们欢迎任何可以帮助大家在生产环境中更好的使用HBase方面的主题,也欢迎基于HBase之上的一些有趣的开发、应用、云端/内部集群部署以及周边生态项目相关的主题。

我们希望演讲摘要和PPT使用英文,演讲语言可以使用中文或者英文。

接收演讲主题摘要的截止日期是2018年6月17号。2018年6月30号会公布演讲者名单。
 
议题
 
主要包括如下三个议题
开发及运维: 包括但不限于HBase源码开发(新特性,改进等)、线上运维和调优等主 生态和解决方案: 包括但不限于基于HBase之上构建的开源项目(OpenTSDB/GeoMesa/Kylin等)以及解决方案(云服务)等主 应用: 基于HBase构建的,云上或者自建机房环境中的应用案, 我们希望提交的议题中包含HBase相关的设计及问题解决,而不只是单纯的案例分享
 
项目委员会
 
李钰, 阿里巴巴 (Chair)沈春辉, 阿里巴巴张铎, 小米毕杰山, 华为蔡嘉平, 亦思科技Andrew Purtell, SalesforceAnoop Sam John, IntelMichael Stack, Cloudera
 
场地

中国,北京市朝阳区鼓楼外大街19号,北京歌华开元大酒店
 
联系我们

如果您遇到任何问题,或者有意向成为赞助商,请发邮件给liyu@apache.org
 
  查看全部
 
EasyChair Link: https://easychair.org/cfp/hbaseconasia-2018?track=215839 

HBaseCon是由HBase社区举办的活动。Apache HBase是Hadoop生态圈内的一个分布式数据库实现,提供了对大数据的实时随机读写能力。欢迎所有的HBase开发者,贡献者,运维人员还有普通使用者来HBaseCon分享你的观点,经验以及使用案例,互相学习,共同进步。

HBaseConAsia是在亚洲举办的HBaseCon。今年的会议将在中国北京举办,由阿里巴巴主办,参会者无须缴纳任何费用。

组委会期望的演讲主题包括但不限于案例分享,HBase的改进和开发,集群管理和运维方面的最佳实践以及对HBase未来的展望。我们欢迎任何可以帮助大家在生产环境中更好的使用HBase方面的主题,也欢迎基于HBase之上的一些有趣的开发、应用、云端/内部集群部署以及周边生态项目相关的主题。

我们希望演讲摘要和PPT使用英文,演讲语言可以使用中文或者英文。

接收演讲主题摘要的截止日期是2018年6月17号。2018年6月30号会公布演讲者名单。
 
议题
 
主要包括如下三个议题
  • 开发及运维: 包括但不限于HBase源码开发(新特性,改进等)、线上运维和调优等主 
  • 生态和解决方案: 包括但不限于基于HBase之上构建的开源项目(OpenTSDB/GeoMesa/Kylin等)以及解决方案(云服务)等主 
  • 应用: 基于HBase构建的,云上或者自建机房环境中的应用案, 我们希望提交的议题中包含HBase相关的设计及问题解决,而不只是单纯的案例分享

 
项目委员会
 
  • 李钰, 阿里巴巴 (Chair)
  • 沈春辉, 阿里巴巴
  • 张铎, 小米
  • 毕杰山, 华为
  • 蔡嘉平, 亦思科技
  • Andrew Purtell, Salesforce
  • Anoop Sam John, Intel
  • Michael Stack, Cloudera

 
场地

中国,北京市朝阳区鼓楼外大街19号,北京歌华开元大酒店
 
联系我们

如果您遇到任何问题,或者有意向成为赞助商,请发邮件给liyu@apache.org
 
 

使用hbase快照跨集群复制表经常失败

有问必答smartZY 回复了问题 • 2 人关注 • 1 个回复 • 117 次浏览 • 2018-06-14 16:29 • 来自相关话题