Flume 使用 JindoSDK 写入 OSS§

环境要求§

在集群上已经部署 Flume,已部署 JindoSDK 6.0 以上版本。

JindoSDK 安装部署§

需要在 Flume 节点进行配置。在每个节点 Flume 根目录下的 lib 文件夹,放置 JindoSDK。

下载并解压最新的 tar.gz 包 jindosdk-x.y.z.tar.gz(x.y.z表版本号), (下载页面)

cp jindosdk-x.y.z/lib/*.jar  $FLUME_HOME/jars/

配置§

Flume Sink 配置§

# 配置OSS Sink。your_bucket填写为已开启OSS-HDFS服务的Bucket。
xxx.sinks.oss_sink.hdfs.path = oss://${your_bucket}/flume_dir/%Y-%m-%d/%H

# 写入Flume事务中最大的event数量。推荐每次Flush的量在32 MB以上,避免Flush过小影响整体性能以及产生大量的staging文件。
# batchSize单位为event数量(即日志行数),设置时需要先评估event平均大小(例如200 Byte),假设每次Flush的大小预期为32 MB,则batchSize约为160000(32 MB / 200 Byte)。
xxx.sinks.oss_sink.hdfs.batchSize = 100000

...
xxx.sinks.oss_sink.hdfs.round = true
xxx.sinks.oss_sink.hdfs.roundValue = 15
xxx.sinks.oss_sink.hdfs.Unit = minute
xxx.sinks.oss_sink.hdfs.filePrefix = your_topic
xxx.sinks.oss_sink.rollSize = 3600
xxx.sinks.oss_sink.threadsPoolSize = 30
...

OSS-HDFS 场景 core-sites.xml 配置§

推荐每次 Flush 的量在 32 MB以上,避免 Flush 过于频繁影响整体性能以及产生小块。

<configuration>

    <property>
        <!-- false表示不执行hflush,仅依靠close来确保执行文件写入,不推荐关闭 -->
        <name>fs.oss.hflush.enable</name>
        <value>true</value>
    </property>

    <property>
        <!-- 当前文件执行hflush的次数达到该数量后,才触发一次真正的flush(0表示不根据该数量来触发Flush) -->
        <name>fs.oss.hflush.interval.count</name>
        <value>0</value>
    </property>

    <property>
        <!-- 当前文件写入达到该大小后,才触发一次真正的flush(0表示不根据写入大小来触发Flush),单位:字节-->
        <name>fs.oss.hflush.interval.size</name>
        <value>0</value>
    </property>
</configuration>

ps: 如 fs.oss.hflush.interval.countfs.oss.hflush.interval.size 均不为0,则两个条件均满足时才执行hflush。