flume的sink端檔案滾動配置項不起作用
2.通過原始碼分析得出什麼原因?
3.該如何解決flume小檔案?
本人在測試hdfs的sink,發現sink端的檔案滾動配置項起不到任何作用,配置如下:
[Bash shell] 純文字檢視 複製程式碼 ?
1 2 3 4 5 6 7 8 9 |
a1.sinks.k1. type =hdfs
a1.sinks.k1.channel=c1
a1.sinks.k1.hdfs.useLocalTimeStamp= true
a1.sinks.k1.hdfs.path=hdfs: //192 .168.11.177:9000 /flume/events/ %Y/%m/%d/%H/%M
a1.sinks.k1.hdfs.filePrefix=XXX
a1.sinks.k1.hdfs.rollInterval=60
a1.sinks.k1.hdfs.rollSize=0
a1.sinks.k1.hdfs.rollCount=0
a1.sinks.k1.hdfs.idleTimeout=0
|
這裡配置的是60秒,檔案滾動一次,也就每隔60秒,會新產生一個檔案【前提,flume的source端有資料來】
這裡注意
[Bash shell] 純文字檢視 複製程式碼 ?
1 |
useLocalTimeStamp
|
這個屬性的目的就是相當於時間戳的攔截器,否則%Y 等等這些東西都識別不了
要麼用上面這個屬性,要麼用時間戳攔截器。
但是當我啟動flume的時候,執行十幾秒,不斷寫入資料,發現hdfs端頻繁的產生檔案,每隔幾秒就有新檔案產生
而且在flume的日誌輸出可以頻繁看到這句:
[WARN] Block Under-replication detected. Rotating file.
只要有這句,就會產生一個新的檔案
意思就是檢測到複製塊正在滾動檔案,結合原始碼看下:
[Java] 純文字檢視 複製程式碼 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 |
private
boolean
shouldRotate() {
boolean
doRotate = false ;
if
(writer.isUnderReplicated()) {
|