最近在弄一个银行数据汇聚的事情,主要目的是把FTP上的数据汇聚到HDFS上去存储。 逻辑是这样的:把FTP服务器上的文件下载到一台主机上,然后SCP到另外一台主机上的Spooling Directory Source所监控的目录下面去,sink是hdfs(这里解释一下,由于网络环境的因素,另一台不能访问到内网的FTP服务器,所以只能这样中转一下)。

嗯,想法不错,逻辑上看上去也应该没啥问题,于是就开始吭哧吭哧写脚本了。FTP上每个信令数据的每个文件的大小差不多都有300M左右。SCP到远端服务器也没出现问题,可就是agent老是会挂掉,报这个异常:

[java] view plaincopy
  1. 2014-11-26 12:30:16,942 ERROR org.apache.flume.source.SpoolDirectorySource: FATAL: Spool Directory source source1: { spoolDir: /var/log/apache/flumeSpool }: Uncaught exception in SpoolDirectorySource thread. Restart or reconfigure Flume to continue processing.
  2. java.nio.charset.MalformedInputException: Input length = 1
  3. at java.nio.charset.CoderResult.throwException(CoderResult.java:277)
  4. at org.apache.flume.serialization.ResettableFileInputStream.readChar(ResettableFileInputStream.java:195)
  5. at org.apache.flume.serialization.LineDeserializer.readLine(LineDeserializer.java:134)
  6. at org.apache.flume.serialization.LineDeserializer.readEvent(LineDeserializer.java:72)
  7. at org.apache.flume.serialization.LineDeserializer.readEvents(LineDeserializer.java:91)
  8. at org.apache.flume.client.avro.ReliableSpoolingFileEventReader.readEvents(ReliableSpoolingFileEventReader.java:241)
  9. at org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run(SpoolDirectorySource.java:224)
  10. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
  11. at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
  12. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
  13. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
  14. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  15. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  16. at java.lang.Thread.run(Thread.java:745)

然后让我重启agent才会把Spooling Directory Source所监控的目录下面的文件抽取到HDFS上去,感觉很莫名,网上搜索了一下这个错误的原因,很多都是说可能传输的文件字符集的原因,不以为然,因为我反复测试了一下,如果是字符集的原因,那么为什么我重启一下agent又可以成功的抽取数据了。

于是我想了想是不是由于同时读写导致的问题,因为我SCP文件过去,文件较大,需要一定的时间,而flume监测到有文件马上就开始逐行读取文件转化成EVENT发送到HDFS上去,这中间肯定存在同时读写一个文件了,然后就产生的这个异常问题?

目前仅仅是猜测,于是我修改了Spooling Directory Source的配置,加了这么一个配置:

tier1.sources.source1.ignorePattern = ^(.)*\\.tmp$

就是忽略监控目录下面的.tmp文件。然后我修改了scp的逻辑,拷贝到另一台主机上时,先命名为:原文件名.tmp(由于是.tmp文件,agent不会采集此类文件),等SCP执行成功之后,在mv这个.tmp文件,去掉.tmp后缀,这样agent又会抽取这个文件的数据了,通过这么一处理,就巧妙的避免了同时读写一个文件的问题。

脚本调整好之后,重新运行脚本,惊喜的发现成功了,这次agent没有挂掉,大功告成了。

总结:使用Spooling Directory Source的时候,一定要避免同时读写一个文件的情况。采用上面提到的方法就可以巧妙的避开这个问题。

