OBS大數據解決方案-flume
概述
Flume 是一個分布式的、可靠的和高可用的服務,用于收集、聚合以及移動大量日志數據。具體請參見:http://flume.apache.org/
OBS是華為云的對象存儲服務,OBS支持S3對象存儲協議,同時也支持HDFS協議,在大數據場景中可以替代hadoop系統中的HDFS服務,本文用于描述flume如何對接使用OBS。
OBS服務有對象桶和并行文件桶兩種選擇,在大數據場景下建議選擇并行文件桶。
操作步驟
以flume 1.9版本為例
1. 下載flume
http://flume.apache.org/download.html
2. 安裝flume:支持寫數據到OBS
(1)解壓apache-flume-1.9.0-bin.tar.gz到apache-flume-1.9.0-bin目錄
(2)在部署了Hadoop的環境中(設置了HADOOP_HOME等環境變量)
按照下述文檔配置hadoop環境
https://github.com/huaweicloud/obsa-hdfs/blob/master/release/doc/%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1OBSA-HDFS%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.pdf
(3)在沒有部署Hadoop的環境中
下載hadoop并按照下述文檔配置hadoop環境
https://github.com/huaweicloud/obsa-hdfs/blob/master/release/doc/%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1OBSA-HDFS%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.pdf
將hadoop中的相關jar包復制到 apache-flume-1.9.0-bin/lib 目錄下,包含hadoop-huaweicloud-xxx.jar
將配置好的core-site.xml文件復制到flume根目錄/conf目錄下
3. 示例
以flume內置的StressSource為source,以file為channel,以obs為sink
(1)創建flume配置文件:sink2obs.properties
agent.sources = r1
agent.channels = c1
agent.sinks = k1
agent.sources.r1.type = org.apache.flume.source.StressSource
agent.sources.r1.channels = c1
agent.sources.r1.size = 1024
agent.sources.r1.maxTotalEvents = 100000
agent.sources.r1.maxEventsPerSecond = 10000
agent.sources.r1.batchSize=1000
agent.sources.r1.interceptors = i1
agent.sources.r1.interceptors.i1.type = host
agent.sources.r1.interceptors.i1.useIP = false
agent.channels.c1.type = file
agent.channels.c1.dataDirs = /data/agent/agent/flume-data
agent.channels.c1.checkpointDir = /data/agent/agent/flume-checkpoint
agent.channels.c1.capacity = 500000
agent.channels.c1.transactionCapacity = 50000
agent.sinks.k1.channel = c1
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.useLocalTimeStamp = true
agent.sinks.k1.hdfs.filePrefix = %{host}_k1
agent.sinks.k1.hdfs.path = obs://obs桶名/flume/dc/create_time=%Y-%m-%d %H-%M
agent.sinks.k1.hdfs.fileType = DataStream
agent.sinks.k1.hdfs.writeFormat = Text
agent.sinks.k1.hdfs.rollSize = 0
agent.sinks.k1.hdfs.rollCount = 1000
agent.sinks.k1.hdfs.rollInterval = 0
agent.sinks.k1.hdfs.batchSize = 1000
agent.sinks.k1.hdfs.round = true
agent.sinks.k1.hdfs.roundValue = 10
agent.sinks.k1.hdfs.roundUnit = minute
(2)啟動flume agent
./bin/flume-ng agent -n agent -c conf/ -f conf/sink2obs.properties
注意事項
1. 多sink寫同一文件
OBS和HDFS在一致性保證上是有差別的:
HDFS租約機制可以保證并發寫同一個文件時不會產生一致性問題,但是OBS實現的HDFS協議不支持租約機制(并發寫同一個文件時將產生不可確定的狀態),所以在flume場景下可以通過文件命名規則進行解決,例如
sink文件的命名規則:hostname-sinkname作為文件的前綴,如果一個主機上部署了多個flume agent,不同的agent要有不同的sinkname
2. flume日志配置
為了減少無謂的日志輸出,可以在flume根目錄/conf目錄下的log4j.properties文件中增加如下配置:
log4j.logger.org.apache.hadoop.fs.obs=ERROR
log4j.logger.com.obs=ERROR
3. obsa寫入時臨時文件的目錄配置
Flume寫obs時會先寫入本地磁盤緩沖區,然后上傳到obs,如果對寫入obs有極致性能要求請選擇高性能磁盤作為緩沖區,在core-site.xml文件中增加如下配置:
大數據 對象存儲服務 OBS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。