离线同步方案

2022-02-21 15:41:48 浏览数 (2)

一、离线同步引擎概况

  • Sqoop:Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具; http://sqoop.apache.org/,Azure在使用;
  • Apache Gobblin: 一个分布式数据集成框架,支持多种资源调度方式; https://gobblin.apache.org/
  • DataX:阿里开源的一个异构数据源离线同步工具; https://github.com/alibaba/DataX ,阿里、美团、滴滴、有赞等都在使用;
  • Apache Flume :一个分布式、可靠、和高可用的海量日志聚合的系统; https://flume.apache.org/
  • FlinkX:DataX on Flink版本,袋鼠云改造开源,任务转化为Flink任务执行; https://github.com/DTStack/flinkx
  • kettle:https://community.hitachivantara.com/s/article/data-integration-kettlePentaho公司开源的ETL工具
  • Apache SeaTunnel:Apache SeaTunnel (原名 Waterdrop)是一个非常易于使用的超高性能分布式数据集成平台,支持实时流式和离线批处理的海量数据处理,架构于 Apache Spark 和 Apache Flink 之上。由 Interesting Lab 于 2018年开源,并于2021年12月09日进入 Apache 孵化器。

这里重点分析Sqoop、DataX、Spark

二、Sqoop

1、Sqoop概况

Apache Sqoop是一种用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。http://sqoop.apache.org/

目前主要分为2个版本:Sqoop1,版本号1.4.x,最新版本1.4.7;Sqoop2,版本号1.99x,最新1.99.7 ;两个版本之间完全不兼容;

Note that 1.99.7 is not compatible with 1.4.7 and not feature complete, it is not intended for production deployment.

2、Sqoop原理

将导入或导出命令翻译成MR程序来实现。在翻译出的MR中主要是对inputformat和outputformat进行定制。

3、Sqoop1 VS Sqoop2

两代之间是两个完全不同的版本,不兼容

lSqoop2引入sqoop server,集中化管理connector

lSqoop2多种访问方式:CLI,Web UI,REST API

lSqoop2引入基于角色 的安全机制

3.1、 架构对比

lSqoop1架构:

(1)、Importing Data

第一步,Sqoop从数据库中获取要导入的数据的元数据;

第二步,Sqoop提交map-only作业到Hadoop集群中;

(2)Exporting Data

第一步,从数据库中获取要导入的数据的元数据,

第二步则是数据的传输。Sqoop将输入数据集分割成片然后用map任务将片插入到数据库中。为了确保最佳的吞吐量和最小的资源使用率,每个map任务通过多个事务来执行这个数据传输。

参考:https://blogs.apache.org/sqoop/entry/apache_sqoop_overview

lSqoop2架构:

3.2、功能对比

Feature

Sqoop1

Sqoop2

Connectors for all major RDBMS

支持

不支持 解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、 PostgreSQL 、 MySQL 和 Oracle

Kerberos安全集成

支持

支持

数据导入:from RDBMS to Hive or HBase

支持

不支持 解决办法: 将数据从 RDBMS 导入 HDFS Hive 中使用相应的工具和命令(例如 LOAD DATA 语句),手动将数据载入 Hive 或 HBase

数据导出:from Hive or HBase to RDBMS

不支持 解决办法: 1、 从 Hive 或 HBase 将数据提取至 HDFS ,作为文本或 Avro 文件 2、使用 Sqoop 将上一步的输出导出至 RDBMS

不支持 解决办法: 同Sqoop1

参考:https://docs.cloudera.com/documentation/enterprise/5-6-x/topics/cdh_ig_sqoop_vs_sqoop2.html

4、Sqoop使用样例

4.1 Sqoop1 样例

lMySQL2Hive

sqoop import

--connect jdbc:mysql://10.0.0.9:3306/hivemetastore

--username root

--password Qweasd123

--hive-import

--table ROLES

--hive-database default

--hive-table roles_test

--fields-terminated-by ','

-m 2

lHive2MySQL

本质是从HDFS导出到MySQL,先获取到表的HDFS地址,再进行导出

desc formatted roles_test

SHOW create table roles_test

sqoop export

--connect jdbc:mysql://10.0.0.9:3306/hivemetastore

--username root

--password Qweasd123

--table roles_test

--export-dir hdfs://10.0.0.3:4007/usr/hive/warehouse/roles_test'

--input-fields-terminated-by ','

-m 1

4.2 Sqoop2 样例

需要3步:1、创建源头、目标link;2、创建job;3、启动job

create link -connector generic-jdbc-connector

create link -connector hdfs-connector

## create job -f formLinkName -t toLinkName

create job -f mysql-link -t hdfs-link

## start job -name jobName

start job -name test1

参考:

lSqoop:http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html

lSqoop2:http://sqoop.apache.org/docs/1.99.7/user.html

5、腾讯云EMR Sqoop情况

支持Sqoop1.4.7

三、DataX

1、DataX概况

DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

目前已经基本覆盖常用的数据源。https://github.com/alibaba/DataX

2、DataX架构

数据传输过程在单进程内完成,全内存操作,不读写磁盘,也没有IPC

https://github.com/alibaba/DataX

四、Spark