flume学习(十):如何使用Spooling Directory Source相关推荐

  1. flume学习(十一):如何使用Spooling Directory Source

    最近在弄一个信令数据汇聚的事情,主要目的是把FTP上的信令数据汇聚到HDFS上去存储. 逻辑是这样的:把FTP服务器上的文件下载到一台主机上,然后SCP到另外一台主机上的Spooling Direct ...

  2. Flume使用Spooling Directory Source采集文件夹数据到hdfs

    一.需求说明 flume监控linux上一个目录(/home/flume_data)下进入的文件,并写入hdfs的相应目录下(hdfs://master:9000/flume/spool/%Y%m%d ...

  3. Spooling Directory Source 使用

    在使用exec来监听数据源虽然实时性较高,但是可靠性较差,当source程序运行异常或者linux命令中断,都会造成数据的丢失,再恢复正常运行之前,数据的完整性无法得到保证. Spooling Dir ...

  4. flume学习-含安装

    1.Flume是什么:Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统.Flume基于流式架构,灵活简单. Flume组成架构 下面我们来详细介绍一下F ...

  5. flume学习之一 是什么,主要应用在什么场景

    1.Flume是什么? Flume是Cloudera开发的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据.数据源可定制.可扩 ...

  6. Linux学习十五 DNS基础服务

    Linux学习十五 DNS基础服务 DNS服务基础 BIND 伯利克Internet 域名服务 主要执行程序:/usr/sbin/named 系统服务:named 默认端口: TCP/UDP 53 主 ...

  7. 鸿蒙Hi3861学习十九-DevEco Device Tool源码获取、编译、下载

    一.简介 在上一篇文章中,已经讲述了如何在Windows通过Remote SSH远程连接Linux下的DevEco Device Tool.这篇文章,来说一下关于源码的获取.编译与下载.建议先按照上一 ...

  8. Android OpenGL ES 学习(十二) - MediaCodec + OpenGL 解析H264视频+滤镜

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  9. 2017年深度学习十大趋势预测

    2017年深度学习十大趋势预测 本文作者曾经多次预测了技术发展的趋势,最近的一次预测是"2011年软件发展的趋势与预测".10项预言中,准确地命中了6项,比如JavaScript ...

  10. 强化学习(十九) AlphaGo Zero强化学习原理

    在强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)中,我们讨论了MCTS的原理和在棋类中的基本应用.这里我们在前一节MCTS的基础上,讨论下DeepMind的AlphaGo Zero强化学 ...

最新文章

  1. hbuilderX安装git插件→拉取线上gitlab项目
  2. JavaScript 工作原理之十一-渲染引擎及性能优化小技巧
  3. 利用栈完成中缀表达式到后缀表达式的转换
  4. Kubernetes 时代的安全软件供应链
  5. 《编译原理》实验教学大纲
  6. [原]让链接点击过后无虚线
  7. 合泰单片机市场占有率_holtek单片机图文全面详解
  8. python3的格式化用法_浅析python3字符串格式化format()函数的简单用法
  9. C++, “包含类的头文件”还是“对类进行前置声明”?
  10. 程序设计语言及其文法
  11. 如何设置ddns动态域名服务实现外网访问
  12. 初中数学可以用计算机吗,中学生利用手机电脑学习数学可行吗?
  13. php 获取照片信息,PHP读取照片信息
  14. 计算机专升研学院推荐,【解析】专升硕院校专业推荐
  15. 【软考】高级系统架构设计师学习经验分享
  16. 学习笔记:min-width和min-height
  17. 微信小老虎图标怎么弄?微信小老虎状态设置方法详细步骤
  18. 页面title加icon
  19. 民俗杂事丨为什么说出轨女人的丈夫是被戴了“绿帽子”?
  20. [kubernetes]-安装dashboard2.0并解决谷歌浏览器无法访问dashboard的问题

热门文章

  1. 阶段3 2.Spring_06.Spring的新注解_8 spring整合junit完成
  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_5_BufferedWriter_字符缓冲输出流...
  3. GUI学习之二十一——QSlider、QScroll、QDial学习总结
  4. 初始runtime(运行时机制)
  5. delphi const
  6. 数据结构——线性表的顺序表示
  7. 数据库系统load飙高问题解决思路(转)
  8. 2018.11.09 bzoj4773: 负环(倍增+floyd)
  9. 天津东软实训第八天------倒排索引
  10. Pig 实现关键词匹配