问题描述
问题:线程“ 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.batchsize
和TwitterAgent.sinks.HDFS.hdfs.rollcount
使用了一个较小的 -
TwitterAgent.sinks.HDFS.hdfs.path
不同。
我不会想到其中任何一个都会增加内存使用率。
要检查的另一件事是数据是否实际上正在流入HDFS。 same source说,您应该使用Hadoop管理Web UI来检查数据是否正在流入Hadoop。我想象如果数据没有流动,那么它可能会在flume-ng应用程序的堆中累积。如果积累了太多数据,最终将导致堆溢出。不管您也设置了什么堆大小。
数据不流通的可能原因包括:
- Hadoop未运行。
- Hadoop在您在flume配置文件中指定的主机(或IP)和/或端口上运行。