初识大数据采集

在大数据系统体系中,数据源、数据采集是第一环。

 

初识大数据采集_第1张图片

 

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

  1. 数据源  2.数据同步工具 3.数据采集模块实战分享

 

数据源

在企业生产应用中数据来源极多,大致可以分为:日志采集、爬虫系统、数据库等

 

数据采集

在生产实际应用中,一般将数据采集分为日志采集和数据库数据同步两部分。其中日志采集包括浏览器的页面日志采集和客户端的日志采集。

数据同步技术更通用的含义是不同系统间的数据流转,有多种不同的应用场景。主数据库与备份数据库之间的数据备份,以及主系统与子系统之间的数据更新,属于同类型不同集群数据库之间的数据同步。另外,还有不同地域、不同数据库类型之间的数据传输交换,比如分布式业务系统与数据仓库系统之间的数据同步。总体方案分为两种:

  • 实时同步,比如Flume实时采集日志,比如Canal实时采集mysql的binlog或者从kafka中获取。

  • 离线同步,比如使用sqoop离线同步等。

 

技术选型

现在业内常用的数据采集常用框架有Flume、Sqoop、LogStash、DataX、Canal、WaterDrop等。这些工具的使用都比较简单,学习成本较低。根据每种工具的适用范围和优缺点。结合自己的业务和使用场景进行选择使用。

 

Flume

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

初识大数据采集_第2张图片

 

 

Logstash

Logstash 即大名鼎鼎的ELK中的L。 Logstash 是一个服务器端数据处理管道,它同时从多个源中提取数据,进行转换,然后将其发送到类似Elasticsearch 的“存储”中。Logstash 是 Elastic 栈非常重要的一部分,但是它不仅仅为 Elasticsearch 所使用。它可以介绍广泛的各种数据源。Logstash 可以帮利用它自己的Filter帮我们对数据进行解析,丰富,转换等。

初识大数据采集_第3张图片

 

 

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的数据导进到关系型数据库中。

初识大数据采集_第4张图片

DataX

DataX 是阿里巴巴集团开源的支持异构数据同步工具,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能,也可自行开发插件。

初识大数据采集_第5张图片

Canal

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

 

初识大数据采集_第6张图片

canal是通过模拟成为mysql 的slave的方式,监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。

Waterdrop

Waterdrop 是一个非常易用,高性能、支持实时流式和离线批处理的海量数据处理产品,架构于Apache Spark 和 Apache Flink之上。

初识大数据采集_第7张图片

 

由于篇幅问题,本文不对这些工具做详细对比和使用介绍,想知道它们的优缺点吗?想知道该如何选型吗?去公众号【大华数据之路】找答案吧!

 

数据落地

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

  • MYSQL、Oracle

  • Hive、Hdfs

  • HBase

  • clickhouse

  • ElasticSearch

  • Tidb

  • Mongo

学习Hive、HBase、ElasticSearch、Clickhouse、请关注公众号【大华数据之路】吧!

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

 

数据采集模块实战分享

 

对于数据采集系统的设计,应该遵循几个原则:能支持各类数据源接入、能支持离线和实时采集、操作友好简单能自助化操作。一般的整体的设计也是以这几个原则作为指导的。分别从离线和实时采集方面介绍一下落地方案:

 

离线采集

离线数据同步方面、在我司主要是采集如下图所示的几个数据源数据,将同步的数据最终落到HIVE或者TIDB,落地到HIVE的数据只要是给业务做建模用。而落地到TIDB主要是支持实时查询、实时业务分析以及各类定时跑批报表的产出。

下面通过Mysql自助化同步到hive为例,讲述我司在自助化同步这块的设计方案。

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

初识大数据采集_第8张图片

离线数据同步支持全量同步、增量同步,支持常规的配置选项,比如脱敏、加密、解密等,也支持用户的自定义规则。由于一般情况下公司会对数仓表名做统一规范,目的表名由系统自动生成,比如mysql同步到hive统一前缀ods_(后续在数仓建设系列中会详细说明,敬请关注公众号【大华数据之路】)

初识大数据采集_第9张图片

 

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

工单系统审核后发消息给到mq,通过mq可实时获取到工单审核状态,如果审核通过,则在调度系统(基于EasyScheduler)自动生成任务。

初识大数据采集_第10张图片

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

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

 

实时采集

实时采集模块,以Flink实时计算平台为例,具有如下特性:

  • 支持多种数据源:Kafka、RocketMq、Hive、Hbase、Tidb等

  • 支持多种落地:Kafka、JDBC、HDFS、ElasticSearch、RocketMq、HIVE等

  • 通用flinksql处理:和sql类似,用来处理数据

  • 支持udf函数和sql无法处理的逻辑可以用jar包的方式处理。

  • 告警策略:支持多种告警策略,如流计算堆积batch的监测、应用的启动退出等。

在设计原则上,也充分考虑了扩展性、易用性,source、process、sink\dim(维表)均为插件化开发,方面后续扩展,界面化配置,自动生成DAG图:

初识大数据采集_第11张图片

初识大数据采集_第12张图片

由于篇幅问题,细节问题不能一一说清,本人将在公众号【大华数据之路】持续分享,欢迎关注。

初识大数据采集_第13张图片

 

你可能感兴趣的:(数据仓库,大数据,hdfs,sqoop,hadoop,hive)