通过 flume 进行 Twitter 流式传输时出现错误

getting error in twitter streaming through flume

**虽然 运行 flume 命令出现以下错误,但我尝试更改 .bashrc 中的 envi 变量以及 flume.env.sh 中的 classpath ,还是没用

拾取JAVA_TOOL_OPTIONS:-javaagent:/usr/share/java/jayatanaag.jar 16/12/08 01:57:11 信息 node.PollingPropertiesFileConfigurationProvider:配置提供程序启动 16/12/08 01:57:11 信息 node.PollingPropertiesFileConfigurationProvider:正在重新加载配置文件:../conf/twitter.conf 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.path 16/12/08 01:57:11 警告 conf.FlumeConfiguration:忽略配置 属性:TwitterAgent。sink.HDFS.hdfs.path = hdfs://localhost:8020/datamain/tweets 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.writeFormat 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.hdfs.writeFormat = 文本 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.rollCount 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.hdfs.rollCount = 10000 16/12/08 01:57:11 信息 conf.FlumeConfiguration:添加接收器:HDFS 代理:TwitterAgent 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.rollSize 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.hdfs.rollSize = 0 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.channels 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.channels = MemChannel 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.batchSize 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.hdfs.batchSize = 1000 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.fileType 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.hdfs.fileType = DataStream 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.type 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.type = hdfs 16/12/08 01:57:11 警告 conf.FlumeConfiguration:指定的 属性 无效:sink.HDFS.hdfs.rollInterval 16/12/08 01:57:11 警告 conf.FlumeConfiguration:配置 属性 已忽略:TwitterAgent。sink.HDFS.hdfs.rollInterval = 600<br> 16/12/08 01:57:11 警告 conf.FlumeConfiguration:没有 sinkHDFS 的上下文 16/12/08 01:57:12 信息 conf.FlumeConfiguration:Post-验证 flume 配置包含代理的配置:[TwitterAgent] 16/12/08 01:57:12 信息 node.AbstractConfigurationProvider:创建频道 16/12/08 01:57:12 信息 channel.DefaultChannelFactory:创建通道 MemChannel 类型内存的实例 16/12/08 01:57:12 信息 node.AbstractConfigurationProvider:已创建通道 MemChannel 16/12/08 01:57:12 信息 source.DefaultSourceFactory:创建源 Twitter 实例,类型 org.apache.flume.source.twitter.TwitterSource 16/12/08 01:57:12 错误 node.PollingPropertiesFileConfigurationProvider:加载配置数据失败。例外如下。 org.apache.flume.FlumeException:无法加载源类型:org.apache.flume.source.twitter.TwitterSource、class:org.apache.flume.source.twitter.TwitterSource 在 org.apache.flume.source.DefaultSourceFactory.getClass(DefaultSourceFactory.java:67) 在 org.apache.flume.source.DefaultSourceFactory.create(DefaultSourceFactory.java:40) 在 org.apache.flume.node.AbstractConfigurationProvider.loadSources(AbstractConfigurationProvider.java:327) 在 org.apache.flume.node.AbstractConfigurationProvider.getConfiguration(AbstractConfigurationProvider.java:102) 在 org.apache.flume.node.PollingPropertiesFileConfigurationProvider$FileWatcherRunnable.run(PollingPropertiesFileConfigurationProvider.java:140) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745) 原因:java.lang.ClassNotFoundException:org.apache.flume.source.twitter.TwitterSource 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:195) 在 org.apache.flume.source.DefaultSourceFactory.getClass(DefaultSourceFactory.java:65) ... 11 更多 **我在 twitter.conf 中的 sink 命令似乎也有问题,但我无法弄清楚,下面是 twitter.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 = ###
TwitterAgent.sources.Twitter.consumerSecret = ###
TwitterAgent.sources.Twitter.accessToken = ###
TwitterAgent.sources.Twitter.accessTokenSecret = ####

TwitterAgent.sources.Twitter.keywords =donald trump,republican,democratic


TwitterAgent.channels.MemChannel.type =  memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 10000


TwitterAgent.sink.HDFS.channels = MemChannel
TwitterAgent.sink.HDFS.type = hdfs
TwitterAgent.sink.HDFS.hdfs.path =hdfs://localhost:8020/datamain/tweets
TwitterAgent.sink.HDFS.hdfs.fileType = DataStream
TwitterAgent.sink.HDFS.hdfs.writeFormat = Text
TwitterAgent.sink.HDFS.hdfs.batchSize = 1000
TwitterAgent.sink.HDFS.hdfs.rollSize = 0
TwitterAgent.sink.HDFS.hdfs.rollCount = 10000
TwitterAgent.sink.HDFS.hdfs.rollInterval = 600  `

这是我的 flume.env.sh 文件详细信息

    # to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# If this file is placed at FLUME_CONF_DIR/flume-env.sh, it will be sourced
# during Flume startup.

# Enviroment variables can be set here.

JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

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

# Note that the Flume conf directory is always included in the classpath.
FLUME_CLASSPATH=/home/user/hadoop_store/flume-sources-1.0-SNAPSHOT.jar

.bashrc 详细信息

##Flume home directory

export FLUME_HOME=/home/user/hadoop_store/apache-flume-1.4.0-bin
export FLUME_CONF_DIR=$FLUME_HOME/conf
export FLUME_CLASSPATH=$FLUME_CONF_DIR

export PATH=$FLUME_HOME/bin:$PATH

##Flume home directory

尝试更改快照文件路径仍然无效,

通过查看您的日志文件消息,您遗漏了两件事:

  • 使用 org.apache.flume.source.twitter.TwitterSource class 配置因此 flume-sources-1.0-SNAPSHOT.jar 必须存在于 你的 flume lib 目录。
  • 用下面的sinks关键字替换sink

    TwitterAgent.sinks.HDFS.channels = MemChannel TwitterAgent.sinks.HDFS.type = hdfs TwitterAgent.sinks.HDFS.hdfs.path =hdfs://localhost:8020/datamain/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

希望对你有帮助!!!