不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!!
今天在测试flume中spooldir传输数据的时候报出了一个HDFS IO 错误(两种原因造成,请先看完看看是否跟你的情况符合),错误如下图
错误之前的spool.conf配置如下
#agent的原始源(sources)、管道(Channel)、目标源(sinks)
agent.sources=dataDir
agent.channels=memoryChannel
agent.sinks=s1
## 设置原始源相关配置
agent.sources.dataDir.type=spooldir
agent.sources.dataDir.spoolDir=/usr/testDir/test
#会在hdfs生成一个叫/flume_data的目录
agent.sources.dataDir.channels=memoryChannel
## 设置管道相关配置
agent.channels.memoryChannel.type=memory
agent.channels.memoryChannel.capacity=1000
agent.channels.memoryChannel.transactionCapacity = 100
## 设置目标源相关配置
agent.sinks.s1.type=hdfs
agent.sinks.s1.hdfs.path=hdfs://hadoopmaster:9000/flume/%y/%m/%d # hdfs生成目录的格式是:/flume/%y/%m,y是年,m是月,d是日,同理还可以继续生成日/分钟/秒
agent.sinks.s1.hdfs.filePrefix=lawdata_ # 每个文件名前缀:lawdata_
agent.sinks.s1.hdfs.fileType=DataStream # 数据流格式的文件
agent.sinks.s1.hdfs.writeFormat=Text # 文件内容是文本格式
agent.sinks.s1.hdfs.useLocalTimeStamp = true #是否使用本地时间戳
# 每30秒产生一个文件
agent.sinks.s1.hdfs.rollInterval=30
# 10k文件大小产生新文件
agent.sinks.s1.hdfs.rollSize=10240
# 不根据event个数产生新文件
agent.sinks.s1.hdfs.rollCount=0
# channel中event个数
agent.sinks.s1.hdfs.batchSize=100
agent.sinks.s1.channel=memoryChannel
报出这个错误之后,就根据报错提示 java.io.IOException: File type DataStream not supported (大致意思就是:文件类型DataStream不被支持) 开始找配置的问题,结果反反复复的找了好几遍配置,都找不出什么原因,于是就一顿的度娘,希望度娘可以帮助我解决这个问题,可以不尽人意呀,网上没有答案,连相似的都没有,
于是改变策略就去flume官网看配置属性,但是官网上也说fileType是可以配置DataStream的呀
感觉好伤心呀,对flume不熟悉就是麻烦呀。
一直困扰了我好久,于是我就去看我传输的文本内容
然后我就索性把文本的内容改为 hello world 如下图
结果再次实验时竟然成功了..成功了了..成功了了了
再去hdfs的web界面看是否真的成功
看来不止学习语言编程是从hello world入手呀,现在就连学个框架都要从hello world入手了。
看到成功之后,仔细的想想应该是配置文件配置传输文本大小的属性配置的太小了。然后导致了IO 错误的产生
修改之前spool.conf
修改之后spool.conf rollSize的值依情况而定
我再去修改传输的文本内容为了证实自己的猜想
然后启动flume,在flume_slave1里将这个文件通过 scp远程拷贝到spoolconf配置中指定flume_master的目录下
结果还真是对的,
web界面如下
以上是早上的实验的,下午又遇到相同的错误,但是无论我怎么调整rollSize的值,而且还把传输文本的内容又改为神奇的hello world,可是还是不行。又忙活了好一阵子呀,结果我把配置文件里的注解全部删除之后,又再次试验了好几次,每次都是不断的把rollSize的值慢慢减少,传输的文本不断的加大都可以成功了,
下午修改后的配置文件(spool.conf)
下午传输的文件(t.txt)
经过下午这么一出,这让我不得不联想到配置文件有可能对中文支持性不怎么好呀
就连有中文注解的配置文件和没注解的配置文件在 hdfs的web界面展示都有区别,如下三幅图
带注解图:
不带中文注解的:
总结:
强烈建议大家不要配置文件中写上中文注解,自己知道什么意思就好了,如果大家遇到想我这种情况可以试试看,如果还有相同的错误却又因为其它情况产生的,希望大家能够在评论中写下来,我也想学习更多的东西,感谢大家
如果此文章有什么不对的地方请路过的大神指出,以免误人子弟