Flume采集Twitter数据时EventDrivenSourceRunner启动失败求助
嘿,我来帮你搞定这个Flume拉取Twitter数据时的空指针问题!这类错误大概率是配置或者依赖出了问题,咱们一步步排查:
首先先还原下你遇到的错误和日志信息:
18/03/25 16:04:46 ERROR lifecycle.LifecycleSupervisor: Unable to start EventDrivenSourceRunner: { source:com.cloudera.flume.source.TwitterSource{name:Twitter,state:IDLE} } - Exception follows. java.lang.NullPointerException
18/03/25 16:04:46 INFO node.AbstractConfigurationProvider: Channel MemCh connected to [Twitter, HDFS]
常见排查与解决步骤
检查Twitter API授权配置是否完整且正确
TwitterSource必须依赖4个核心授权参数才能正常调用Twitter API,少一个都会导致空指针:consumerKey、consumerSecret、accessToken、accessTokenSecret。你得确认Flume配置文件的source部分有没有把这四个参数都配置好,而且参数值要和你Twitter开发者账号里的信息完全一致(注意不要有多余空格、字符缺失)。
给你一个正确的配置示例参考:# 代理配置 agent.sources = TwitterSource agent.channels = MemChannel agent.sinks = HDFSSink # Source配置 agent.sources.TwitterSource.type = com.cloudera.flume.source.TwitterSource agent.sources.TwitterSource.consumerKey = 你的Consumer Key agent.sources.TwitterSource.consumerSecret = 你的Consumer Secret agent.sources.TwitterSource.accessToken = 你的Access Token agent.sources.TwitterSource.accessTokenSecret = 你的Access Token Secret # 可选:设置要抓取的关键词 agent.sources.TwitterSource.keywords = hadoop,flume,bigdata确认Flume依赖包是否齐全
TwitterSource是基于Twitter4J库开发的,如果你的Flumelib目录里缺少相关依赖包,就会导致初始化失败抛出空指针。你需要确保以下jar包存在:- twitter4j-core-x.x.x.jar
- twitter4j-stream-x.x.x.jar
建议使用Cloudera官方配套的依赖包,避免版本冲突导致的异常。
检查配置文件的语法错误
Flume配置文件对语法很敏感,比如参数名大小写错误(把consumerKey写成consumerkey)、冒号前后的空格缺失、参数值有特殊字符却没加引号,这些都会导致配置无法被正确加载,进而触发空指针。可以先把配置文件用Flume的配置检查工具验证下:flume-ng agent --conf conf --conf-file your-flume-config.conf --name agent -Dflume.root.logger=INFO,console看启动时有没有配置加载相关的警告信息。
验证Twitter API权限有效性
登录你的Twitter开发者后台,检查创建的应用是否有读取数据的权限,同时确认access token没有过期或者被吊销。如果API权限有问题,TwitterSource无法正常获取API响应对象,也会抛出空指针异常。
内容的提问来源于stack exchange,提问作者Akshay Nagpal

