我们可以在 AWS Glue 中使用 java 进行 ETL 吗?

问题描述 投票:0回答:2

我们可以在 AWS Glue 中使用 java 进行 ETL 吗? Glue ETL 编程似乎只有两种选择,即 Python 和 Scala。

aws-glue
2个回答
4
投票

没有

问:我可以使用什么编程语言为 AWS 编写 ETL 代码 胶水?

您可以使用 Scala 或 Python。

资源:AWS Glue 常见问题解答


0
投票

回答有点晚了,但希望从现在开始对某人有所帮助。

您实际上可以运行 Java 代码,但不能像使用 Python 或 Scala 那样在“脚本”部分中提供源代码。

Glue 环境包含一个 JRE(当前固定为 1.8 版),以便能够运行 Scala,因为它是一种基于 JVM 的语言。为了实现这一点,您需要将代码作为

.jar
发布并找到调用它的方法。

在我们的例子中,我们使用 Python 来触发子流程,例如:

import sys
import json
import boto3
import subprocess

...

x = subprocess.run([
    'java', '-jar', '<your_jar>.jar', '--foo=bar'
])

print('Response code: ' + str(x.returncode))

if x.returncode != 0:
            raise Exception(f"Glue job failed with exit code: {x.returncode}")

现在您会问,我如何访问我的

.jar
?答案之一是 S3。在
Advanced properties
部分(展开),有一个
Libraries
部分,如下所示:

在那里,只需将完全限定的 S3 路径添加到您的

.jar
Dependent JARs path
部分,如上所示。 Glue 实例(3.0、4.0 和撰写本文时)的运行时路径是
/tmp
,这是在初始化实例时将
.jar
复制到的路径。这就是为什么你可以隐式地指向
./
来执行它。

根据经验,性能一点也不差(与运行相同

.jar
的 EC2 实例没有什么不同),但您可能需要在生成的 JVM 上调整一些内容以获得更好的结果。我们在无头模式下使用 SpringBoot 和命令行增强模块,效果非常好。

© www.soinside.com 2019 - 2024. All rights reserved.