1. 程式人生 > >flume采集數據報錯問題解決

flume采集數據報錯問題解決

lin mem puts output sta 必須 dex 采集 數據報

在一次實驗過程中,使用flume 1.7采集本地的數據到hdfs文件系統時,由於配置文件不合理,導致出錯。錯誤如下:

[WARN - org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:611)] Caught exception
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1281)
at java.lang.Thread.join(Thread.java:1355)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.closeResponder(DFSOutputStream.java:609)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.endBlock(DFSOutputStream.java:370)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)

Flume配置文件如下:

a1.sources=r1
a1.sinks=k1
a1.channels=c1

## describe sources
a1.sources.r1.type=spooldir
a1.sources.r1.spoolDir=/home/hadoop/data/flumeData
a1.sources.r1.fileHeader = false
a1.sources.r1.deserializer.maxLineLength=10240

## describe channel
a1.channels.c1.type=memory

##describe sinks
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=/hadoopProject01/%y-%m-%d/
a1.sinks.k1.hdfs.filePrefix = beicai
a1.sinks.k1.hdfs.fileType=DataStream
#每個批次刷新到hdfs的events的數據
a1.sinks.k1.hdfs.batchSize =10
#如果設置為0,則表示不根據events數據來滾動文件
a1.sinks.k1.hdfs.rollCount= 0
#當臨時文件達到該大小的時候(單位為bytes)時,滾動成目標文件
a1.sinks.k1.hdfs.rollSize=52428800
#如果設置為0,則表示不根據時間來滾動文件
a1.sinks.k1.hdfs.rollInterval=0
#是否啟用時間上的"舍棄"
a1.sinks.k1.hdfs.round = false
#5分鐘後滾動為一個文件
a1.sinks.k1.hdfs.roundValue = 5
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.useLocalTimeStamp=true

#bind
a1.sources.r1.channels =c1
a1.sinks.k1.channel=c1

本次采用的是直接監控目錄下文件的變化,如果有新文件上傳到此目錄就采集。

處理結果:

因為channel是Memory 類型,所以如果文件很大,就必須保證內存足夠,否則發生錯誤很正常。

還有就是重新調整一下,a1.sinks.k1.hdfs.rollSize=52428800
rollSize可以調小一些。

flume采集數據報錯問題解決