华为云对象存储OBSFlume对接OBS_云淘科技

概述

Flume是一个分布式的、可靠的和高可用的服务,用于收集、聚合以及移动大量日志数据,具体请参见Apache Flume。OBS在大数据场景中可以替代Hadoop系统中的HDFS服务。

注意事项

多sink写同一文件

OBS和HDFS在一致性保证上是有差别的:HDFS租约机制可以保证并发写同一个文件时不会产生一致性问题,但是OBS实现的HDFS协议不支持租约Lease机制(并发写同一个文件时将产生不可确定的状态),所以在flume场景下可以通过文件命名规则进行解决。

如sink文件的命名规则:hostname-sinkname作为文件的前缀,如果一个主机上部署了多个flume agent,不同的agent要有不同的sinkname。

flume日志配置

为了减少日志输出,在/opt/apache-flume-1.9.0-bin/conf/log4j.properties文件中增加配置:

log4j.logger.com.obs=ERROR

obsa写入时临时文件的目录配置

Flume写OBS时会先写入本地磁盘缓冲区,然后上传到OBS,如果对写入OBS有极致性能要求请选择高性能磁盘作为缓冲区,在core-site.xml文件中增加配置:

1
2
3
4
fs.obs.buffer.dir
xxx

对接步骤

以flume 1.9版本为例。

下载apache-flume-1.9.0-bin.tar.gz。
安装flume。

解压apache-flume-1.9.0-bin.tar.gz到/opt/apache-flume-1.9.0-bin目录。

已部署Hadoop的环境:无需额外操作,部署Hadoop请参见Hadoop对接OBS。

未部署Hadoop的环境:

将hadoop中的相关jar包复制到/opt/apache-flume-1.9.0-bin/lib目录下,包含hadoop-huaweicloud-xxx.jar。
将添加了OBS相关配置的core-site.xml文件复制到/opt/apache-flume-1.9.0-bin/conf目录下。

验证是否对接成功。

示例:以flume内置的StressSource为source,以file为channel,以obs为sink。

创建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/flume-data
agent.channels.c1.checkpointDir = /data/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-bucket/flume/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

执行以下命令,启动flume agent。

./bin/flume-ng agent -n agent -c conf/ -f conf/sink2obs.properties

父主题: 对接大数据组件

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家