向Masters澄清一个问题,由于AWS Glue作为ETL工具可以为公司提供诸如最小化或无需服务器维护、避免过度或不足配备资源的成本节省等好处,再加上它可以在Spark上运行。我想了解一些澄清问题,即AWS Glue是否可以替代EMR?
如果两者可以共存,那么EMR如何与AWS Glue发挥作用?
谢谢&问候
Yuva
向Masters澄清一个问题,由于AWS Glue作为ETL工具可以为公司提供诸如最小化或无需服务器维护、避免过度或不足配备资源的成本节省等好处,再加上它可以在Spark上运行。我想了解一些澄清问题,即AWS Glue是否可以替代EMR?
如果两者可以共存,那么EMR如何与AWS Glue发挥作用?
谢谢&问候
Yuva
据我了解,胶水无法替代EMR。这实际上取决于您的用例。胶水ETL存在一些限制:
使用胶水目录可以在Athena中查看数据,但它也有一些限制,例如无法创建表作为选择,无法创建视图等。您可以在EMR中使用胶水数据目录以克服Athena的限制。
因此,目前胶水可以替代持久性元数据存储。
AWS Glue不允许我们配置执行器内存或驱动程序内存等很多东西。它是一个完全托管的服务,其中5GB是默认驱动程序内存,5GB是默认执行器内存。 另一方面,AWS EMR不是完全托管的服务,需要我们进行配置。更适合有经验的工程师。
顺便提一下,您也可以通过将参数传递给Glue作业来配置所有内置配置:
例如。
--conf value: spark.yarn.executor.memoryOverhead=1024
--conf value: spark.driver.memory=10g
这可以帮助使Glue Job更加灵活。
spark.driver.memory
配置有限。在EMR中,您可以根据需要决定集群类型,并且在EMR中实际上没有spark.driver.memory
配置的限制。 - Sandeep Fatangare迄今为止,我使用Glue的经验与EMR相比并没有提供任何显著优势。此外,我在Glue中看到了一些限制,如库、临时存储等。此外,尽管Glue坐落在Spark上,但其行为与核心Spark不同;例如读取1行CSV文件,如果缺少标题,则忽略整个文件等。
有一件事我仍在调查,那就是Glue是否根据查询负载动态调整集群。如果找不到更好的解决方案,我认为我将建议我的公司转向具有更大灵活性的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)。您可以通过选择DPU 1.X或2.X以及DPU数量来选择Glue高级配置的集群大小(DPU-数据处理单位),请参阅此链接Configuring DPUs
针对您提出的问题,给出如下具体答案:
Glue cannot replace EMR, EMR has more functional capabilities than Glue.
你可以将EMR视为“具有生态系统(包括Spark)的Hadoop框架”,而Glue仅为“具备Hive元存储功能的Spark ETL”
是的,它们两者可以共存。如果它们共存,Glue可以作为ETL框架来获取数据、转换数据并将其存储在S3中,并在"Glue目录"中维护数据集的表定义。EMR可以通过"EMRFS"和Glue目录从S3中使用/访问该数据集。使用EMR生态系统,您可以分析具有表定义的数据。
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"