Flume之HDFS Sink使用案例

前言

  • 操作系統:CentOS 7
  • Java版本:1.8.0_221
  • Flume版本:1.8.0
  • HDFS版本:2.7.7
  • Flume agent配置:Netcat TCP Source、Memory Channel、HDFS Sink

具體步驟

a) 拷貝Hadoop相關jar包至flume/lib/路徑下

hadoop-2.7.7/share/路徑下找到以下對應jar包,並將其拷貝至flume/lib/路徑下。Flume啓動時,會將此路徑添加至ClassPath
commons-configuration-1.6.jar
commons-io-2.4.jar
hadoop-auth-2.7.7.jar
hadoop-common-2.7.7.jar
hadoop-hdfs-2.7.7.jar
htrace-core-3.1.0-incubating.jar

b) 根據使用場景配置properties文件

# 用於從netcat指定端口收集數據最終輸出到HDFS中

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

# Sources
# a1.sources.r1
# 配置source類型/綁定主機ip/端口號
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444

# Sinks
# a1.sinks.k1
a1.sinks.k1.type = hdfs
# 設置hdfs文件路徑,同時並設置了按照日期創建文件夾
a1.sinks.k1.hdfs.path = /flume/logs/%Y-%m-%d/%H-%M-%S
# 設置flume創建的hdfs文件前綴
a1.sinks.k1.hdfs.filePrefix = logs_%Y-%m-%d

# 以下三組參數的配置用於控制flume在hdfs中生成文件的滾動方式
# 滿足以下三者中任何一個條件都會新生成hdfs文件
# 設置文件滾動的時間間隔,單位(second),置0表示關閉
a1.sinks.k1.hdfs.rollInterval = 10
# 設置文件滾動的最大size閾值,由於是hdfs sink故最好設置成Block Size的倍數
# 本次實驗的hadoop版本爲2.7.7(2.7.3之後默認Block Size爲128MB,之前爲64MB)
# 單位(bytes),置0表示關閉
a1.sinks.k1.hdfs.rollSize = 134217700
# 設置滾動文件存儲的最大Event個數
# 此參數一般設置爲0,即關閉,除非有嚴格生產需求並且知道Event大小能夠自主控制
a1.sinks.k1.hdfs.rollCount = 0

# 設置flume每批次刷到hdfs中的Event個數(超過一定時長也會進行刷新,並非要等滿一批次)
a1.sinks.k1.hdfs.batchSize = 100

# 設置hdfs文件格式,目前只支持(SequenceFile/DataStream/CompressedStream)
# CompressedStream類型需要配合hdfs.codeC參數來指定具體的壓縮方式
# SequenceFile表示按照HDFS序列文件SequenceFile的方式進行壓縮
# DataStream則表示不進行壓縮
a1.sinks.k1.hdfs.fileType = DataStream

# 以下三組參數的配置配合轉義序列(如%y %m %d %H %M %S等)能夠自定義時間輪轉最小刻度
# 設置hdfs時間向下取整
# 設置向下取整之後文件夾將按照一定時間大小的刻度進行創建文件夾
# 否則都是按照之前設置每分鐘進行文件夾的創建
a1.sinks.k1.hdfs.round = true
# 設置hdfs時間向下取整的最小單元倍數
a1.sinks.k1.hdfs.roundValue = 30
# 設置hdfs時間向下取整的最小單位
a1.sinks.k1.hdfs.roundUnit = second

# 設定是否使用本地時間戳,默認爲false(即使用Event的Header中的時間戳)
# 本次實驗中Event的Header爲空,需要使用本地時間戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true


# Channels
# 定義a2的channerls.c1的類型爲memory,即使用內存作爲緩存/最多緩存的Event個數/單次傳輸的Event個數
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100


# Bind
# 注意:source可以綁定多個channel,但是sink只能綁定單個channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

c) 使用此配置文件啓動agent

啓動腳本前保證HDFS集羣正常運行
[tomandersen@hadoop101 flume-1.8.0]$ call-cluster.sh jps
----------hadoop103----------
18272 Jps
17794 DataNode
17987 NodeManager
18105 JobHistoryServer
17868 SecondaryNameNode
----------hadoop102----------
17826 DataNode
18457 Jps
17950 ResourceManager
18079 NodeManager
----------hadoop101----------
10321 DataNode
10785 Jps
10619 NodeManager
10205 NameNode

----------execute "jps" in cluster takes 6 seconds----------

[tomandersen@hadoop101 flume-1.8.0]$
在Flume安裝路徑下通過bin/flume-ng腳本啓動agent
./bin/flume-ng agent -n a1 -c conf/ -f job/netcat-memory-hdfs.properties

d) 發送測試數據並檢查HDFS中是否成功上傳對應數據

發送測試數據
[tomandersen@hadoop101 ~]$ echo Hello World! | nc localhost 44444
OK
[tomandersen@hadoop101 ~]$ 
[tomandersen@hadoop101 ~]$ 
進入NameNode Web UI頁面查看HDFS文件

查看HDFS文件

下載並查看查看HDFS文件內容

查看HDFS文件


End~

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