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环境
(3)在没有部署Hadoop的环境中
-
下载hadoop并按照下述文档配置hadoop环境
-
将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文件中增加如下配置:
<property>
<name>fs.obs.buffer.dir</name>
<value>xxx</value>
</property>
- 点赞
- 收藏
- 关注作者
评论(0)