只是大师们要澄清的一个快速问题,因为 AWS Glue 作为一种 ETL 工具,可以为公司提供好处,例如,最少或无需服务器维护,通过避免过度预置或预置资源来节省成本,除了在 Spark 上运行,我正在寻找一些澄清,如果 AWS Glue 可以取代 EMR?
如果两者可以共存,EMR 如何与 AWS Glue 一起发挥作用?
谢谢和问候
尤瓦
根据我的理解,胶水不能替代 EMR。这实际上取决于您的用例。 胶水 ETL 有一些限制;
- 它不支持 --包。
- 您没有用于存储临时数据的内部存储。
使用胶水目录,您可以在Athena中查看数据,但它也有一些限制,例如无法将表创建为选择,无法创建视图等。您可以在 EMR 中使用 Glue 数据目录来克服 Athena 的限制。
因此,目前胶水可以替代持久性元数据存储。
AWS Glue 不允许我们配置很多东西,例如执行程序内存或驱动程序内存。这是一项完全托管的服务,5Gb 作为默认驱动程序内存,5Gb 作为默认执行程序内存。 另一方面,AWS EMR 不是完全托管的服务,需要我们进行配置。更适合有经验的工程师。
顺便说一句,您还可以通过将参数传递给粘附作业
:ex来配置所有内置配置。
--conf value: spark.yarn.executor.memoryOverhead=1024
--conf value: spark.driver.memory=10g
这有助于使胶水作业更加灵活。
到目前为止,与 EMR 相比,我对 Glue 的经验并没有提供任何显着的优势。此外,我看到了 Glue 中的一些限制,例如库、临时存储等。此外,虽然 Glue 位于 Spark 上,但它的行为与核心 Spark 不同;例如,读取 1 行 CSV 文件,如果缺少标题,则忽略整个文件等。
有一件事我仍在调查 Glue 是否根据查询负载动态调整集群。如果我找不到好东西,我想我会推荐我的公司更灵活地转移 EMR。
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- 数据处理单元),请参阅此链接 配置 DPU
要用具体答案回答您的问题:
Glue cannot replace EMR, EMR has more functional capabilities than Glue.
您可以将EMR视为"具有生态系统(包括Spark)的Hadoop框架",并且 Glue 仅作为"具有 Hive 元存储功能的 Spark ETL">
是的,它们都可以共存。如果它们共存,Glue 可以充当 ETL 框架来获取数据,转换和存储在 S3 中并维护 "粘附目录"中该数据集的表定义。电子病历可以 使用"EMRFS"和粘附目录从 S3 使用/访问该数据集。用 EMR 生态系统,您可以分析数据(使用表定义)
您实际上可以在 AWS Glue 上运行常规的 Spark 作业"无服务器"。我们使用 AWS Glue 作为自动扩展的"无服务器 Spark"解决方案:作业会自动从托管 AWS Spark 集群池中获取分配的集群。可以忽略 AWS Glue 开发工具包和 Glue 目录,并且可以将自动生成的脚本替换为常规 Spark 代码。依赖项可以打包并推送到 S3。
但是,配置选项是有限的。缩放参数仅限于WorkerType
和NumberOfWorkers
,或魔术MaxCapacity
。群集大小不会随着在 Glue SDK 外部打开的文件而自动缩放。
CloudFormation 配置片段示例:
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