本文来源于公众号【胖滚猪学编程】,转载请注明出处!

关于数据中台的概念和架构,我们在大白话 六问数据中台和数据中台全景架构及模块解析!一文入门中台架构师!两篇文章中都说明白了。从这一篇文章开始分享中台落地实战。

其实无论是数据中台还是数据平台,数据无疑都是核心中的核心,所以闭着眼睛想都知道数据汇聚是数据中台/平台的入口。纵观众多中台架构图,数据采集与汇聚都是打头阵的:

本文将从以下几个方面分享数据采集的方方面面:

一、企业数据来源 二、数据采集概念和价值 三、数据采集常用工具 四、数据采集系统设计原则 五、数据采集模块生产落地分享

有来源才能谈采集,因此我们先来归纳下企业中数据来源。

数据来源

企业中的数据来源极其多,但大都都离不开这几个方面:数据库,日志,前端埋点,爬虫系统等。

  • 数据库我们不用多说,例如通常用mysql作为业务库,存储业务一些关键指标,比如用户信息、订单信息。也会用到一些Nosql数据库,一般用于存储一些不那么重要的数据。
  • 日志也是重要数据来源,因为日志记录了程序各种执行情况,其中也包括用户的业务处理轨迹,根据日志我们可以分析出程序的异常情况,也可以统计关键业务指标比如PV,UV。
  • 前端埋点同样是非常重要的来源,用户很多前端请求并不会产生后端请求,比如点击,但这些对分析用户行为具有重要的价值,例如分析用户流失率,是在哪个界面,哪个环节用户流失了,这都要靠埋点数据。
  • 爬虫系统大家应该也不陌生了,虽然现在很多企业都声明禁止爬虫,但往往禁止爬取的数据才是有价值的数据,有些管理和决策就是需要竞争对手的数据作为对比,而这些数据就可以通过爬虫获取。

数据采集与抽取

刚刚说了这么多数据,可是它们分散在不同的网络环境和存储平台中,另外不同的项目组可能还要重复去收集同样的数据,因此数据难以利用,难以复用、难以产生价值。数据汇聚就是使得各种异构网络、异构数据源的数据,方便统一采集到数据中台进行集中存储,为后续的加工建模做准备。

  • 数据汇聚可以是实时接入,比如Flume实时采集日志,比如Canal实时采集mysql的binlog。

  • 也可以是离线同步,比如使用sqoop离线同步mysql数据到hive,使用DataX将mongo数据同步到hive。

技术选型

数据采集常用框架有Flume、Sqoop、LogStash、DataX、Canal,还有一些不算很主流但同样可以考虑的工具如WaterDrop、MaxWell。这些工具的使用都非常简单,学习成本较低。只不过实际使用中可能会有一些细节问题。但是总体来说难度不大。

所以重点还是应该了解每种工具的适用范围和优缺点。然后想清楚自己的需求是什么,实时还是离线?从哪种数据源同步到哪里?需要经过怎么样的处理?

Flume

Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。 Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中。

Logstash

Logstash 即大名鼎鼎的ELK中的L。Logstash最常用于ELK(elasticsearch + logstash + kibane)中作为日志收集器使用

Logstash主要组成如下:

  • inpust:必须,负责产生事件(Inputs generate events),常用:File、syslog、redis、beats(如:Filebeats)
  • filters:可选,负责数据处理与转换(filters modify them),常用:grok、mutate、drop、clone、geoip
  • outpus:必须,负责数据输出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、statsd

Sqoop

Sqoop主要用于在Hadoop(HDFS、Hive、HBase)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Datax

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

所支持的数据源如下,也可自行开发插件:

类型 数据源 Reader(读) Writer(写) 文档 RDBMS 关系型数据库 MySQL √ √ 读 、写 Oracle √ √ 读 、写 SQLServer √ √ 读 、写 PostgreSQL √ √ 读 、写 DRDS √ √ 读 、写 通用RDBMS(支持所有关系型数据库) √ √ 读 、写 NoSQL数据存储 OTS √ √ 读 、写 Hbase0.94 √ √ 读 、写 Hbase1.1 √ √ 读 、写 Phoenix4.x √ √ 读 、写 Phoenix5.x √ √ 读 、写 MongoDB √ √ 读 、写 Hive √ √ 读 、写 Cassandra √ √ 读 、写 无结构化数据存储 TxtFile √ √ 读 、写 FTP √ √ 读 、写 HDFS √ √ 读 、写 Elasticsearch √ 写 时间序列数据库 OpenTSDB √ 读 TSDB √ √ 读 、写

Canal

canal 主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

怎么用呢?启动canal-server 连上MySQL,再使用canal-client连接canal-server接收数据变更消息,拿到对应表和变更数据之后自行触发对应业务逻辑。更通用的是使用canal把数据变更直接投递到消息队列,使用消息队列消费者来处理逻辑,另外还支持canal落地到ES等地方。图中已经很详细了!

