我刚刚安装了apache hadoop并对其进行了实验。我处于第一步,正在提取数据。我正在使用cloudera +他们的VM的twitter示例。
我的问题是读取Twitter数据的流似乎有问题,我不知道是什么。
这是我的flume.conf:
TwitterAgent.sources= Twitter
TwitterAgent.channels= MemChannel
TwitterAgent.sinks=HDFS
TwitterAgent.sources.Twitter.type = org.apache.flume.source.twitter.TwitterSource
TwitterAgent.sources.Twitter.channels=MemChannel
TwitterAgent.sources.Twitter.consumerKey=XXX
TwitterAgent.sources.Twitter.consumerSecret=XXX
TwitterAgent.sources.Twitter.accessToken=XXX
TwitterAgent.sources.Twitter.accessTokenSecret= XXX
TwitterAgent.sources.Twitter.keywords= trump
TwitterAgent.sinks.HDFS.channel=MemChannel
TwitterAgent.sinks.HDFS.type=hdfs
TwitterAgent.sinks.HDFS.hdfs.path=hdfs://localhost:8020/user/flume/tweets
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.sinks.HDFS.hdfs.rollInterval=600
TwitterAgent.channels.MemChannel.type=memory
TwitterAgent.channels.MemChannel.capacity=10000
TwitterAgent.channels.MemChannel.transactionCapacity=100
然后,我使用以下命令启动水槽代理:
flume-ng agent -n TwitterAgent -c conf -f flume.conf
看起来很简单,但是运行代理时我不断收到此错误消息:
16/10/23 12:41:27 INFO twitter.TwitterSource: Starting twitter source org.apache.flume.source.twitter.TwitterSource{name:Twitter,state:IDLE} ...
16/10/23 12:41:27 INFO twitter.TwitterSource: Twitter source Twitter started.
16/10/23 12:41:27 INFO twitter4j.TwitterStreamImpl: Establishing connection.
16/10/23 12:41:28 INFO twitter4j.TwitterStreamImpl: Connection established.
16/10/23 12:41:28 INFO twitter4j.TwitterStreamImpl: Receiving status stream.
16/10/23 12:41:28 INFO twitter4j.TwitterStreamImpl: Stream closed.
16/10/23 12:41:28 ERROR twitter.TwitterSource: Exception while streaming tweets
Stream closed.
Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=a8fd061d or
http://www.google.co.jp/search?q=00070a0c
TwitterException{exceptionCode=[a8fd061d-00070a0c a8fd061d-0007099a], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}
at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:199)
at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57)
at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478)
Caused by: java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:116)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:85)
... 2 more
如您所见,它至少能够连接到twitter API。这是什么原因造成的?有人曾经经历过吗?
最佳答案
自10月21日对DYN发起攻击以来,twitter流API一直遇到问题。这些都已在twitter开发人员论坛上进行了报道,twitter工作人员已经意识到了这个问题:https://twittercommunity.com/t/issues-reported-with-streams-since-10-21/76429。
到目前为止,对于导致问题的原因还没有一个明确的答案,但是观察到的行为是,与Twitter的任何流终结点的连接都在短时间后关闭(通常(尽管并非总是))而没有收到任何数据。有时,连接在发送响应时会关闭,从而导致无效的JSON。
其余端点似乎正在运行。
关于java - Stream在twitter4j(Hadoop- flume)中关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207141/