我们可以将 AWS Glue 视为 EMR 的替代品吗?

Posted

技术标签:

【中文标题】我们可以将 AWS Glue 视为 EMR 的替代品吗?【英文标题】:Can we consider AWS Glue as a replacement for EMR? 【发布时间】:2018-06-21 17:09:18 【问题描述】:

只需向 Master 提出一个快速澄清的问题,因为 AWS Glue 作为 ETL 工具,除了在spark,我正在寻找一些说明,如果 AWS Glue 可以替代 EMR?

如果两者可以共存,EMR 如何与 AWS Glue 一起发挥作用?

感谢和问候

尤瓦

【问题讨论】:

胶水适用于 ETL 工作。如果您只使用 EMR 来运行 ETL 作业,那么 Glue 将是一个很好的替代品。但是,您也可以使用 EMR 对您的数据运行自定义算法、机器学习等。使用 Glue 无法做到这一点,因此将 EMR 视为一种更复杂但更灵活的服务。 【参考方案1】:

据我了解,胶水不能替代 EMR。这实际上取决于您的用例。 胶水 ETL 有一些限制;

不支持 --packages。 您没有用于存储临时数据的内部存储器。

使用胶水目录您可以在 Athena 中查看数据,但它也有一些限制,例如无法创建表作为选择,无法创建视图等。您可以使用 EMR 中的胶水数据目录来克服 Athena 的限制。

因此,目前胶水可以替代持久性元数据存储。

【讨论】:

感谢您的意见 yalcinmn1 和 ashutoshs。我正在评估 AWS Glue 与 EMR 的功能。到目前为止,我能够设置一个本地 zeppelin 实例,连接到 AWS Glue 以运行我的 ETL 代码,最后使用 jdbc 连接将数据存储到 AWS Redshift 集群。仍在努力进行评估。谢谢 我在 redshift 中存储查询结果时遇到问题。如果我不能联系您询问有关连接的问题,那就太好了。谢谢【参考方案2】:

到目前为止,与 EMR 相比,我使用 Glue 的经验并没有提供任何明显的优势。此外,我看到了 Glue 的一些限制,例如库、临时存储等。此外,虽然 Glue 位于 Spark 上,但它的行为与核心 Spark 不同;例如读取 1 行 CSV 文件,如果缺少标题则忽略整个文件等。

我还在研究 Glue 是否会根据查询负载动态调整集群。如果我找不到好的东西,我想我会推荐我的公司以更灵活的方式转移 EMR。

【讨论】:

到目前为止,自动缩放在胶水中不可用。 自动缩放不可用,但您可以设置最大 DPU 数(上限值)。 Glue计算所需容量并仅使用所需容量,它可以扩展到配置的最大DPU值。(收费仅针对已使用容量,而不是最大DPU容量)【参考方案3】:

AWS Glue 不允许我们配置很多东西,例如执行程序内存或驱动程序内存。它是一个完全托管的服务,默认驱动程序内存为 5Gb,默认执行程序内存为 5Gb。 另一方面,AWS EMR 不是完全托管的服务,需要我们进行配置。更适合有经验的工程师。

【讨论】:

【参考方案4】:

顺便说一句,您还可以通过将参数传递给 Glue 作业来配置所有内置配置: 前任。

--conf value: spark.yarn.executor.memoryOverhead=1024   
--conf value: spark.driver.memory=10g  

这有助于使 Glue Job 更加灵活。

【讨论】:

要点是因为 AWS Glue 是完全托管的,最大内存限制为 16GB,因此您可以在 AWS Glue 中设置 spark.driver.memory 配置的限制。在 EMR 中,您可以根据需要决定集群类型,实际上,EMR 中的 spark.driver.memory 配置没有限制【参考方案5】:

您实际上可以在 AWS Glue 上“无服务器”运行常规 Spark 作业。我们使用 AWS Glue 作为自动扩展的“无服务器 Spark”解决方案:作业自动从托管的 AWS Spark 集群池中获取分配的集群。 AWS Glue 开发工具包和 Glue 目录可以忽略,自动生成的脚本可以替换为常规 Spark 代码。可以打包依赖并推送到S3。

但是,配置选项是有限的。缩放参数仅限于WorkerTypeNumberOfWorkers,或神奇的MaxCapacity。集群大小不会随着在 Glue SDK 之外打开的文件而自动缩放。

示例 CloudFormation 配置 sn-p:

  MyJob:                                                                                                                                                                                                
    Type: "AWS::Glue::Job"                                                                                                                                                                                     
    Properties:                                                                                                                                                                                                
      Command:                                                                                                                                                                                                 
        Name: "glueetl"                                                                                                                                                                                        
        ScriptLocation: "SOME_S3_MAIN_CLASS_LOCATION"
      AllocatedCapacity: 3
      DefaultArguments:                                                                                                                                                                                        
        "--job-language": scala                                                                                                                                                                                
        "--class": some.class.path.inside.jar.MyJob                                                                                                                                           
        "--enable-metrics": true                                                                                                                                                                               
        "--extra-jars": "SOME_S3_JAR_LOCATION"

更多配置选项可以在 Glue CloudFormation 文档中找到:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-job.html#cfn-glue-job-defaultarguments

【讨论】:

【参考方案6】:

EMR 可以充当“交互式”和“批处理”数据处理框架(EMR 是 hadoop 框架)。 Glue 只是具有以下附加功能的“批处理”模式数据处理 (ETL) 框架 (Spark ETL)。

Glue has many capabilities, some of them are 

 1.Glue Metadata catalog (Data Catalog - Database and tables) 
 2.Glue Crawler - Parse the data and create table definitions
 3.Glue Jobs - ETL
 4.Glue Workflows - Combined multiple ETL flow
 5.Glue  ML transforms - ML related transforms
 6. Glue devendpoints - for developing Glue jobs in Notebooks

Glue 是无服务器 AWS 服务,这意味着您无需花时间设置底层服务器和节点。 (尽管,Glue 在幕后使用了 EMR)。您可以使用 Glue 高级配置选择集群大小(通过选择 DPU 1.X 或 2.X 以及 DPU 的数量 DPU-数据处理单元)参考此链接Configuring DPUs

用一个具体的答案来回答你的问题:

Glue cannot replace EMR, EMR has more functional capabilities than Glue.

您可以将 EMR 视为“具有生态系统(包括 spark)的 Hadoop 框架”,并且 Glue 仅作为“具有 Hive 元存储功能的 Spark ETL”

是的,它们都可以共存。如果它们共存,Glue 可以充当 ETL 用于在 S3 中获取数据、转换和存储并维护的框架 该数据集在“胶水目录”中的表定义。电子病历可以 使用“EMRFS”和 Glue 目录从 S3 使用/访问该数据集。使用 EMR 生态系统,您可以分析数据(使用表定义)

【讨论】:

以上是关于我们可以将 AWS Glue 视为 EMR 的替代品吗?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同

Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同

针对 AWS EMR 的 AWS Glue 定价

AWS EMR 与 Glue 目录,明确指定 catalogId

从 EMR 迁移到 AWS Glue 后在 Spark SQL 中找不到表

可以将哪些选项传递给 AWS Glue DynamicFrame.toDF()?