【问题标题】:ETL batch processing [closed]ETL批处理[关闭]
【发布时间】:2019-11-11 22:00:30
【问题描述】:

我正在寻找一些允许我创建预定批处理的开源技术(例如,每 1 小时查询一次像 Oracle 这样的 SQL DB,然后插入到 Kafka。可能会对数据进行一些转换之间)。问题是我需要能够传输大量数据(“大数据”——Oracle 查询可能返回 10GB 或更多)。

例如,我阅读了有关 Apache Airflow 的文章,但它似乎不适合处理大量数据。

我可以为此目的使用哪些其他技术?

【问题讨论】:

    标签: batch-processing schedule


    【解决方案1】:

    对此的一个简单而简单的解决方案是使用开源 ETL 工具(如 Talend Open Studio for Big Data)创建一个 ETL,从 oracle 读取您的数据,然后将其写入 Kafka。考虑到这就是您所需要的,您可以使用 talend 使用三个组件来完成此操作;

    • tOracleInput
    • tMap
    • tKafka 输出

    Talend - Kafka Documentation

    另一种解决方案是将您的 ETL 编码到 spark 作业中,以直接从您的 spark 代码写入 Kafka。如果您有足够的内存,Spark 会提供非常快速的内存中处理,因此您可以利用它。

    此外,由于您要按小时批量执行此操作,因此您应该根据时间过滤 oracle 输入,以仅获取增量行,而不是整个快照。

    【讨论】:

    • 我在 Talend 中找不到用于安排作业的本地方式(来自我在 Google 上搜索的内容)。关于 Spark - 我正在寻找无代码(或最小)的解决方案。关于每小时批次,当然我使用的是基于时间的查询,并且只获取新数据,但是这些数据最多可以达到几 GB。
    • @ChikChak,没错,开源版本没有原生调度,你必须构建你的作业并从 cron 作业中调用批处理文件。
    【解决方案2】:

    Quartz Scheduler 是否适合您的用例?

    虽然它是一个通用的作业调度库,但我认为它也可以用于长时间运行的 ETL 任务。

    引自官网:

    Quartz 是一个richly featured,开源作业调度库,它 几乎可以集成到任何 Java 应用程序中——从 最小的独立应用程序到最大的电子商务系统。 Quartz 可用于创建简单或复杂的执行计划 数十、数百甚至数万个工作岗位;任务的工作 被定义为可以虚拟执行的标准 Java 组件 你可以编程他们做的任何事情。 Quartz 调度器包括 许多企业级功能,例如对 JTA 事务的支持 和聚类。

    Quartz 可免费使用,在Apache 2.0 license 下获得许可。

    【讨论】:

    • 除了哪些技术会做实际的逻辑?
    • @ChikChak 一个简单的 Java 程序(调度程序)加上你的 ETL(工作),就像这样 example
    【解决方案3】:

    您对 Apache Airflow 的理解有点误导。它旨在用于以编程方式创作、调度和监控工作流。

    您可以使用各种技术来完成您打算执行的 ETL 工作。 Airflow 是编排器。可以的

    • 监控 Cron 作业
    • 将数据从一处传输到另一处(可能包括定期从多个来源获取数据)
    • 机器学习管道。

    Airflow 还与所有主要的云供应商集成。微软 Azure、GCP、AWS。 See this。它可以与 Qubole、Spark 等很好地配合使用。

    我会敦促您在 2 个单独的灯光下查看 2 个单独的事物。做实际的 ETL 工作可能需要它自己的设置并以预定的方式运行它是 Airflow 出现的地方。 Airflow 还可以帮助您处理工作中的 devops 方面。

    【讨论】:

    • 我没有提到,但我也已经启动并运行了流式 Apache NiFi 流。你认为 Airflow 作为 NiFi 流的调度器会很好吗?即,像 Airflow 之类的东西会安排一个触发器来运行查询到 NiFi 将消耗并因此保持流的某个 MQ,或者仅仅为此使用 Airflow 是否过大?
    • 在我的脑海中,创建一个包含 2 个运算符的 DAG - 一个用于从 Oracle 读取,一个用于写入 Kafka,将无法正常工作,因为它们将通过 Xcom 进行通信,即只是一个 SQL 表,当数据大约为几 GB 时,这听起来不是一个好主意。另一方面,另一种选择是创建 Oracle2Kafka 的操作员,但是我将无法在两者之间进行任何进一步的转换(例如拆分数据)。
    【解决方案4】:

    您应该看到所有Apache Big Data projectsOracle GoldenGate for BigData。 Apache 通过大数据工具的解决方案组合解决了这个问题。

    您可以使用Spring Framework: Spring Batch 获取开源解决方案。

    【讨论】:

    • 我不喜欢使用 GoldenGate,因为它只是针对 Oracle 的一个非常具体的解决方案,我以 Oracle 为例,它可以是任何其他数据库。