一、离线同步引擎概况
- 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)、每支持一种同步通道需要新开发;