数据湖实操讲解【OSS 访问加速】第八讲:Flume 高效写入 OSS

简介: 数据湖 JindoFS+OSS 实操干货 36讲 每周二16点准时直播!扫文章底部二维码入钉群,线上准时观看~ Github链接: https://github.com/aliyun/alibabacloud-jindofs

本期导读 :【OSS 访问加速】第八讲


主题:Flume 高效写入 OSS


讲师:焱冰,阿里巴巴计算平台事业部 EMR 技术专家


内容框架:

  • Flume 简介
  • Flume 常用组件
  • Flume 使用 JindoFS SDK
  • Flume 实战 JindoFS SDK


直播回放链接:(7/8讲)

https://developer.aliyun.com/live/246851



一、Flume 简介

Apache Flume 简介

  • Apache Flume 是 Apache 基金会的一个顶级项目,以下简称 Flume。
  • Flume 是一个分布式、可靠、高可用的系统,支持从不同数据源高效地收集、聚合、迁移大量日志数据,聚合到中心化的数据存储服务。
  • Flume 使用最多的场景是日志收集,也可以通过定制 Source 来传输其他不同类型的数据。
  • E-MapReduce 从 3.16.0 版本开始支持 Apache Flume。


image.png


Flume 中的概念及术语

image.png


一个 Flume Agent 由 Source、Channel、Sink 组成。


Event

  • 数据流通过 Flume Agent 的基本单位。
  • Event 由一个装载字节数组负载(Payload)和一个可选的字符串属性集合组成。

image.png


Source

  • 数据源收集器,从外部数据源收集数据,并发送到 Channel。


Channel

  • Source 和 Sink 之间的缓冲队列。

Sink

  • 从 Channel 中获取 Event ,并将以事务的形式 commit 到外部存储中。一旦事务 commit 成功,该 Event 会从 Channel 中移除。



二、Flume 常用组件


常用组件介绍

常见 Source

  • Avro Source:通过监听 Avro 端口获取 Avro Client 发送的事件。Avro 是 Hadoop 提供的一种协议,用于序列化反序列化数据。
  • Exec Source:通过监听命令行输出获取数据,如 tail -f /var/log/messages。
  • NetCat TCP Source: 监听指定 tcp 端口获取数据。类似的还有 Netcat UDP Source。
  • Taildir Source: 监控目录下的多个文件,会记录偏移量,不会丢失数据,最为常用。


常见 Channel

  • Memory Channel: 缓存到内存中,性能高,最为常用。
  • File Channel: 缓存到文件中,会记录 checkpoint 和 data 文件,可靠性高,但性能较差。
  • JDBC Channel: 缓存到关系型数据库中。
  • Kakfa Channel:通过 Kafka 来缓存数据。


常见 Sink

  • Logger Sink: 用于测试
  • Avro Sink: 转换成 Avro Event,主要用于连接多个 Flume Agent。
  • HDFS Sink: 写入 HDFS,最为常用。
  • Hive sink: 写入 Hive 表或分区,使用 Hive 事务写 events。
  • Kafka sink: 写入 Kafka。


文档

  • 官方文档:
    https://flume.apache.org/documentation.html
  • 中文文档:
    https://flume.liyifeng.org/


三、Flume 使用 JindoFS SDK


Flume 使用 JindoFS SDK 写入 OSS

环境要求

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


为什么需要使用 JindoFS SDK 写入 OSS

Flume 通过 flush() 调用保证事务性写入,OSS 本身不支持 Flush 功能,通过 JindoFS SDK 写入 OSS,虽然不能让 flush 后的数据立刻可见,但是可以保证 flush() 后的数据不丢失,Flume 作业失败后,可以使用 JindoFS 命令恢复 flush 过的数据。


配置示例

xxx.sinks.oss_sink.hdfs.path = oss://${your_bucket}/flume_dir/%Y-%m-%d/%H 
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

- 文档链接⭐

https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/flume/jindofs_sdk_on_flume_for_oss.md


在 EMR 集群内对 Flush 文件恢复

jindo jfs -recover [-R]
                   [-flushStagingPath {flushStagingPath}]
                   [-accessKeyId ${accessKeyId}]
                   [-accessKeySecret ${accessKeySecret}]
                   <path>

注:如需递归恢复(-R),建议先停止 Flume 任务,避免 Flume 任务运行异常。


在 EMR 集群外对 Flush 文件恢复

JindoOssFileSystem jindoFileSystem = (JindoOssFileSystem) fs; 
boolean isFolder = true; 
jindoFileSystem.recover(path, isFolder);

- 文档链接

https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/flume/jindofs_sdk_on_flume_for_oss.md


四、Flume 实战 JindoFS SDK


自建Flume 使用 JindoFS SDK 压缩写入 OSS

环境准备

Hadoop-2.8.5


下载

Flume-1.9.0:wgethttps://downloads.apache.org/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz


添加依赖