由于篇幅问题,本文不对这些工具做详细对比,想知道它们的优缺点吗?想知道该如何选型吗?去公众号【胖滚猪学编程】找答案吧!

数据落地

采集之后必然需要将数据落地,即存储层,常见的有:

  • MYSQL、Oracle
  • Hive、Hdfs
  • HBase
  • Redis
  • ElasticSearch
  • Tidb
  • Mongo

学习Hive、HBase、ElasticSearch、Redis、请关注公众号【胖滚猪学编程】吧!

需要说明的是,数据采集之后往往会先发送给Kafka这种消息队列,然后才真正落地到各种存储层中。

数据汇聚设计原则

从中台的角度来考虑,笔者认为,数据汇聚层的设计需要考虑几个关键的因素:

  • 设计之初就应该考虑支持各类数据源 ,支持不同来源、不同类型的数据源。数据汇聚层不是为某一种数据而生的,应该做到通用化。

  • 需要支持不同时间窗口的数据采集,实时的、非实时的、历史的。

  • 操作友好简单,即使是不懂技术的人,也可以方便的操作,进行数据同步;举例mysql同步到hive,你不应该让用户去填写复杂的sqoop任务参数,而是只需要选择源表和目的表,其他事情都交给中台去完成。

  • 合理选择存储层,不同数据源应存储在不同的地方,比如日志数据肯定不适合mysql。

本文来源于公众号【胖滚猪学编程】,转载请注明出处!

生产落地分享

笔者马上要开始分享公司真实落地案例了!网上文章千篇一律,极少数会有实战落地分享!也欢迎各位大佬指教!

首先刚刚说到设计原则,应该考虑支持各类数据源 各类落地,应该分别考虑离线和实时采集、应该要操作友好简单,不懂技术也可操作。我们整体的设计也是以这几个原则作为指导的。想分别从离线和实时采集方面介绍一下公司落地方案:

离线采集

离线同步方面、在我司主要是会采集抽取如下图所示的几个数据源数据,最终落地到HIVE或者TIDB,落地到HIVE的作用我就不多说了,大家都比较熟悉。而落地到TIDB主要是支持实时查询、实时业务分析以及各类定时跑批报表。

下面通过mysql自助化同步到hive为例,分享自助化离线数据采集模块的系统设计。

首先通过数据中台源数据管理模块,将数据源的信息一一展示出来,用户按需勾选同步:

同步支持全量同步以及增量同步,支持附加配置,比如脱敏、加密、解密等。由于需要规范数仓表名、因此目的表名由系统自动生成,比如mysql同步到hive统一前缀ods_(后续在数仓规范中会详细说明,敬请关注公众号【胖滚猪学编程】)

用户点击确认同步之后,首先会经过元数据管理系统,从元数据管理系统中查询出同步任务所需要的元信息(包括ip,端口,账户密码,列信息),组装成sqoop参数,将同步信息(包括申请人、申请理由、同步参数等信息)记录到mysql表中。然后调用工单系统经过上级领导审核。

工单系统审核后发消息给到mq,通过mq可实时获取到工单审核状态,如果审核通过,则在调度系统(基于EasyScheduler)自动生成任务,早期我司选择Azkaban,后来发现EasyScheduler多方面都完胜Azkaban,尤其在易用性、UI、监控方面。

从图中可知mysql同步到hive涉及三个流程节点,以user表增量同步为例,第一步是通过sqoop任务将mysql数据同步到hive的ods_user_tmp表,第二步是将ods_user_tmp的数据merge到ods_user中(覆盖原有分区),第三步是做数据检验。

除了mysql同步到hive,其他数据源的同步也大同小异,关键是定义好流程模板(通常是shell脚本)和流程依赖,然后利用调度系统进行调度。

实时采集

实时采集模块,我司是基于Flink实时计算平台,具有如下特性:

  • 支持多种数据源:Kafka、RocketMq、Hive等
  • 支持多种落地:Kafka、JDBC、HDFS、ElasticSearch、RocketMq、HIVE等
  • 通用sql处理:数据处理直接配置一条sql即可
  • 告警策略:支持多种告警策略,如流计算堆积batch的监测、应用的启动退出等。

在设计原则上,也充分考虑了扩展性、易用性,source、process、sinkdim(维表)均为插件化开发,方面后续扩展,界面化配置,自动生成DAG图,使得不懂技术的人也可以很快上手进行流计算任务开发:

由于篇幅问题,细节问题不能一一说清,本人将在公众号【胖滚猪学编程】持续分享,欢迎关注。

本文来源于公众号【胖滚猪学编程】一个集颜值与才华于一身的女程序媛。以漫画形式让编程so easy and interesting。

