AWS Glue ETL 作业和 AWS EMR 有什么区别?

What is the difference between AWS Glue ETL Job and AWS EMR?

如果我必须对作为 csv 文件存储在 S3 中的巨大数据集(比如 1Tb)执行 ETL,则可以使用 AWS Glue ETL 作业和 AWS EMR 步骤。那么 AWS Glue 与 AWS EMR 有何不同。在这种情况下哪个是更好的解决方案。

Glue 允许您直接在 PySpark/Python/Scala 中提交 ETL 脚本,无需管理 EMR 集群。所有 setup/tear-down 的基础设施都得到管理。

还有一些其他托管组件,例如 Crawlers、Glue Data Catalog 等,可以让您更轻松地处理数据。

您可以将其中任何一种用于您的用例,Glue 会更快,但是您可能没有使用 EMR 获得的灵活性。

来自 AWS Glue 常见问题解答:

AWS Glue 在 Apache Spark 环境之上运行,为您的数据转换作业提供横向扩展执行环境。 AWS Glue 推断、发展和监控您的 ETL 作业,以大大简化创建和维护作业的过程。

Amazon EMR 让您可以直接访问您的 Hadoop 环境,让您在使用 Spark 以外的工具时具有较低级别的访问权限和更大的灵活性。

来源:https://aws.amazon.com/glue/faqs/

AWS Glue 是 AWS 的 ETL 服务。 AWS Glue 将在 Scala 或 Python 中生成 ETL 代码以从源中提取数据,转换数据以匹配目标架构,并将其加载到目标中

AWS EMR 是一种可以处理大量数据的服务,它是一个支持大数据的平台。它支持 Hadoop、Spark、Flink、Presto、Hive etc.You 可以使用上面列出的启动 EC2软件并建立类似的生态系统。

在您的情况下,您想要处理 1 TB 的数据。现在如果您想要对相同的数据进行计算,您可以使用 EMR,如果您想要 运行 对转换后的数据进行分析,使用胶水 .

大多数差异已经列出,因此我将更多地关注特定的用例

什么时候选择aws glue

  1. 数据量很大但结构化,即它在 table 结构中并且是已知格式(CSV、parquet、orc、json)。
  2. 需要沿袭,如果您在开发 etl 作业时需要数据沿袭图,更喜欢使用 glue 本机库开发 etl。
  3. 开发人员无需调整性能参数,例如设置执行程序数量、每个执行程序内存等。
  4. 您不想要管理大型集群的开销,只需为您使用的资源付费。

何时使用 EMR

  1. 数据量巨大但半结构化或非结构化,您无法从 Glue 目录中获得任何好处。
  2. 你只相信输出,不需要血统。
  3. 您需要根据作业类型和要求为每个执行程序定义更多内存。
  4. 您可以轻松地管理集群,或者如果您有很多作业可以 运行 在集群上同时进行,从而节省您的钱。
  5. 对于结构化数据,当您需要更多 Hadoop 功能(如 hive、presto 以进行进一步分析)时,您应该使用 EMR。

所以这取决于你的用例是什么。两者都很棒。

Glue 在底层使用 EMR。当您通过 SSH 连接到 Glue 开发端点的驱动程序时,这一点很明显。

现在,由于 Glue 是一个托管的 Spark 环境,或者说托管的 EMR 环境,它的灵活性降低了。您可以选择的工人类型是有限的。您可以在 spark 代码中使用的语言库的数量是有限的。 Glue 直到最近才支持像 pandas、numpy 这样的包。像 presto 这样的应用程序不能与 Glue 集成,尽管 Athena 是单独安装 presto 的一个很好的替代方案。

然而,主要问题是 Glue 作业的冷启动时间在 1 分钟到 15 分钟之间。

EMR 是探索性数据分析的不错选择,但对于 CI/CD 的生产环境,Glue 似乎是更好的选择。

编辑 - 粘合作业不再有冷启动等待时间