先说一下环境,flume 1.9.0,hadoop 3.2.1,兼容没有问题,官方文档没什么好说的,足够详细,每一项后面都附带有例子,好评。但是在配置sink to hdfs的时候足足踩了不少雷,记录下来希望可以帮到更多的人。
错误最常见的还是java.lang.NoClassDefFoundError
异常,出现这个提示100%是因为flume缺少相应的组件包,下面分别说一下缺少的内容,找到对应jar之后复制到{FLUME_HOME}/lib
下即可。
org/apache/hadoop/io/SequenceFile$CompressionType
缺少hadoop-common-X.jar
,目录在{HADOOP_HOME}/share/hadoop/common
com/ctc/wstx/io/InputBootstrapper
缺少woodstox-core-X.jar
,目录在{HADOOP_HOME}/share/hadoop/common/lib
org/codehaus/stax2/XMLInputFactory2
缺少stax2-api-X.jar
,目录在{HADOOP_HOME}/share/hadoop/common/lib
com.google.common.base.Preconditions.checkArgument
guava
包版本不一致(通常是过低),从这里获取新版本并删除旧版{HADOOP_HOME}/share/hadoop/common/lib
org/apache/commons/configuration2/Configuration
缺少commons-configuration2-X.jar
,目录在{HADOOP_HOME}/share/hadoop/common/lib
org/apache/hadoop/util/PlatformName
缺少hadoop-auth-X.jar
,目录在{HADOOP_HOME}/share/hadoop/common/lib
org/apache/htrace/core/Tracer
缺少htrace-core4-X-incubating.jar
,目录在{HADOOP_HOME}/share/hadoop/common/lib
No FileSystem for scheme: hdfs
缺少hadoop-hdfs-X.jar
与hadoop-hdfs-client-X.jar
,目录在{HADOOP_HOME}/share/hadoop/hdfs
commons-lang3
可能还会出现commons-lang3
一类的错误,日志太多已经找不到当时完整的错误提示了,这个只需要把{FLUME_HOME}/lib
下lang-2.5
的包删掉换成lang3
的就可以,目录在{HADOOP_HOME}/share/hadoop/common/lib
org.apache.hadoop.ipc.RpcException
这个问题与以下两个问题类似:
RPC response exceeds maximum data length
RPC connect refused
检查flume的任务配置文件中hdfs.path
是否正确,这里应填写namenode
的rpc地址而不是http地址,务必注意hadoop3与hadoop2的端口变化
Operation category READ is not supported in state standby
此错误会出现在HDFS处于HA模式时,当flume任务配置文件中hdfs.path
选择了处于standby
的namenode
时便会报告此错误,解决方法是将path指向处于active
状态的namenode
java.net.UnknownHostException: mycluster
如果在flume的任务配置文件中hdfs.path
指向的是HDFS集群地址则会出现此错误,将hadoop的core-site.xml
与hdfs-site.xml
复制到{FLUME_HOME}/conf
目录下即可
当sink非logger类型时控制台不输出日志(包括错误日志)
在启动命令后面加上-Dflume.root.logger=INFO,console
source是文本文件但HDFS中保存的是16进制
flume任务配置中加上下面两行:
a1.sinks.k1.hdfs.writeFormat = Text
a1.sinks.k1.hdfs.fileType = DataStream
无法通过web上传/下载HDFS文件
首先要保证配置正确且可以通过命令上传文件,观察通过web下载HDFS文件时的请求url:
不用多解释了吧,去配host,上传同理。