转载地址: http://www.cnblogs.com/shenguanpu/archive/2012/06/12/2546309.html
1 java.io.IOException: java.io.IOException: java.lang.IllegalArgumentException: offset (0) + length (8) exceed the capacity of the array: 4
做简单的incr操作时出现,原因是之前put时放入的是int 长度为 vlen=4 ,不适用增加操作,只能改为long型 vlen=8
2 写数据到column时 org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 1 action: NotServingRegionException: 1 time, servers with issues: 10.xx.xx.37:60020, 或是 org.apache.hadoop.hbase.NotServingRegionException: Region is not online: 这两种出错,master-status中出现Regions in Transition 长达十几分钟,一直处于PENDING_OPEN状态,导致请求阻塞。目前把10.xx.xx.37这台机器下线,运行一夜稳定,没有出现因split造成的阻塞。怀疑是机器问题。Hmaster的日志显示这台region server 不停的open close,不做任何split 或flush
RIT 的全称是region in transcation. 每次hbase master 对region 的一个open 或一个close 操作都会向Master 的RIT中插入一条记录,因为master 对region 的操作要保持原子性,region 的 open 和 close 是通过Hmaster 和 region server 协助来完成的. 所以为了满足这些操作的协调,回滚,和一致性.Hmaster 采用了 RIT 机制并结合Zookeeper 中Node的状态来保证操作的安全和一致性.
OFFLINE, // region is in an offline state PENDING_OPEN, // sent rpc to server to open but has not begun OPENING, // server has begun to open but not yet done OPEN, // server opened region and updated meta PENDING_CLOSE, // sent rpc to server to close but has not begun CLOSING, // server has begun to close but not yet done CLOSED, // server closed region and updated meta SPLITTING, // server started split of a region SPLIT // server completed split of a region
进一步发现是load balance的问题 region server不停重复的被open close,参考http://abloz.com/hbase/book.html#regions.arch.assignment 重启了region server正常
后来的代码运行中又出现region not on line ,是NotServingRegionException抛出的,原因是“Thrown by a region server if it is sent a request for a region it is not serving.”
为什么会不断请求一个离线的region?且这种错误集中在150个中的3个region,追踪服务器端log,region 会被CloseRegionHandler关掉,过了20分钟左右才重新打开,关掉后客户端请求的region仍然是这个关闭的region?
3 设置开关不写入hbase并不生效
代码初上线,增加了开关,万一hbase有问题则关闭掉开关。但是出现问题了发现程序卡死,目前认为原因是不断加长的retry机制,60秒超时,1-32秒的10次retry,万一出问题,切换开关也没有用。
需要配置rpc超时参数和retry time解决它
4 flush、split、compact导致stop-the-world
出现长时间的flush split操作导致hbase服务器端无法响应请求。需要调整region大小,并测试获取flush次数
5 hbase参数设置
hbase.regionserver.handler.count
考虑到sas盘的io能力,设置为50
hbase.hregion.memstore.block.multiplier
当memstore的大小为hbase.hregion.memstore.flush.size的multiplier倍数时,阻塞读写进行flush,默认为2
6 region server crush
Regionserver crash的原因是因为GC时间过久导致Regionserver和zookeeper之间的连接timeout。
Zookeeper内部的timeout如下:
minSessionTimeout 单位毫秒,默认2倍tickTime。
maxSessionTimeout 单位毫秒,默认20倍tickTime。
(tickTime也是一个配置项。是Server内部控制时间逻辑的最小时间单位)
如果客户端发来的sessionTimeout超过min-max这个范围,server会自动截取为min或max,然后为这个Client新建一个Session对象。
默认的tickTime是2s,也就是客户端最大的timeout为40s,及时regionserver的zookeeper.session.timeout设置为60s也没用。
改动:
- 将zookeeper集群的tickTime修改为9s,最大的timeout为180s,同时修改zookeeper.session.timeout为120s,这样可以避免GC引发timeout。
- 添加参数hbase.regionserver.restart.on.zk.expire为true,改参数的作用是当regionserver和zookeeper之间timeout之后重启regionserver,而不是关掉regionserver。
7 代码问题导致死锁
master慢查询日志中一个查询达到了2小时,最终导致服务器响应变慢,无法应对大写入。追究原因是getColumns操作一下取出十几万的数据,没有做分页;更改程序分页500条左右,目前没有出现问题
8 operation too slow
2012-07-26 05:30:39,141 WARN org.apache.hadoop.ipc.HBaseServer: (operationTooSlow): {"processingtimems":69315,"ts":9223372036854775807,"client":"10.75.0.109:34780","starttimems":1343251769825,"queuetimems":0,"class":"HRegionServer","responsesize":0,"method":"delete","totalColumns":1,"table":"trackurl_status_list","families":{"sl":[{"timestamp":1343251769825,"qualifier":"zzzn1VlyG","vlen":0}]},"row":""} 删除一行数据用了69315s 而且神奇的是row为"",row无法设置null进去,但可以增加空串。做了一轮测试 空row-key 删除不存在的column 耗时 700ms 空row-key 删除存在的column 耗时 5ms
非空row-key 删除任意的column 耗时 3ms
不清楚是否是个bug,也还不知道怎么就传了个空row-key进去,目前策略为在代码端避免对空row-key做操作。 9 responseTooSlow
2012-07-31 17:52:06,619 WARN org.apache.hadoop.ipc.HBaseServer: (responseTooSlow): {"processingtimems":1156438,"call":"multi(org.apache.hadoop.hbase.client.MultiAction@3dbb29e5), rpc version=1, client version=29, methodsFingerPrint=-1508511443","client":"10.75.0.109:35245","starttimems":1343727170177,"queuetimems":0,"class":"HRegionServer","responsesize":0,"method":"multi"}
引用hbase说明:The output is tagged with operation e.g.(operationTooSlow)
if the call was a client operation, such as a Put, Get, or Delete, which we expose detailed fingerprint information for. If not, it is tagged(responseTooSlow)
and still produces parseable JSON output, but with less verbose information solely regarding its duration and size in the RPC itself. 目前做法是取消了对某个key多个column的批量delete操作避免阻塞,没有发现新问题 10 output error
2012-07-31 17:52:06,812 WARN org.apache.hadoop.ipc.HBaseServer: IPC Server Responder, call get([B@61574be4, {"timeRange":[0,9223372036854775807],"totalColumns":1,"cacheBlocks":true,"families":{"c":["ALL"]},"maxVersions":1,"row":"zOuu6TK"}), rpc version=1, client version=29, methodsFingerPrint=-1508511443 from 10.75.0.151:52745: output error 11 rollbackMemstore问题
较频繁出现这样的log: 2012-08-07 10:21:49,887 DEBUG org.apache.hadoop.hbase.regionserver.HRegion: rollbackMemstore rolled back 0 keyvalues from start:0 to end:0
方法解释为:Remove all the keys listed in the map from the memstore. This method is called when a Put has updated memstore but subequently fails to update the wal. This method is then invoked to rollback the memstore.
很奇怪的是开始和结束的index都为0
方法中循环: for (int i = start; i < end; i++) {
因此是空数据,空回滚。需要进一步调查
12 新上线一个region server 导致region not on line
往错误的region server服务器请求region
13 请求不存在的region,重新建立tablepool也不起作用
请求的时间戳 1342510667
最新region rowkey相关时间戳 1344558957
最终发现维持region location表的属性是在HConnectionManager中
get Get,delete Delete,incr Increment 是在 ServerCallable类 withRetries处理
情景1 若有出错(SocketTimeoutException ConnectException RetriesExhaustedExcetion),则清理regionServer location
情景2 numRetries 若设置为1 ,则 循环只执行一次,connect(tries!=0) 为connect(false),即reload=false,不会进行location更新,当为numRetries>1的时候才会重新获取
get Gets List, put Put或Puts List,delete Deletes List 则调用HConnectionManager的 processBatch去处理,当发现批量get或者put、delete操作结果有问题,则刷新regionServer location
设置 numRetries为>1次, 我这里是3次,解决问题
14 zookeeper.RecoverableZooKeeper(195): Possibly transient ZooKeeper exception: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/master
这是在我单机做测试时出现的,无论是从ide或是bin启动hbase,从shell里可以正常连接,从测试程序中无法连接,zookeeper端口是2181,客户端端口应该与zookeeper无关才对,
最终更改配置21818端口换为2181 运行正常,应该是单机环境才要做这种更改。
相关推荐
在深入探讨HBase之前,首先理解它是一个基于Google Bigtable理念设计的开源分布式数据库,主要在Apache Hadoop项目中作为NoSQL数据存储解决方案。HBase适用于处理海量结构化数据,尤其适合那些需要实时读写的大数据...
遇到的问题与解决方案 在实验过程中,可能会遇到启动HBase Shell的困扰。这通常是因为没有启动HBase服务或者环境变量配置不正确。解决方法是首先确保HBase服务正常运行,然后通过以下命令启动Shell: ```shell ...
总结来说,掌握HBase 0.96版本的Java编程涉及理解HBase的核心概念,如表、列族、行键、时间戳,以及如何通过Java API进行连接、操作数据、管理表和处理故障。同时,了解异步操作、批量操作和监听器机制也是提升HBase...
总结,通过上述步骤,我们可以成功地将MySQL中的数据导入到HBase。在实际项目中,可能需要考虑更多因素,例如数据清洗、错误处理、性能优化等。此外,为了实现大规模数据迁移,可以考虑使用批处理或MapReduce等技术...
- **主节点故障问题**:如果主节点发生故障,则整个集群将无法正常工作,因为没有自动切换机制。 - **网络带宽要求高**:节点间频繁的数据交换会消耗大量的网络资源。 - **成本增加**:为了构建集群,需要额外投入更...
在大数据处理领域,Spark 和 HBase 以及 MySQL 都扮演着重要的角色。Spark 提供了高效的数据处理能力,...在实际应用中,根据具体需求,你可能还需要处理数据类型转换、错误处理等问题,以确保数据的一致性和完整性。
总结,HBase备份和数据恢复涉及到多种策略和工具,包括快照、HLog备份和HDFS数据备份。而HBase与Hive的互导以及与HDFS的互导则为大数据分析提供了灵活的数据流转路径。理解和掌握这些知识点对于管理和优化大数据环境...
总结,`SEP`机制通过`hbase-indexer`组件实现了HBase与Elasticsearch之间的数据实时同步,让用户能够在保持HBase强大存储能力的同时,享受到Elasticsearch的搜索与分析优势。在实际部署和使用过程中,需根据业务需求...
本文总结了Hadoop、HBase、Hive以及Spark等大数据技术的相关面试知识点,包括HBase与Hive的关系、HBase的数据结构、Spark Core与Spark SQL的比较、RDD vs DataFrame vs DataSet、Scala与Java的互操作性、为什么选择...
为了实现HBase到Solr的数据同步,我们可以使用HBase Indexer,这是一个由NGDATA开发的开源项目,它简化了这个过程,避免了手动编写同步代码的需求,从而减少了开发工作量和并发环境下的性能问题。在CDH 5.0.2版本中...
总结来说,HBase在大数据处理中的角色是提供高性能、可扩展的存储解决方案,它的设计和操作方式与传统的关系型数据库有很大差异,更适应大数据场景下的实时读写和大规模数据处理需求。了解并掌握HBase的表设计和操作...
《HBase案例分析》 ...总结,HBase作为一款强大的分布式数据库,为大数据环境下的实时存储和查询提供了有力支持。通过深入理解和应用HBase,我们可以解决许多大规模数据处理难题,推动企业的数字化转型。
#### 八、总结 本文详细介绍了 HBase 的安装流程、基本概念以及如何与 Hadoop 生态系统中的其他组件集成。HBase 作为大数据领域的重要组成部分,为大规模数据的存储和检索提供了强大的支持。通过对 HBase 的深入...
在大数据处理领域,HBase作为...总结来说,将CSV数据存储到HBase涉及数据预处理、HBase表的设计、数据插入以及可能的优化措施。通过实践和学习,你可以熟练掌握这一技能,从而在大数据场景中充分利用HBase的强大功能。
总结,Elasticsearch-HBase-River是连接HBase与Elasticsearch的重要桥梁,它使得我们在享受HBase强大的数据存储能力的同时,也能充分利用Elasticsearch的搜索和分析特性。正确配置和优化这个插件,可以帮助我们构建...
实验总结: 通过这个实验,参与者深入理解了HBase如何在Hadoop架构中协同工作,掌握了HBase Shell命令的基本操作,并学会了使用Java API进行高级数据操作。这对于理解和应用大数据处理技术,尤其是在实时数据存储和...
总结起来,"中国移动storm练习项目hbase代码"涵盖了实时数据处理和大数据存储的核心技术,是学习和应用大数据处理的一个宝贵实例。通过深入理解和实践这个项目,开发者可以提升在实时数据分析和HBase数据库操作方面...
为了解决这一问题,开发者们创建了各种ORM(Object-Relational Mapping)工具,使得操作HBase可以更像操作关系型数据库一样便捷。本篇文章将详细介绍一个基于注解的HBase ORM小工具,帮助你更好地理解和应用。 **...
总结来说,从MySQL导入数据到HBase的过程主要包括:1)在MySQL中执行查询获取数据;2)将查询结果处理成JSON格式;3)设计HBase的表结构;4)将JSON数据映射并导入到HBase中。这个过程涉及了SQL查询、数据转换、数据...
总结而言,Hadoop数据迁移到HBase的过程涵盖了数据格式的转换、表结构的创建以及数据的上传和加载。整个过程需要熟练掌握Hadoop和HBase的技术细节,以及两者之间的数据交互机制。使用MapReduce进行数据预处理是关键...