`
qindongliang1922
  • 浏览: 2183857 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117531
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125921
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59907
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71301
社区版块
存档分类
最新评论

一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉

阅读更多

环境如下:
Centos6.5
Apache Hadoop2.7.1
Apache Hbase0.98.12
Apache Zookeeper3.4.6
JDK1.7
Ant1.9.5
Maven3.0.5

最近在测Hbase的压缩,Hadoop安装了lzo和snappy,插入50条文本数据,每条数据大约4M,来看他们的压缩率对比,
然后在测的过程中,发现用java客户端去scan这50条数据时,regionserver频繁宕机看hbase的log发现并无明显异常,查看datanode的log发现如下异常:


java.io.IOException: Premature EOF from inputStream
        at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:201)
        at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
        at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
        at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:472)
        at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:849)
        at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:804)
        at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
        at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
        at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:251)
        at java.lang.Thread.run(Thread.java:745)




截图如下,好吧,出异常了,就拿这个异常google查找结果,发现并没有明确的答案,大部分都是说链接超时,或者是句柄数满了,导致链接中断等等,然后就按这些答案,改了若干配置,发现依然没有生效,这领我感到十分奇怪 ,得出一个错误的结论,hbase不支持多种压缩类型并存的表,然后我去掉了其他类型用来压缩测试的表,再次测试,发现问题依旧,这再次令我十分诧异,会不会是环境的问题?因为我实在想不出来可能的问题所在了,然后就在本机虚拟机上进行测试,
虚拟机的环境,因为是自己用,所以JDK版本是1.8 和 Centos版本是7,Hbase,Hadoop,Zookeeper版本则保持一致,
搭建完毕后,继续测试,发现问题依旧,这下令人更迷惑了,看的出来非环境的问题了,不过这次有了点新的线索,由于用的是JDK8,在Hbase的log里面发现出现了大量的full gc日志,意思就是内存严重不足,导致垃圾收集时间出现了4,5秒,这下我才有点头绪,hbase是个吃内存的玩意,内存给的少,确实有可能导致regionserver挂掉,于是我查看hbase的堆内存分配情况,发现是默认的1G,这下确实跟这个有很大关系,50条数据占存储200M,如果每次scan一次,hbase会将其缓存在cache里面,第二次继续scan不同压缩类型的表,会导致内存膨胀,继而引发,regionserver宕机,而给出的异常提示,并不是非常明确,所以才定位问题比较困难,知道了大概原因所在,然后把hbase的堆内存调到4G,并分发到所有节点上,再次启动,用java 客户端,扫描全表测试,这次非常稳定,regionserver没有出现过再次挂掉的情况。









最后给出测试压缩的一个结论:总共测了4种压缩比较,原始数据200M
(1)不用压缩   占空间 128.1 M 
(2)gz压缩       占920.3 K
(3)snappy压缩 占 13.2M
(4)lzo压缩       占8M

以上可以看出,gz的压缩比最高,lzo次之,snappy第三,当然不同的压缩适用于不用的业务场景,这里不能就简简单单的
总结必须用什么,这里面snappy和lzo在目前大多数互联网公司用的比较多,所以大家可以根据具体业务,来选择合适的压缩方案。


最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!




  • 大小: 88.8 KB
1
1
分享到:
评论

相关推荐

    HBase堆外内存测试

    ### HBase堆外内存测试详解 #### 一、HBase BlockCache概述 HBase的BlockCache是一种用于提高读取性能的重要机制,它主要用于缓存HFile的Block数据,以减少磁盘I/O操作,从而加快读取速度。BlockCache分为两种类型...

    hbase性能调优

    - 当单个RPC请求的数据量较大(如几MB甚至更大),若该值设置得过高,则可能导致内存占用增加,进而引起频繁的垃圾回收(GC)或Out of Memory(内存溢出)错误。 - 因此,该值并非越大越好,需根据实际工作负载情况来...

    HBase配置

    `hbase.hregion.memstore.block.multiplier`控制内存中memstore的大小,防止过多数据堆积导致RegionServer崩溃。 10. **性能优化** - `hbase.client.scanner.caching`设置每次从RegionServer拉取的数据行数,以...

    生产环境里的堆外内存HBase读路径——阿里巴巴的故事

    Yu Li explains how Alibaba met the challenge of tens of millions requests per second to its Alibaba-Search HBase cluster on 2016 Singles' Day. With read-path off-heaping, Alibaba improved the ...

    尚硅谷大数据技术之HBase1

    在本篇关于“尚硅谷大数据技术之HBase1”的教程中,我们将重点探讨HBase的安装和配置过程,包括Zookeeper、Hadoop的部署,以及HBase自身的设置和启动服务。 首先,Zookeeper是HBase的重要组件,它作为分布式协调...

    尚硅谷大数据技术之 Hbase1

    【尚硅谷大数据技术之 Hbase1】主要涵盖了HBase的基础概念、核心组件和架构,以及安装过程。HBase是一个基于列式存储的分布式数据库,它设计用于处理大规模数据,尤其适用于非结构化和半结构化的数据。以下是相关...

    HBase源代码 hbase-0.98.23

    HBase,作为Apache的一个开源项目,是构建在Hadoop之上的分布式、版本化、列族式的NoSQL数据库,它提供了高可靠性、高性能、可伸缩的数据存储解决方案。本文将基于hbase-0.98.23的源代码,深入解析其内部机制,帮助...

    尚硅谷大数据技术之HBase.docx

    * 自动分区:HBase 表是由分布在多个 RegionServer 中的 region 组成的,这些 RegionServer 又分布在不同的 DataNode 上,如果一个 region 增长到了一个阈值,为了负载均衡和减少 IO,HBase 可以自动或手动干预的将...

    HBase的性能优化

    HBase的Block Cache是 RegionServer 中的一块缓存区域,用于存储频繁访问的数据块。增大Block Cache的大小可以提高读取性能。默认情况下,HBase的Block Cache大小为0.0,可以根据实际情况调整这个值。例如,将Block ...

    Hadoop之Hbase从入门到精通.docx

    特别是数量较多的小Region不停地split、compaction,会导致集群响应时间波动很大,Region数量太多不仅给管理上带来麻烦,甚至会引发一些Hbase的bug。一般512以下的都算小Region。大Region,则不太适合经常split和...

    hbase资料_hbase-default.xml.zip

    3. **内存管理**:`hbase.regionserver.global.memstore.upperLimit`和`hbase.regionserver.global.memstore.lowerLimit`分别设置了全局MemStore占用RegionServer内存的最大和最小比例,以防止数据溢出到磁盘。...

    java操作Hbase之Hbase专用过滤器PageFilter的使用源代码

    这是因为HBase的RegionServer可能在内部批处理多个行,导致结果集跨越了页边界。因此,如果需要精确的分页,可以结合RowRange或者其他过滤器一起使用。 此外,PageFilter并不改变数据的排序,如果你需要按特定顺序...

    Hbase

    HBase 是一个分布式的、基于列族的开源数据库,它运行在 Apache Hadoop 文件系统(HDFS)之上。HBase 提供了对大规模数据集的实时读写访问,是大数据领域的重要组件。它设计用于处理PB级别的数据,适合于拥有数十亿...

    hbase-0.94脚本hbase在cygwin的环境的bug

    HBase是Apache Hadoop生态系统中的一个分布式、可扩展的大数据存储系统。它设计用于处理海量结构化数据,尤其是在大规模集群上。HBase 0.94版本是在2012年发布的,虽然现在已经有了更新的版本,但了解其在特定环境如...

    hbase性能优化

    增加HBase堆内存,根据业务需求调整hbase-env.sh中的HBASE_HEAPSIZE设置;增加RPC调用数量,通过修改hbase-site.xml中的hbase.regionserver.handler.count属性来实现,以提高并发处理能力。 在HBase的使用中,如果...

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

    - **高性能**:即使面对大量数据,HBase也能够保持快速的读写操作,这是因为其采用了一种特殊的内存缓存机制和高效的磁盘存储结构。 - **容错性**:通过数据复制和故障恢复机制,HBase能够在节点故障的情况下保证...

    HbaseTemplate 操作hbase

    HBase是建立在Hadoop文件系统(HDFS)之上,为处理大规模数据提供了一个高效的数据存储解决方案。而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章...

    [原创]HbaseClient

    HbaseClient是Apache HBase的核心组件之一,它是客户端与HBase分布式数据库进行交互的桥梁。本文将深入探讨HbaseClient的工作原理、主要功能以及使用技巧,帮助读者更好地理解和掌握HBase的数据操作。 首先,Hbase...

    HBase参数修改 PDF 下载

    2. 合理设置`hbase.hregion.max.filesize`,避免过多的小Region导致的性能下降。 3. 监控MemStore,合理设定`hbase.regionserver.global.memstore.upperLimit`,防止频繁刷盘影响性能。 4. 定期执行重大合并(`hbase....

Global site tag (gtag.js) - Google Analytics