线程“主”中的异常java.lang.OutOfMemoryError:槽中的Java堆空间

问题描述

问题:线程“ main”中的异常java.lang.OutOfMemoryError:槽中的Java堆空间。

执行命令

flume-ng agent --conf conf 
--conf-file /usr/local/flume/conf/twitter.conf --name Twitteragent
-Dflume.root.logger=DEBUG.console

输出

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Conf文件 config file

水槽env.sh flume-env.sh

解决方法

我将您使用的配置与示例here进行了比较,我看不到任何错误。我能看到的唯一区别是:

  • 您为TwitterAgent.channels.MemChannel.capacity使用了较小的值
  • 您为TwitterAgent.sinks.HDFS.hdfs.batchsizeTwitterAgent.sinks.HDFS.hdfs.rollcount使用了一个较小的
  • TwitterAgent.sinks.HDFS.hdfs.path不同。

我不会想到其中任何一个都会增加内存使用率。

要检查的另一件事是数据是否实际上正在流入HDFS。 same source说,您应该使用Hadoop管理Web UI来检查数据是否正在流入Hadoop。我想象如果数据没有流动,那么它可能会在flume-ng应用程序的堆中累积。如果积累了太多数据,最终将导致堆溢出。不管您也设置了什么堆大小。

数据不流通的可能原因包括:

  • Hadoop未运行。
  • Hadoop在您在flume配置文件中指定的主机(或IP)和/或端口上运行。