最近,AWS 发布了 Amazon EMR Serverless(预览版)https://aws.amazon.com/blogs/big-data/announcing-amazon-emr-serverless-preview-run-big-data-applications-without-managing-servers/ - 非常有前途的新服务。
根据我的理解 - AWS Glue 是 Apache Spark 之上的托管服务(用于转换层)。AWS EMR 也主要用于 Apache Spark。因此,EMR Serverless(适用于 Apache Spark)看起来与 AWS Glue 非常相似。
现在我脑子里有一个问题 - 与 AWS Glue 的核心区别是什么以及何时选择 EMR Serverless 而不是 Glue?
潜在的 EMR Serverless,甚至可能成为 AWS Glue 转换层生态系统的一部分?也许 AWS 将用 EMR Serverless 取代 AWS Glue 中的转换层,这样就有意义了。AWS Glue 将扮演 ETL Overlay、Metastore 的角色,并以 EMR Serverless 作为处理层。
我有一个包含多个模块、类和依赖项文件(requirements.txt文件)的 Python 项目。我想将其打包到包含所有依赖项的一个文件中,并将文件路径提供给将运行它的 AWS EMR serverless。
问题是我不明白如何打包一个包含所有依赖项的 Python 项目、EMR 可以使用哪个文件等。我找到的所有示例都使用一个 Python 文件。
简单来说,如果我的Python项目不是单个文件而是比较复杂怎么办?
我正在尝试使用安装了一些库的虚拟环境在 aws cli 上运行一些作业。我遵循了这个指南;这里也一样。但是当我运行该作业时,出现以下错误:
Job execution failed, please check complete logs in configured logging destination. ExitCode: 1. Last few exceptions: Caused by: java.io.IOException: error=2, No such file or directory Exception in thread "main" java.io.IOException: Cannot run program "./environment/bin/python"
Run Code Online (Sandbox Code Playgroud)
我也尝试过/home/hadoop/environment/bin/python作为路径,但得到了相同的结果。我的工作会议是:
--conf spark.archives=s3://mybucket/dependencies/myenv.tar.gz#environment --conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=./environment/bin/python --conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=./environment/bin/python --conf spark.emr-serverless.executorEnv.PYSPARK_PYTHON=./environment/bin/python
Run Code Online (Sandbox Code Playgroud)
如果我在工作中奔跑
os.listdir("./environment/bin/)
Run Code Online (Sandbox Code Playgroud)
结果是
['python3.9', 'pip', 'pip3.9', 'rst2xetex.py', 'rstpep2html.py', 'f2py3', 'rst2latex.py', 'f2py', 'rst2odt.py', 'rst2html4.py', 'pip3', 'aws', 'python3', 'jp.py', 'rst2odt_prepstyles.py', 'pyrsa-encrypt', 'activate', 'rst2man.py', 'pyrsa-priv2pub', 'python', 'pyrsa-keygen', 'pyrsa-verify', 'rst2html.py', 'aws_completer', …Run Code Online (Sandbox Code Playgroud)