【问题标题】:Flume-twitter streaming APIFlume-twitter 流 API
【发布时间】:2024-01-20 10:49:01
【问题描述】:

我是 Flume 的新手,我使用 Flume 通过搜索 API 从 twitter 流式传输数据。但是 twitter json 的“geo”键设置为空。那么有没有办法在 Flume 中使用 Streaming API 获取 twitter 数据?

【问题讨论】:

    标签: hadoop-streaming flume flume-ng flume-twitter


    【解决方案1】:

    请参考这个link。前段时间尝试做同样的事情时,我帮了我很多。基本上,您必须执行以下操作:

    • https://dev.twitter.com/apps/ 中创建一个应用程序以生成 OAuth 密钥。这一步可能已经完成,因为您说您过去已经查询过 Twitter。
    • here 下载专为 Twitter 设计的 Cloudera 源代码,并通过编辑 conf/flume-env.sh 并添加以下行将此类 jar 放入 Flume 类路径:

      FLUME_CLASSPATH="/home/training/Installations/apache-flume-1.3.1-bin/flume-sources-1.0-SNAPSHOT.jar"
      
    • 为名为“TwitterAgent”的新 Twitter 代理编辑 Flume 配置文件,类似于:

      TwitterAgent.sources = Twitter
      TwitterAgent.channels = MemChannel
      TwitterAgent.sinks = HDFS
      
      TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
      TwitterAgent.sources.Twitter.channels = MemChannel
      TwitterAgent.sources.Twitter.consumerKey = <consumerKey>
      TwitterAgent.sources.Twitter.consumerSecret = <consumerSecret>
      TwitterAgent.sources.Twitter.accessToken = <accessToken>
      TwitterAgent.sources.Twitter.accessTokenSecret = <accessTokenSecret>
      
      TwitterAgent.sources.Twitter.keywords = <comma-separated list of keywords you are interested in>
      
      TwitterAgent.sinks.HDFS.channel = MemChannel
      TwitterAgent.sinks.HDFS.type = hdfs
      TwitterAgent.sinks.HDFS.hdfs.path = hdfs://localhost:9000/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.channels.MemChannel.type = memory
      TwitterAgent.channels.MemChannel.capacity = 10000
      TwitterAgent.channels.MemChannel.transactionCapacity = 100
      

    然后,您可以通过发出以下命令来启动 Twitter Flume 代理:

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

    【讨论】:

    • 感谢 frb,我也遵循了同样的方法,但 twitter json 在坐标字段中不包含任何值,并且地理值设置为 null。
    • 地理位置是一个非常敏感的数据。如果您查看dev.twitter.com/overview/terms/geo-developer-guidelines,您会看到用户必须启用地理定位以及其他限制。你确定你收到的推特一定包含这样的信息吗?我的意思是,也许您正在寻找一般的推特,并且生成它们的用户很可能没有启用地理定位功能。但是,如果您正在分析非常具体的推文,而您实际上知道这些推文必须包含该信息……那么这似乎是 Twitter 的问题。