我们可以在 AWS Glue 中使用 java 进行 ETL 吗? Glue ETL 编程似乎只有两种选择,即 Python 和 Scala。
回答有点晚了,但希望从现在开始对某人有所帮助。
您实际上可以运行 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 和命令行增强模块,效果非常好。