关于hbase的问题,开启hbase后一会hmaster和hregionserver就没了?

2021-12-12 13:05:20,551 WARN [main-SendThread(192.168.109.130:2128)] zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: 拒绝连接
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
2021-12-12 13:05:20,653 WARN [main] zookeeper.RecoverableZooKeeper: Possibly transient ZooKeeper, quorum=192.168.109.130:2128, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase
2021-12-12 13:05:20,653 ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeeper create failed after 4 attempts
2021-12-12 13:05:20,654 ERROR [main] master.HMasterCommandLine: Master exiting
java.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster

一、通常向HBase批量导入数据有三种常用方式
1、使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase
2、还有一种方式就是使用HBase原生Client API(put)
3、前两种方式因为须要频繁的与数据所存储的RegionServer通信。一次性入库大量数据时,特别占用资源,所以都不是很有效。因为HBase在HDFS中是以HFile文件结构存储的,所以高效便捷的方法就是直接生成HFile文件然后使用Bulk Load方法,即HBase提供的HFileOutputFormat类。
二、Bulk Load基本原理
Bulk Load处理由两个主要步骤组成:
1、生成HFile文件
Bulk Load的第一步会执行一个Mapreduce作业,其中使用到了HFileOutputFormat输出HBase数据文件:StoreFile。
HFileOutputFormat的作用在于使得输出的HFile文件能够适应单个region。使用TotalOrderPartitioner类将map输出结果分区到各个不同的key区间中,每一个key区间都相应着HBase表的region。
2、导入HBase表
第二步使用completebulkload工具将第一步的结果文件依次交给负责文件相应region的RegionServer,并将文件move到region在HDFS上的存储文件夹中。一旦完毕。将数据开放给clients。
假设在bulk load准备导入或在准备导入与完毕导入的临界点上发现region的边界已经改变,completebulkload工具会自己主动split数据文件到新的边界上。可是这个过程并非最佳实践,所以用户在使用时须要最小化准备导入与导入集群间的延时,特别是当其它client在同一时候使用其它工具向同一张表导入数据。
Bulk Load常遇到的一个ERROR:”java.io.IOException: Retry attempted 10 times without completing, bailing out”
错误解析:
我们使用的Hbase1.0.2版本下,如果Hfile文件 跨越多个region,bulkload会自动地将Hfile文件split,但是对于每次retry只会将指定的Hfile文件split一次。但是在hbase-site.xml配置文件里有个参数hbase.bulkload.retries.number控制了hbase对一个hfile最多plit多少次。这个参数默认是10,如果某个hfile跨越的region数超过10个就会报上述Exception。
解决方案:
将hbase.bulkload.retries.number这个参数设置为更大的值,比如目标表的region数量或者将这个参数设置成0,0表示不断重试直到成功。设置之后问题解决。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-12-12

赶快拿起小本本记录起来,

关于HBase的知识盘点,

每条都是精华呀!


1HBase的定义

HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。

适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别。利用Hadoop HDFS(Hadoop Distributed File System)作为其文件存储系统,提供实时读写的数据库系统;利用ZooKeeper作为协同服务。

2HBase的架构


3HBase的适用场景

HBase适合具有如下需求的应用:

o海量数据(TB、PB)

o高吞吐量

o需要在海量数据中实现高效的随机读取

o需要很好的性能伸缩能力

o能够同时处理结构化和非结构化的数据

o不需要完全拥有传统关系型数据库所具备的ACID特性

4成功应用场景案例

项目背景

某银行仅支持查询最近一年的账户历史交易情况,超过一年的查询需要特殊申请,由专人进行人工查询

原因:

o传统数据库无法存储海量数据。

o大数据量下查询性能急剧下降。

HBase的优势

o海量数据(TB、PB):可由查询一年变为十年或更多

o高效随机读取:查询超过一年的数据与查询最近数据同样高效

小伙伴们还想了解哪方面的专业内容可以在文章下方留言,智汇小讲师一定倾囊相授!期待你们的留言哦!

相似回答