使用flume/hadoop时ubuntu出现java内存不足异常

brgchamk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(408)

当我尝试使用flume下载tweet并将它们导入hadoop时,由于java堆空间不足,我遇到了一个内存不足的异常。
我在hadoop的mapred-site.xml中将堆空间当前设置为4gb,如下所示:

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

我希望连续下载tweet两天,但不能超过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中放置了太多tweet,需要将它们写入磁盘并再次释放空间(或者类似的东西)。有没有关于如何做到这一点的指南?

mrfwxfqh

mrfwxfqh1#

问题似乎与批量大小和事务处理能力有关。我将它们改为:

TwitterAgent.sinks.HDFS.hdfs.batchSize = 100
TwitterAgent.channels.MemChannel.transactionCapacity = 1000

我甚至不需要更改java\u opts值就可以使用它。

qnakjoqk

qnakjoqk2#

在flume-env.sh中设置java\u opts值并启动flume代理。

相关问题