当前位置: 首页 > 知识库问答 >
问题:

使用flume运行twitter连接器时获取Java . lang . out of memory error:Java堆空间

韩玉石
2023-03-14

我使用以下命令启动代理

bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf Dflume.root.logger=DEBUG,console -n TwitterAgent

我的错误消息是

Exception in thread "Twitter Stream consumer-1[Receiving stream]" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:596)
    at java.lang.StringBuffer.append(StringBuffer.java:367)
    at java.io.BufferedReader.readLine(BufferedReader.java:370)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:85)
    at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57)
    at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478)
18/05/15 16:53:36 ERROR hdfs.HDFSEventSink: process failed
java.lang.OutOfMemoryError: GC overhead limit exceeded

我的 twitter.conf 属性文件如下

# Naming the components on the current agent.
TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

# Describing/Configuring the source
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.consumerKey = xxx
TwitterAgent.sources.Twitter.consumerSecret = xxx
TwitterAgent.sources.Twitter.accessToken = xxx
TwitterAgent.sources.Twitter.accessTokenSecret = xxx
TwitterAgent.sources.Twitter.keywords = kafka

# Describing/Configuring the sink

TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://xxx:7200/topics/
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 10000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 100000

# Describing/Configuring the channel
TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 100000
TwitterAgent.channels.MemChannel.transactionCapacity = 1000

# Binding the source and sink to the channel
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channel = MemChannel

我的flume-env.sh文件

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/bin/java

# Give Flume more memory and pre-allocate, enable remote monitoring via JMX
export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"


# Let Flume write raw event data and configuration information to its log files for debugging
# purposes. Enabling these flags is not recommended in production,
# as it may result in logging sensitive user information or encryption secrets.
# export JAVA_OPTS="$JAVA_OPTS -Dorg.apache.flume.log.rawdata=true -Dorg.apache.flume.log.printconfig=true "

# Note that the Flume conf directory is always included in the classpath.
#FLUME_CLASSPATH=""

# export HIVE_HOME=/usr/lib/hive
# export HCAT_HOME=/usr/lib/hive-hcatalog

我在 flume-env.sh 文件中有更新导出JAVA_OPTS=“-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote”,但仍然遇到 Java 堆内存问题。我应该怎么做才能进一步解决此问题。

共有2个答案

沈嘉瑞
2023-03-14

flume-env.sh文件中注释掉这一行

< code > export JAVA _ OPTS = "-xms 100m-xmx 2000m-DCOM . sun . management . JMX remote "

然后启动代理

辛弘壮
2023-03-14

我通过在 twitter.conf 文件中添加此行解决了增加堆大小的问题

TwitterAgent.channels.MemChannel.byteCapacity = 6912212

然后增加了 flume-env.sh 文件中的堆大小

export JAVA_OPTS="-Xms512m -Xmx1024m -Dcom.sun.management.jmxremote"
 类似资料:
  • 我已经把正确的消费者“钥匙”和消费者“秘密”,任何帮助都是感激的!

  • 我正在Java 5上编写一个客户端Swing应用程序(图形字体设计器)。最近,我遇到了错误,因为我在内存使用方面并不保守。用户可以打开无限数量的文件,程序会将打开的对象保存在内存中。经过快速研究,我在5.0 Java虚拟机中发现了人体工程学,其他人说在Windows机器上,JVM默认最大堆大小为。 在这种情况下,我应该如何处理这种限制? 我可以使用java的命令行选项来增加最大堆大小,但这需要找出

  • 我正在尝试使用Apache Flume将推文保存到HDFS。我目前在Hadoop和Flume中使用Cloudera图像。我在Cloudera的博客上学习教程,但我无法连接到Twitter API。 我收到以下错误: 我已经将我的twitter API凭证复制到flume.conf中(我已经在光盘和web用户界面上进行了尝试)。我也曾试图重新生成它们,并复制那些新的,但这对我没有帮助。 我的pom。

  • 代码片段如下所示: 如果有人有决议,请帮忙?

  • 我的项目有OCR要求,我想使用google cloud Vision API。我通过GIT下载了示例代码,但它报告了以下错误: 异常在线程"main"mpl.java:392SocketTimeoutException:连接超时在java.net.DualStackPlainSocketIocket.connectForConnect(Native Method)在ocket.java:589Du

  • 我的JAVA应用程序使用多线程一次处理多个请求。因此,不同的请求在同一时间用不同的线程进行处理。 如果我观察数据库中打开的会话,有10个打开的会话(在c3p0中配置的最大数量),但它们都是空闲的。有没有一种方法可以让c3p0释放一些空闲连接,这样,至少有一个线程结束它的进程(增加最大连接数)?