我试图了解保留与AWS Batch作业相关的详细信息的时间.例如,Kinesis限制页面描述了每个流如何默认为24小时保留期,最长可延长7天.
AWS Batch限制页面不包含有关作业允许的最长时间或计数的任何详细信息.它确实说一百万是SUBMITTED工作的限制,但不清楚是否专门用于SUBMITTED或包括其他州.
有人知道批量作业保留的细节吗?
使用 AWS 库,我可以访问 S3,但是如果我尝试使用 Spark 程序(使用 NativePackager 构建)访问 S3,这将不起作用。
我试过 s3://、s3n:// 和 s3a://。
让我展示一些我的测试:
测试 1:
如果我没什么特别的。如前所述失败。
测试2:
在https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html之后,我在调用我的代码之前做了这个代码:
curl --location http://169.254.170.2/$$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI > credentials.txt
export AWS_ACCESS_KEY_ID=`cat credentials.txt | perl -MJSON::PP -E 'say decode_json(<>)->{"AccessKeyId"}'`
export AWS_SECRET_ACCESS_KEY=`cat credentials.txt | perl -MJSON::PP -E 'say decode_json(<>)->{"SecretAccessKey"}'`
Run Code Online (Sandbox Code Playgroud)
之前有一些错误
测试 3:
如果我使用我的个人密钥设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。AWS 库和 Spark Work
考虑到测试 3有效,我的代码有效。出于显而易见的原因,我不喜欢维护密钥。问题是:
如何在 Spark 作业上使用 AWS Batch (ECS) 创建的凭证?
amazon-s3 amazon-web-services amazon-ecs apache-spark aws-batch
我们设置了批处理计算环境、作业队列和作业定义。计算环境的最小 CPU 设置为 16,因此它应该始终至少有一个 EC2 实例在运行。这是一个MANAGED环境。它还没有开始任何工作,但一切仍然报告健康。我查看了故障排除页面,但还没有发现任何有用的信息。
我可以去哪里查看出了什么问题?这完全是一个黑匣子吗?如果我在配置中的某个地方犯了错误(可能是某种 ARN 权限问题),我必须扫描每一行,直到碰巧看到错误为止?
我有一个 Docker 容器,它在其中执行一个 python 脚本作为入口点。这是 DockerFile
FROM python:3
ADD script.py /
EXPOSE 80
RUN pip install boto3
RUN pip install uuid
ENTRYPOINT ["python","./script.py"]
Run Code Online (Sandbox Code Playgroud)
这是 Python 脚本:
import boto3
import time
import uuid
import os
guid = uuid.uuid4()
timestr = time.strftime("%Y%m%d-%H%M%S")
job_index = os.environ['AWS_BATCH_JOB_ARRAY_INDEX']
filename = 'latest_test_' + str(guid) + '_.txt'
with open(filename, 'a+') as f:
data = job_index
f.write(data)
client = boto3.client(
's3',
# Hard coded strings as credentials, not recommended.
aws_access_key_id='',
aws_secret_access_key=''
)
response = client.upload_file(filename, 'api-dev-dpstorage-s3', 'docker_data' + …Run Code Online (Sandbox Code Playgroud) 我使用 Terraform 建立了基础设施,包括批处理服务作业队列、计算环境和作业定义。
对 Terraform 进行更改后,我运行terraform apply并收到以下错误:
Error: error deleting Batch Compute Environment (data-load): : Cannot delete, found existing JobQueue relationship
status code: 400, request id: 25449415-9c36-4748-95e6-925647bd716a
Run Code Online (Sandbox Code Playgroud)
作业队列中没有作业。我假设它将与与批处理服务相关的其他资源一起被删除/替换,而不是在替换时暂停计算环境的显示。
在过去,我能克服这个问题的唯一方法是破坏我的状态文件并重新开始,但我认为一定有更好的方法。我怎样才能解决这个问题?
我正在尝试使用它dask来将一个巨大的制表符分隔文件拆分为包含 100,000 个核心的 AWS Batch 阵列上的较小块。
在 AWS Batch 中,每个核心都有一个唯一的环境变量,AWS_BATCH_JOB_ARRAY_INDEX范围从 0 到 99,999(复制到idx下面代码片段中的变量中)。因此,我尝试使用以下代码:
import os
import dask.dataframe as dd
idx = int(os.environ["AWS_BATCH_JOB_ARRAY_INDEX"])
df = dd.read_csv(f"s3://main-bucket/workdir/huge_file.tsv", sep='\t')
df = df.repartition(npartitions=100_000)
df = df.partitions[idx]
df = df.persist() # this call isn't needed before calling to df.to_csv (see comment by Sultan)
df = df.compute() # this call isn't needed before calling to df.to_csv (see comment by Sultan)
df.to_csv(f"/tmp/split_{idx}.tsv", sep="\t", index=False)
print(idx, df.shape, df.head(5))
Run Code Online (Sandbox Code Playgroud)
我需要先打电话presist和/或compute …
aws-batch ×6
python ×2
amazon-ecs ×1
amazon-s3 ×1
apache-spark ×1
csv ×1
dask ×1
docker ×1
terraform ×1