大数据集群的工作,很大一部分精力花在了调整集群的jvm参数上面。由于现在的开源大数据产品无论是hadoop、hbase、yarn还是spark等等,都运行于jvm环境中,因此而产生的垃圾收集问题是影响集群可用性的是工作中的重点。
本文首先归纳一些常见的因jvm垃圾收集导致的常见集群问题,这些归纳来自于平时工作的总结,欢迎和大家一起交流:
1、Namenode的堆内存配置过小导致频繁产生full GC导致namenode宕机,在hadoop中,数据的写入&读取经由namenode,所以namenode的jvm内存需要足够多,尤其是在出现大量数据流动的场景中。
此外Hadoop集群中的文件数越多,Namenode的内存压力越大,可以通过archive归档命令定期合并一些目录以减少namenode的压力。hadoop不适于存储海量小文件的原因也在于此。
2、DataNode的内存可以相应调小。
3、NodeManager充当shuffle任务的server端,内存应该调大,否则会出现任务连接错误,日志Too Many fetch failures.Failing the attempt。
4、ResourceManager垃圾回收时间过长导致与zk的连接超时,出现active RM的频繁切换,此过程中会导致一些MR任务失败。
5、HRegionServer的堆内存配置过少,HBase的读写直接与RegionServer交换,Regionserver中预留了数据读写的缓存,入Memstore&blockCache等等,因此留给RegionServer的堆内存应足够其缓存数据库中的数据。
JVM的参数调整视应用环境、集群环境、业务背景的不同而不同,因此,很难统一出一个适用的标准,更多的是