當我嘗試使用Flume下載推文並將它們傳送到Hadoop中時,由於缺少Java堆空間而導致內存不足異常。在使用Flume/Hadoop時,Ubuntu中的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中放置了太多推文,並且需要將它們寫入磁盤並再次釋放空間(或者出現這種情況)。有沒有關於如何做到這一點的指南?
你可以發佈你用來下載推文的Java代碼嗎? – araknoid
完成 - 它在那裏是一個錯誤?我從Cloudera提供的代碼修改了這些代碼。 –
通常'-Xmx4096'也應該包含值爲'-Xmx4096m'的單位。 – araknoid