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

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

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.
java.nio.charset.MalformedInputException: Input length = 1at java.nio.charset.CoderResult.throwException(CoderResult.java:277)at org.apache.flume.serialization.ResettableFileInputStream.readChar(ResettableFileInputStream.java:195)at org.apache.flume.serialization.LineDeserializer.readLine(LineDeserializer.java:134)at org.apache.flume.serialization.LineDeserializer.readEvent(LineDeserializer.java:72)at org.apache.flume.serialization.LineDeserializer.readEvents(LineDeserializer.java:91)at org.apache.flume.client.avro.ReliableSpoolingFileEventReader.readEvents(ReliableSpoolingFileEventReader.java:241)at org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryRunnable.run(SpoolDirectorySource.java:224)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)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采集文件夹数据到hdfs

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

  2. Spooling Directory Source 使用

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

  3. flume学习-含安装

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

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

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

  5. OpenCV与图像处理学习十一——分水岭算法(含代码)

    OpenCV与图像处理学习十一--分水岭算法(含代码) 一.分水岭算法概要 二.分水岭算法步骤 三.代码应用 一.分水岭算法概要 任意的灰度图像可以被看做是地质学表面,高亮度的地方是山峰,低亮度的地方 ...

  6. PyTorch框架学习十一——网络层权值初始化

    PyTorch框架学习十一--网络层权值初始化 一.均匀分布初始化 二.正态分布初始化 三.常数初始化 四.Xavier 均匀分布初始化 五.Xavier正态分布初始化 六.kaiming均匀分布初始 ...

  7. 《从0到1学习Flink》—— 如何自定义 Data Source ?

    前言 在 <从0到1学习Flink>-- Data Source 介绍 文章中,我给大家介绍了 Flink Data Source 以及简短的介绍了一下自定义 Data Source,这篇 ...

  8. C1认证学习十一(常用网络命令以及端口)

    C1认证学习十一(常用网络命令以及端口) 任务背景 工程师们天天在使用计算机做软件开发,有时候出了问题需要来确定到底是自己的问题,还是网络的问题,所以需要学习并且了解一些常见的计算机的命令以及开发中常 ...

  9. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

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

最新文章

  1. JRE、JVM和JDK
  2. Android 异步加载图片分析
  3. Java:网络编程之UDP的使用
  4. python中rim的用法_Python笔记(六)_函数
  5. java引用传递_理解Java中的引用传递和值传递
  6. 【转载】stackoverflow 上关于 rebar 的讨论
  7. 理想汽车2021年Q4盈利2.955亿元 CTO王凯离职
  8. 抖音不服诉腾讯管辖权被转至深圳中院 上诉获受理
  9. 【零基础学Java】—Java 日期时间(三十二)
  10. mysql简单人事管理系统_简易人事管理系统(pyqt5+mysql)
  11. Android ndk下载和环境配置
  12. 计算机模拟仿真技术的功能,浅谈虚拟仿真技术
  13. CSDN21天学习挑战赛——Python常用标准库概述
  14. [jzoj 1285] 奶酪厂 {贪心}
  15. 电脑 耳机播放声音,左右耳朵不平衡解决方法
  16. 百度发难前员工王劲,第一回合是这样的 | 梳理
  17. oracle求数据走势,趋势分析
  18. 无单位收入证明怎么开?
  19. 嵌入式软件工程师职业路线
  20. GSM/GPRS模组SIM800C

热门文章

  1. 如何提高心理承受能力?
  2. 2012年最有价值的Android开发精品文章荟萃【800篇】
  3. 学习Java用什么软件?
  4. 短视频平台开发,首先要搭建短视频框架
  5. TensorFlow技术内幕(八):模型优化之XLA(下)
  6. TensorFlow学习--LeNet5神经网络
  7. Vue ElementUI 实现 Table 多列数据 checkBox选择框
  8. 关于bootstrap-table冻结列生成多个冻结表头和表格主体的问题
  9. Java练习题第十九期:另类加法
  10. 颠覆性AI程序:人工智能如何推动天文学创新?