cd $HADOOP_HOME/share/hadoop/httpfs/tomcat/webapps/webhdfs/WEB-INF/lib
cp commons-configuration-1.6.jar $FLUME_HOME/lib
cp hadoop-auth-2.8.5.jar $FLUME_HOME/lib
cp hadoop-common-2.8.5.jar $FLUME_HOME/lib
cp hadoop-hdfs-2.8.5.jar $FLUME_HOME/lib
cp commons-io-2.4.jar $FLUME_HOME/lib
cp htrace-core4-4.0.1-incubating.jar $FLUME_HOME/lib
wget https://smartdata-binary.oss-cn-shanghai.aliyuncs.com/jindofs-sdk-3.5.0.jar -O 
$FLUME_HOME/lib/jindofs-sdk-3.5.0.jar

配置 JindoFS SDK

https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/jindofs_sdk_how_to_hadoop.md


配置

a1.sources = r1

a1.sinks = k1

a1.channels = c1


a1.sources.r1.type = exec

a1.sources.r1.command = tail -F /tmp/test.log


a1.channels.c1.type = memory

a1.channels.c1.capacity = 10000

a1.channels.c1.transactionCapacity = 20


a1.sinks.k1.type = hdfs

a1.sinks.k1.hdfs.path = oss://yanbin-hd2-test/%Y-%m-%d/%H

a1.sinks.k1.hdfs.filePrefix = test

a1.sinks.k1.hdfs.batchSize = 20

a1.sinks.k1.hdfs.codeC = gzip

a1.sinks.k1.hdfs.fileType = CompressedStream

a1.sinks.k1.rollCount = 20

a2.sinks.k1.hdfs.minBlockReplicas = 1


a1.sources.r1.channels = c1

a1.sinks.k1.channel = c1


日志仿真

while true; do echo `date` >> /tmp/test.log; sleep 1; done

Flume 启动

bin/flume-ng agent --name a1 -c conf -f conf/flume-exec-oss.conf  -Dflume.root.logger=INFO,console

结果

image.png


直接观看第四课(7/8讲)视频回放,获取实例讲解~

https://developer.aliyun.com/live/246851





Github链接:

https://github.com/aliyun/alibabacloud-jindofs


不错过每次直播信息、探讨更多数据湖 JindoFS+OSS 相关技术问题,欢迎扫码加入钉钉交流群!

image.png



相关文章
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
366 1
|
存储 对象存储 SQL
【获奖名单公示】Hologres实时湖仓分析挑战赛
5分钟快速使用Hologres实时湖仓能力,无需移动数据,直接加速读取存储于数据湖OSS上的Hudi、Delta、Paimon等格式类型的数据
【获奖名单公示】Hologres实时湖仓分析挑战赛
|
存储 分布式计算 关系型数据库
AnalyticDB MySQL — Spark 助力在OSS上构建低成本数据湖
阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高可靠的云存储服务。通过和OSS团队的深入合作,AnalyticDB MySQL 的Spark能力 更好发挥了云原生数据湖方案的优势,本文为你详细解读!
|
SQL 弹性计算 分布式计算
使用EMR+DLF+OSS-HDFS进行数据湖分析
本实验通过使用EMR,搭建EMR集群,对OSS-HDFS进行数据湖分析
|
存储 分布式计算 关系型数据库
AnalyticDB MySQL Spark 助力在OSS上构建低成本数据湖
借助AnalyticDB MySQL Spark 可以轻松处理OSS上PB级数据,助力企业构建低成本数据湖
|
缓存 对象存储 CDN
如何使用CDN给OSS做加速详解
意义 用户直接访问OSS资源,速度会受到OSS下行带宽以及Bucket地域的限制,若通过CDN+OSS的方式进行访问,带宽上限更高,并且可以将OSS的资源缓存至就近的CDN节点,通过CDN节点进行分发,可以缩短网络传输距离,加快用户的调用速度;所有下行走的是CDN的流量,而CDN的下行流量单价会比OSS的下行流量单价更低,可以有效地节省流量成本。
6295 0
|
10月前
|
存储 人工智能 Cloud Native
阿里云渠道商:OSS与传统存储系统的差异在哪里?
本文对比传统存储与云原生对象存储OSS的架构差异,涵盖性能、成本、扩展性等方面。OSS凭借高持久性、弹性扩容及与云服务深度集成,成为大数据与AI时代的优选方案。
|
存储 运维 安全
阿里云国际站OSS与自建存储的区别
阿里云国际站对象存储OSS提供海量、安全、低成本的云存储解决方案。相比自建存储,OSS具备易用性强、稳定性高、安全性好、成本更低等优势,支持无限扩展、自动冗余、多层防护及丰富增值服务,助力企业高效管理数据。
|
存储 域名解析 前端开发
震惊!不买服务器,还可以用阿里云国际站 OSS 轻松搭建静态网站
在数字化时代,利用阿里云国际站OSS可低成本搭建静态网站。本文详解OSS优势及步骤:创建Bucket、上传文件、配置首页与404页面、绑定域名等,助你快速上线个人或小型业务网站,操作简单,成本低廉,适合初学者与中小企业。

热门文章

最新文章