设为首页 加入收藏

TOP

关于flume 中spooldir传输数据报出HDFS IO error ..... File type DataStream not supported 错误解决
2018-11-28 18:07:37 】 浏览:75
Tags:关于 flume spooldir 传输 数据 报出 HDFS error ..... File type DataStream not supported 错误 解决
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hui_2016/article/details/70255820

不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!!


今天在测试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界面展示都有区别,如下三幅图



带注解图:



不带中文注解的:




总结:

强烈建议大家不要配置文件中写上中文注解,自己知道什么意思就好了,如果大家遇到想我这种情况可以试试看,如果还有相同的错误却又因为其它情况产生的,希望大家能够在评论中写下来,我也想学习更多的东西,感谢大家



如果此文章有什么不对的地方请路过的大神指出,以免误人子弟


尊重原创,如要转载请注明出处



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Nginx 模块开发之日志模块---实时.. 下一篇flume传数据到hdfs

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目