基于Yarn提交任务模式,向yarn 提交一个spark任务

db2hive

/usr/hdp/2.2.0.0-2041/spark/bin/spark-submit --driver-class-path common-lib/mysql-connector-java-5.1.20.jar --jars common-lib/mysql-connector-java-5.1.20.jar --master yarn --deploy-mode cluster --queue root.workflow --class com.tbds.tencent.DB2HiveClient db2hiveCore-5.0-jar-with-dependencies.jar '{"curDateTime":"2019-01-04 16:11:32","dbColumnList":"broker_ip,task_id,task_type","dbProperties":{"dbName":"lhotse_open","dbType":"mysql","driver":"com.mysql.jdbc.Driver","fetchsize":"1000","fullTable":"lhotse_open.lb_task","password":"lhotse@Tbds.com","tableName":"lb_task","url":"10.0.0.142:3306","userName":"lhotse"},"hiveColumnList":"broker_ip,task_id,task_type","hiveProperties":{"db":"project001","partitionKey":"c3","table":"fula"},"mapred_min_split_size":123,"metaStoreUris":"thrift://tbds-10-0-0-96:9083,thrift://tbds-10-0-0-49:9083","taskId":"201801213","transferModel":"append","warehouseDir":""}'

hive2db

/usr/hdp/2.2.0.0-2041/spark/bin/spark-submit --driver-class-path common-lib/mysql-connector-java-5.1.20.jar --jars common-lib/mysql-connector-java-5.1.20.jar --master yarn --deploy-mode cluster --queue root.workflow --class com.tbds.tencent.Hive2DBClient db2hiveCore-5.0-jar-with-dependencies.jar '{"curDateTime":"2019-01-04 16:11:32","dbColumnList":"broker_ip,task_id,task_type","dbProperties":{"dbName":"lhotse_open","dbType":"mysql","driver":"com.mysql.jdbc.Driver","fetchsize":"1000","fullTable":"lhotse_open.lb_task","password":"lhotse@Tbds.com","tableName":"lb_task","url":"10.0.0.142:3306","userName":"lhotse"},"hiveColumnList":"broker_ip,task_id,task_type","hiveProperties":{"db":"project001","partitionKey":"c3","table":"fula"},"mapred_min_split_size":123,"metaStoreUris":"thrift://tbds-10-0-0-96:9083,thrift://tbds-10-0-0-49:9083","taskId":"201801213","transferModel":"append","warehouseDir":""}'

五、Sqoop、DataX、Spark对比

功能

Sqoop1

DataX单机版

spark

基础依赖

JDK、Hadoop

JDK、Python

JDK、Hadoop、Spark

数据源

有限 导入:RDBMS2HDFS、RDBMS2Hive、 RDBMS2HBase 导出:HDFS2RDBMS

丰富、插件式 支持RDBMS、Hadoop生态、NoSQL存储、时间线序列、文件存储 、消息 之间相互同步

需要自己开发

并发控制

支持

支持

支持

限速

不支持

支持

不支持

脏数据收集

不支持

支持

不支持

同步Metrics (速率、进度)上报

不支持

支持

不支持

独立提供机器部署

不需要,EMR组件可直接选择

需要

不需要

同步效率

大数据量时可充分利用Hadoop集群优势

与部署DataX机器性能相关

大数据量时可充分利用Hadoop集群优势

对hadoop版本支持

支持度好

只支持特定hadoop版本

spark 适配版本的hadoop

五、方案对比

1、方案1 Sqoop

l优点

(1)、对hadoop生态版本支持较好;

(2)、云EMR可快速集成Sqoop组件,Sqoop自身与EMR在一个网络环境,直接复用EMR集群机器,无需再提供额外机器;

l缺点

(1)、可以生产使用Sqoop1,依赖hadoop环境,目前仅支持命令行形式,需要解决如何将下发Sqoop任务问题;(部署 executor agent?

(2)、支持的数据源种类有限,目前主要支持RDBMS到Hadoop生态中;

(3)、Sqoop组件部署在用户EMR中,扩展升级复杂;

l网络打通依赖

Sqoop和用户EMR在同一个VPC中,网络需要打通:另一端在同VPC则不需要打通;跨VPC,需要打通用户的两个VPC;

2、方案2 DataX

l优点

(1)、有丰富的异构数据源类型支持,扩展方便;

(2)、支持限速、脏数据、同步metrics的收集;

l缺点

(1)、支持有限的hadoop版本,需要再开发;

(2)、需要提供集群单独部署DataX,并运维,作为同步执行机器;

l网络打通依赖

场景:用户测提供执行机器,DataX部署在一端所在VPC(如EMR所在的VPC中 )(需要对TEG excutor进行大量改造)

网络需要打通:另一端在同VPC则不需要打通;跨VPC,需要打通用户的两个VPC;

3、Spark

l优点

(1)、复用已有Spark集群能力进行同步,用户只需提供少量执行机作为spark 客户端;

(2)、采用Spark集群能力进行同步在大数据量时同步效率有保障;

l缺点

(1)、用户必须要有hadoop集群,跑同步spark作业

(2)、每支持一种同步通道需要新开发;

0 人点赞