OBS大数据解决方案-flume

举报
万广平 发表于 2020/08/08 16:54:52 2020/08/08
【摘要】 flume-obs

概述

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文件中增加如下配置:

<property>

<name>fs.obs.buffer.dir</name>

<value>xxx</value>

</property>

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。