使用Flume實時讀取目錄文件到HDFS

今天來剛學完Flume,來做一個簡單的入門案例:使用Flume實時讀取本地目錄的文件到HDFS。即本地的目錄有增加時就會把文件上傳到HDFS。
使用Flume採集數據的步驟就是創建配置文件,然後啓動監控就可以監聽了。
創建配置文件
這個配置文件是要自己創建的,後綴爲.conf。名字可以自己取,但是也要本着見名知意的原則。所以我命名爲flume-dir-hdfs.conf。這個文件一般放在flume的job目錄下。flume的每一個任務就要創建一個配置文件。
在這裏插入圖片描述
創建配置文件:

vim flume-dir-hdfs.conf

添加如下內容:

a3.sources = r3
a3.sinks = k3
a3.channels = c3

# Describe/configure the source
a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir = /opt/module/flume/upload
a3.sources.r3.fileSuffix = .COMPLETED
a3.sources.r3.fileHeader = true
#忽略所有以.tmp結尾的文件,不上傳
a3.sources.r3.ignorePattern = ([^ ]*\.tmp)

# Describe the sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://hadoop01:9000/flume/upload/%Y%m%d/%H
#上傳文件的前綴
a3.sinks.k3.hdfs.filePrefix = upload-
#是否按照時間滾動文件夾
a3.sinks.k3.hdfs.round = true
#多少時間單位創建一個新的文件夾
a3.sinks.k3.hdfs.roundValue = 1
#重新定義時間單位
a3.sinks.k3.hdfs.roundUnit = hour
#是否使用本地時間戳
a3.sinks.k3.hdfs.useLocalTimeStamp = true
#積攢多少個Event才flush到HDFS一次
a3.sinks.k3.hdfs.batchSize = 100
#設置文件類型,可支持壓縮
a3.sinks.k3.hdfs.fileType = DataStream
#多久生成一個新的文件
a3.sinks.k3.hdfs.rollInterval = 60
#設置每個文件的滾動大小大概是128M
a3.sinks.k3.hdfs.rollSize = 134217700
#文件的滾動與Event數量無關
a3.sinks.k3.hdfs.rollCount = 0

# Use a channel which buffers events in memory
a3.channels.c3.type = memory
a3.channels.c3.capacity = 1000
a3.channels.c3.transactionCapacity = 100

# Bind the source and sink to the channel
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3

配置文件詳解:
在這裏插入圖片描述
a3即爲Agent,r3、k3和c3分別爲Agent裏的組件source,sink和channel命名。

在這裏插入圖片描述
以上即爲對source的配置,指定監控的路徑還有忽略哪些文件等。

在這裏插入圖片描述
以上即爲對sink的配置,指定HDFS的路徑還有很多屬性。

在這裏插入圖片描述
這個是配置channel,就指定channel的類型。

在這裏插入圖片描述最後就是把source、channel和sink連起來即可。

創建監聽目錄

mkdir upload

啓動監控命令

bin/flume-ng agent --conf conf/ --name a3 --conf-file job/flume-dir-hdfs.conf

在這裏插入圖片描述
現在已經啓動監聽了。

測試
現在我複製了一個文件到監聽目錄upload裏面:
在這裏插入圖片描述
接下來查看HDFS上的情況:
在這裏插入圖片描述
文件上傳成功,說明監聽成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章