【问题标题】:ETL process to transfer data from one Db to another using Apache Spark使用 Apache Spark 将数据从一个 Db 传输到另一个 Db 的 ETL 过程
【发布时间】:2017-08-16 15:35:13
【问题描述】:

我需要创建一个 ETL 流程,该流程将每天从多个 SQLServer 实例并行提取、转换并加载 100 多个表到尽可能多的 Oracle 实例。我知道我可以在 Java 中创建多个线程来实现这一点,但如果它们都在同一台机器上运行,这种方法将无法扩展。另一种方法可能是获取一堆 ec2 实例并开始为不同 ec2 实例上的每个实例传输表。但是,使用这种方法,我必须通过从我的池中添加/删除机器来处理“弹性”。

不知何故,我认为我可以使用“Amazon EMR 上的 Apache Spark”来完成此任务,但过去我只使用 Spark 来处理 HDFS/Hive 上的数据,因此不确定是否将数据从一个 Db 传输到另一个 Db是 Spark 的一个很好的用例 - 或者 - 是吗?

【问题讨论】:

    标签: java amazon-web-services hadoop apache-spark amazon-ec2


    【解决方案1】:

    从你的最后一个问题开始: “不确定将数据从一个 Db 传输到另一个 Db 是否适合 Spark”

    在 JDBC spark 连接器的限制范围内。存在一些限制,例如缺少对更新的支持,以及读取表格时的并行性(需要按数字列拆分表格)。

    考虑到 IO 成本和 RDBMS 的整体性能,以 FIFO 模式运行作业听起来不是一个好主意。您可以使用需要 1/x 集群资源的配置提交每个作业,以便并行处理 x 表。

    【讨论】:

    • 如果我为 SQL Server 的每个 Db 实例启动一项作业(Spark 程序)并在该程序中为 100 个表中的每一个创建一个线程,该怎么办?每个线程都会更新给定的表。当这些线程同时运行时,Spark 会在不同的机器上分配负载吗?
    • Spark 可以很好地扩展数据源,这些数据源在读取时可以很好地扩展,但在 RDBMS 中通常并非如此。如果 spark 会分发您的执行,简短的回答是肯定的,但您应该了解连接器/spark 如何执行并行性,以执行您自己的优化,这可以在一个 spark 应用程序中完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2017-06-21
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多