剖析大数据平台的数据采集

数据采集的设计,几乎完全取决于数据源的特性,毕竟数据源是整个大数据平台蓄水的上游,数据采集不过是获取水源的管道罢了。

在数据仓库的语境下,ETL基本上就是数据采集的代表,包括数据的提取(Extract)、转换(Transform)和加载(Load)。在转换的过程中,需要针对具体的业务场景对数据进行治理,例如进行非法数据监测与过滤、格式转换与数据规范化、数据替换、保证数据完整性等。

但是在大数据平台下,由于数据源具有更复杂的多样性,数据采集的形式也变得更加复杂而多样,当然,业务场景也可能变得迥然不同。下图展现了大数据平台比较典型的数据采集架构:

以下是几种比较典型的业务场景。

场景1:为了提升业务处理的性能,同时又希望保留历史数据以备数据挖掘与分析。

业务处理场景访问的数据库往往是RDB,可伸缩性较差,又需要满足查询与其他数据操作的实时性,这就需要定期将超过时间期限的历史数据执行清除。但是在大数据场景下,这些看似无用的历史数据又可能是能够炼成黄金的沙砾。因而需要实时将RDB的数据同步到HDFS中,让HDFS成为备份了完整数据的冗余存储。在这种场景下,数据采集就仅仅是一个简单的同步,无需执行转换。

场景2:数据源已经写入Kafka,需要实时采集数据。

在考虑流处理的业务场景,数据采集会成为Kafka的消费者,就像一个水坝一般将上游源源不断的数据拦截住,然后根据业务场景做对应的处理(例如去重、去噪、中间计算等),之后再写入到对应的数据存储中。这个过程类似传统的ETL,但它是流式的处理方式,而非定时的批处理Job。

场景3:数据源为视频文件,需提取特征数据。

针对视频文件的大数据处理,需要在Extract阶段加载图片后,然后根据某种识别算法,识别并提取图片的特征信息,并将其转换为业务场景需要的数据模型。在这个场景下,数据提取的耗时相对较长,也需要较多的内存资源。如果处理不当,可能会成为整个数据阶段的瓶颈。

在数据采集阶段,一个棘手问题是增量同步,尤其针对那种可变(即可删除、可修改)的数据源。在我们无法掌控数据源的情况下,通常我们会有三种选择:

  • 放弃同步,采用直连形式;
  • 放弃增量同步,选用全量同步;
  • 编写定期Job,扫描数据源以获得delta数据,然后针对delta数据进行增量同步

坦白说,这三种选择皆非最佳选择,但我也未尝发现有更好的方案。如果数据源端可以控制,我们当然也可以侦听数据源的变更,然后执行Job来更新采集后存储的数据。这些又可能牵涉到数据存储的选型,假设我们选择了Parquet格式作为数据存储,则Parquet是不允许变更的。若要应对这种场景,或许应该考虑ORC格式。

为了更高效地完成数据采集,通常我们需要将整个流程切分成多个阶段,在细分的阶段中可以采用并行执行的方式。在这个过程中,可能牵涉到Job的创建、提交与分发,采集流程的规划,数据格式的转换等。除此之外,在保证数据采集的高性能之外,还要考虑数据丢失的容错。

原文发布于微信公众号 - 逸言(YiYan_OneWord)

原文发表时间:2017-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯NEXT学位

编程新手:看懂很多示例,却依然写不好一个程序

3188
来自专栏Java学习网

从实践中探索出的软件开发方法

软件开发方法是一个相当模糊的概念。在以下这篇文章中,我将试图把一些概念说清楚,调查各种常用的方法和他们的使用过程,及用的编程语言,框架和工具。 ? 网络配图...

3164
来自专栏Java编程技术

UML建模(用例图)

在软件生命周期的整个过程中,用例图是软件需求分析到软件交付的第一步,用例图的主要目的是说明这个软件的使用者是谁,使用者要使用那些功能,以及使用者需要向软件提供什...

622
来自专栏CSDN技术头条

JavaScript 2018:标星知识点及次要点梳理一览

JavaScript 现今已发展成熟——我们也不再是在页面上做一些小小的互动元素了,而是使用 JavaScript 构建整个大型应用。 当然,这也使得其比过去更...

1825
来自专栏Netkiller

solidity 语言安全·整型溢出

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

33017
来自专栏美团技术团队

大家一直在谈的领域驱动设计(DDD),我们在互联网业务系统是这么实践的

前言 至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven...

4029
来自专栏腾讯大讲堂的专栏

王者荣耀大数据运营总结

围绕王者荣耀大数据运营,依托对局日志和好友关系,开展了王者周报、赛季总结和周年庆活动等项目。这些案例中,遇到了哪些挑战?

3273
来自专栏编程

学好C语言必须要掌握四个知识点

很多初学C语言的小伙伴,在学习之初并没有一个大概的概念,学习这门语言需要掌握多少知识点。 怎么才算学的差不多? C语言的精髓点在哪? 学到多少东西才能够达到做项...

18310
来自专栏企鹅号快讯

对主流编程语言的吐槽

1.C 语言 ? ? 作为拥有「便携式汇编语言」头衔的 C 语言, 绝对充斥着各种问题!相信没有人会喜欢编写,大量独立的头文件,也更没有几个人能在使用预处理器的...

1888
来自专栏C/C++基础

C++发展概述

C++是一门以C为基础发展而来的一门面向对象的高级程序设计语言,从1983年由Bjarne Stroustrup教授在贝尔实验室创立开始至今,已有30多个年头。...

631

扫描关注云+社区