flume收集本地文件到hdfs(还有运行的坑)
我想收集本地的txt文件到hdfs,这是我的配置文件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /opt/module/flume-1.7.0/ddaa
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /opt/module/flume-1.7.0/checkpoint
a1.channels.c1.dataDirs = /opt/module/flume-1.7.0/data
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume/ttt
a1.sinks.k1.hdfs.filePrefix = jxp-
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注意里面的地址 hdfs地址换成自己的 ,checkpointDir 和dataDirs的文件夹会自己创建,但是路径要搞对
然后在flume目录下执行该文件
bin/flume-ng agent --name a1 --conf conf --conf-file conf/file-flume-hdfs.conf -Dflume.root.logg=INFO,LOGFILE
我遇到的问题是运行之后,界面就停止不动了,也不报错也没有结果

然后查找资料后发现 他的日志信息会被收集在安装目录下的logs文件里面,这就很明朗的找错误了
其他的问题,都是配置文件的问题,换参数就可以解决
我遇到的问题是,
ERROR [SinkRunner-PollingRunner-DefaultSinkProcessor] (org.apache.flume.sink.hdfs.HDFSEventSink.process:447) - process failed
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.conf.Configuration.setBoolean(Configuration.java:1679)
at org.apache.flume.sink.hdfs.BucketWriter.open(BucketWriter.java:206)
at org.apache.flume.sink.hdfs.BucketWriter.append(BucketWriter.java:504)
at org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:406)
at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:67)
at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:145)
at java.lang.Thread.run(Thread.java:748)

在经过搜索之后,是因为flume的guava.jar 和hadoop的该文件版本不一样造成的,
方法是将flume/lib/ 目录下该文件删除,或者将hadoop中该文件拷贝过来替换掉,我选择删除该文件

再次执行,还是那样的界面到SLF4J,但是log没有报错,文件也出现在了hdfs中,
还有,如果命令运行,hdfs中未出现对应文件,需要在本地添加文件或者修改信息,因为flume收集的是不断产生的数据。!!!!!!!!!!!!
浙公网安备 33010602011771号