使用 Flume/Hadoop 时 Ubuntu 中的 Java 内存不足异常

标签 java hadoop heap-memory flume

当我尝试使用 Flume 下载推文并将其通过管道传输到 Hadoop 时,由于缺少 Java 堆空间,出现内存不足异常。

我在Hadoop的mapred-site.xml中将当前堆空间设置为4GB,如下所示:

<property>
  <name>mapred.child.java.opts</name>
  <value>-Xmx4096m</value>
</property>

我希望连续下载推文两天,但不能超过 45 分钟而不出现错误。

由于我确实有磁盘空间来容纳所有这些内容,因此我假设错误来自 Java 必须同时处理如此多的事情。有没有办法减慢这些推文的下载速度,或者采取其他措施来解决这个问题?

编辑:包含flume.conf

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

TwitterAgent.sources.Twitter.type = TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = <required>
TwitterAgent.sources.Twitter.consumerSecret = <required>
TwitterAgent.sources.Twitter.accessToken = <required> 
TwitterAgent.sources.Twitter.accessTokenSecret = <required> 
TwitterAgent.sources.Twitter.keywords = manchester united, man united, man utd, man u

TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:50070/user/flume/tweets/%Y/%m/%d/%H/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000

TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 100

编辑2

我尝试将内存增加到 8GB,但仍然没有帮助。我假设我一次在 Hadoop 中放置了太多推文,需要将它们写入磁盘并再次释放空间(或类似的操作)。有没有关于如何执行此操作的指南?

最佳答案

在flume-env.sh中设置JAVA_OPTS值并启动flume代理。

关于使用 Flume/Hadoop 时 Ubuntu 中的 Java 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924328/

相关文章:

java - 将文本文件加载到列表时出现内存不足错误,即使我指定了足够大的 xmx

java强制包声明

hadoop - 使用AWS Hadoop集群设置提交作业

Java注释处理器忽略父类中的注释

scala - 我想将 Hive 中所有现有的 UDTF 转换为 Scala 函数并从 Spark SQL 使用它

java - hive 中带有条件参数的数组的大小

在堆上创建结构?

c++ - 全局静态动态分配对象 C++

java - 当类路径中包含两个相同的 jar 时,JVM 是如何工作的

java - 下载文件时使用 PrintWriter