aws-glue - 在 AWS Glue 中读取配置文件
问题描述
在部署到 AWS Glue 之前,我创建了一个 Glue 开发终端节点来测试我的代码。下面是项目架构的屏幕截图。glelibrary/ 中的项目布局有 config.ini 我能够成功调试代码并让它运行完成。我在 DEV 环境中调用库的方式如下所示:
开发环境
import sys
import os
import time
from configobj import ConfigObj
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import boto3
config = ConfigObj('/home/glue/scripts/gluelibrary/config.ini')
此过程成功找到我在配置文件中定义的所有变量,并以“退出代码 0”退出
安慰
注意:我开发的库被 .zip 压缩并添加到 s3 存储桶中,我告诉 Glue Job 查找 .zip。
但是,当我在 Glue 控制台中时,我尝试实现相同的代码(文件路径除外),我收到一个错误:
import sys
import os
import time
from configobj import ConfigObj
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import boto3
from gluelibrary.helpers import get_date
from gluelibrary import
from gluelibrary.boto3_.s3_utils import delete_data_in_sub_directories, check_for_empty_bucket
from gluelibrary.boto3_.s3_utils import replace_data_in_sub_directories, check_bucket_existence
print('starting job.')
print(os.getcwd())
config = ConfigObj('/home/glue/gluelibrary/config.ini')
//BUCKET_NAME/admin --JOB_NAME JOB_NAME YARN_RM_DNS=IP_ADDRESS.internal 检测到的区域 us-east-2 JOB_NAME = JOB_NAME 在复制脚本时指定 us-east-2。已完成 6.6 KiB/6.6 KiB (70.9 KiB/s),剩余 1 个文件下载:s3://BUCKET_NAME/admin/JOB_NAME 到 ./script_2018-10-12-14-57-20.py SCRIPT_URL = /tmp /g-6cad80fb460992d2c24a6f476b12275d2a9bc164-362894612904031505/script_2018-10-12-14-57-20.py
解决方案
如果您需要从 Glue 作业中访问额外文件,您必须:
将每个文件复制到 S3 上 Glue 有权访问的位置
在作业的
extra-files
特殊参数中包含每个文件的完整 S3 密钥(逗号分隔)
然后 Glue 会将这些文件添加到--files
给定的参数中spark-submit
,您应该能够从 Spark 作业中访问它们,就像它们在工作目录中一样。
在您的示例中,您应该能够简单地执行以下操作:
config = ConfigObj("config.ini")
推荐阅读
- python - 我的部分代码在 while 循环中不起作用
- r - 从 R 中的某个位置读取文件
- dns - 配置DNS子域时访问其他服务器
- c - gluLookAt 不适用于某些参数
- arrays - 从另一个 numpy 数组中删除 numpy 数组的子集
- amazon-web-services - 使用 boto3 上传/下载到 S3 或 Glacier Deep Archive 的成本是多少?
- javascript - 消除渲染阻塞资源 Google PageSpeed Insight
- xamarin - 应用程序在 iOS 13+ iPhone 的屏幕底部显示空白,但适用于 iOS 12 iPhone
- mysql - 如何在RDS中重命名MYSQL数据库?
- laravel - 如何根据列值在laravel中创建hasOne关系