postgresql 怎么读_大数据采集和抽取怎么做?这篇文章终于说明白了!相关推荐

  1. topik怎么读_大神教你TOPIK阅读提速技巧!

    好多同学在TOPIK考试阅读这块常常因为题目做不完,或者看懂文章却选错选项而苦恼.之所以会出现这样的问题,是因为在备考期间缺乏了一些做题的习惯和小技巧,今天小编就教大家TOPIK备考阅读题小技巧. 很 ...

  2. 推荐:成为大数据开发全能高手的100篇文章

    开源(Open Source)用之于大数据技术,其作用有二:一方面,在大数据技术变革之路上,开源在众人之力和众人之智推动下,摧枯拉朽,吐故纳新,扮演着非常重要的推动作用.另一方面,开源也给大数据技术构 ...

  3. 太牛了!西工大研究生一期Science发了3篇文章!

    近期,西北工业大学生态与环境保护研究中心(下文简称"生态中心")以西北工业大学为通讯作者单位在国际顶级期刊<科学(Science)>杂志同一期发表三篇研究长文(Rese ...

  4. python request 等待网页加载_用Python开发爬虫,看这篇文章就够了

    现在Python语言大火,在网络爬虫.人工智能.大数据等领域都有很好的应用.今天我向大家介绍一下Python爬虫的一些知识和常用类库的用法,希望能对大家有所帮助. 其实爬虫这个概念很简单,基本可以分成 ...

  5. 2.2基本算法之递归和自调用函数_你为什么学不会递归?读完这篇文章轻松理解递归算法...

    对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...

  6. 西部数据移动硬盘哪个型号好_飞利浦电视哪个型号好?这篇文章有你想要的答案...

    飞利浦电视哪个型号好?这是很多人在购买飞利浦电视时会问到的问题.飞利浦的电视产品有着出色的表现,而最新推出的75英寸8K新品电视75PUF9304/T3更是受到不少赞誉,值得购买! 飞利浦电视哪个型号 ...

  7. 可能存在无限递归_你为什么学不会递归?读完这篇文章轻松理解递归算法

    对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...

  8. serve注解是加在哪个类_不会 Java 注解 ? 看这一篇文章!

    对于Java注解,我之前的印象是很模糊的,总觉得这个东西经常听说,也经常用,但是具体是怎么回事,好像没有仔细学习过,说到注解,立马想到@Controller,仅此而已. 对于Java注解,我咨询过一些 ...

  9. 5G辐射大吗?关于基站和手机辐射,这篇文章彻底讲明白了

    导读:今天我们来聊聊基站和手机的辐射. 哈哈,大家有没有虎躯一震?如今这个年头,新闻里三天两头会说这里有辐射,那里有放射性,还有不断增高的癌症发病率,号称都是辐射导致,引起大家人心惶惶. 尤其是我们通 ...

最新文章

  1. Linux 文件系统及 ext2 文件系统
  2. 大数据时代,如何构建精准用户画像,直击精细化运营
  3. 设计模式之AbstractFactory
  4. Html5元素及基本语法
  5. centos php 错误日志,centos系统下错误日志保存在哪里
  6. 我的博客网站开发6——博文关键字搜索
  7. function函数嵌套 matlab_Matlab函数进阶:使用匿名函数和内嵌函数处理多变量传递问题...
  8. 使用启动外部进程的方式解决there should be only one application object(使用qtwinmigrate中常出现)
  9. Android音视频开发(2)常用的系统播放器MediaPlayer
  10. Linux下数据传输安全与加密
  11. 二叉树最 前序、中序、后序、层序遍历(最终)
  12. java jdk api文档在哪里下载_JDK API文档下载
  13. matlab中转置操作,如何转置MATLAB表?
  14. deepin V20.2版本安装MySQL
  15. 数学建模计算机部分知识,数学建模相关论文范文资料,与数学建模与计算机关系相关毕业论文题目范文...
  16. 粒子群算法的几个适应度评价函数
  17. office 论文 页码_word如何设置毕业论文页码
  18. 前端工程师的摸鱼日常(4)
  19. Wireshark: Getting Started
  20. iOS 开发者应该知道的 ARM 结构(转自apple4us)

热门文章

  1. 微型计算机内存主要,微型计算机的内存容量主要指 ( ) 的容量 (7.0分)
  2. linux java 获取路径怎么写_linux中java获取路径怎么写?
  3. android 通话结束广播,在Android中以编程方式结束通话
  4. .net 实时通信_【WebSocket】实时多人答题对战游戏
  5. 1113: 递归调用的次数统计(函数专题)
  6. 《软件需求分析(第二版)》第 17 章——需求管理工具 重点部分总结
  7. 达内计算机毕业好找工作吗,大学生学什么好找工作 转行IT行业需要多久
  8. ambari mysql jar_从零开始安装 Ambari (3) -- 安装 Ambari
  9. sublime text3 怎么配置、运行python_SublimeText3按ctrl+b执行python无反应
  10. CVE-2017-7529Nginx越界读取缓存漏洞POC