1、數據倉庫架構html
2、flume收集數據存儲到hdfssql
文檔:http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hdfs-sink
3、監控日誌目錄日誌數據,實時抽取之hdfs系統上-實驗apache
一、Source:Spooling Directory 安全
在使用exec來監聽數據源雖然實時性較高,可是可靠性較差,當source程序運行異常或者Linux命令中斷都會形成數據丟失, 在恢復正常運行以前數據的完整性沒法獲得保障。 Spooling Directory Paths經過監聽某個目錄下的新增文件,並將文件的內容讀取出來,實現日誌信息的收集。實際生產中會結合log4j來使用。 被傳輸結束的文件會修改後綴名,添加.COMPLETED後綴(可修改)。
二、架構
監控目錄 >日誌目錄,抽取完整的日誌文件,寫的日誌文件不抽取 使用FileChannel >本地文件系統緩衝,比內存安全性更高 數據存儲HDFS >存儲對應hive表的目錄或者hdfs目錄
三、配置flume agentapp
##agent 配置文件:flume-app.conf 以下:
# The configuration file needs to define the sources,
# the channels and the sinks.ide
####define agent
a3.sources = r3
a3.channels = c3
a3.sinks = k3oop
###define sources
a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir = /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6/spoollogs
a3.sources.r3.ignorePattern = ^(.)*\.log$
a3.sources.r3.fileSuffix = .delete性能
###define channel
a3.channels.c3.type = file
a3.channels.c3.checkpointDir = /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6/filechannel/checkpoint
a3.channels.c3.dataDirs = /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6/filechannel/dataui
###define sink
a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://hadoop-senior.ibeifeng.com:8020/user/root/flume/splogs/
a3.sinks.k3.hdfs.fileType = DataStream
a3.sinks.k3.hdfs.writeFormat = Text
a3.sinks.k3.hdfs.batchSize = 10
###bind the soures and sink to the channel
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3
對agent配置文件的解釋:
##define sources字段: type : spooldir //經過監聽某個目錄下的新增文件,並將文件的內容讀取出來,實現日誌信息的收集 spoolDir //從哪一個目錄中讀取數據 ignorePattern //排除哪些文件,用正則匹配 fileSuffix //給讀取完的文件,加上一個後綴名 ##define channel type = file //channel存到文件中,而不是內存,這樣不易丟失數據 checkpointDir //存儲檢查點文件的存放目錄 dataDirs //逗號分隔的目錄列表,用於存儲日誌文件。在單獨的磁盤上使用多個目錄能夠提升文件通道的性能 ##define sink type = hdfs //抽取完的數據存到hdfs上 hdfs.path //在hdfs上的存儲路徑 hdfs.fileType //hdfs上的存儲的文件格式,DataStream不會壓縮輸出文件 writeFormat //序列文件記錄的格式,應該設置爲Text,不然這些文件不能被Apache Impala(孵化)或Apache Hive讀取 batchSize //number of events written to file before it is flushed to HDFS
四、運行agent
##先準備一些數據 mkdir -p /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6/spoollogs #建立待抽取數據存放目錄 [root@hadoop-senior spoollogs]# ls #準備三個數據文件 emp.txt hivef.log hivef.sql mkdir -p /opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6/filechannel/{checkpoint,data} #建立channel數據存放目錄 bin/hdfs dfs -mkdir -p /user/root/flume/splogs/ #在hdfs上建立此目錄 ##運行agent bin/flume-ng agent \ -c conf \ -n a3 \ -f conf/flume-app.conf \ -Dflume.root.logger=DEBUG,console ##此時查看/opt/cdh-5.3.6/flume-1.5.0-cdh5.3.6/spoollogs中的數據,emp.txt hivef.sql後綴加上了.delete ##hivef.log沒有加後綴,由於咱們排除了.log的文件 [root@hadoop-senior spoollogs]# ls emp.txt.delete hivef.log hivef.sql.delete ##查看hdfs上有沒有數據,已經有了 [root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -ls -R /user/root/flume/splogs/ -rw-r--r-- 3 root supergroup 463 2019-05-09 09:37 /user/root/flume/splogs/FlumeData.1557365835585 -rw-r--r-- 3 root supergroup 228 2019-05-09 09:37 /user/root/flume/splogs/FlumeData.1557365835586