繁体   English   中英

Python 和 AWS EMR 步骤:使用 os.system 运行诸如 chmod 之类的命令在作为 EMR 步骤运行时不起作用

[英]Python and AWS EMR Steps: Using os.system to run commands such as chmod not working when ran as an EMR step

我的团队在 AWS 工作,我们有 Python 脚本,可以将文件从 S3 存储桶移动到 EC2 实例。 我想用我们正在使用的脚本作为前言,当直接从 ec2 实例运行时有效,并且仅在作为 EMR 步骤运行时才发出。 (尝试自动化)这里是一些手动工作但不在步骤定义中的代码片段。

1:创建一个记录器

import os, sys, boto3
import logging, datetime
import Configuration as cfg

# setup logger for this module
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter(cfg.logFormatterStr)
logFileName = os.path.splitext(os.path.basename(__file__))[0] + '_' + \
                 datetime.datetime.now().strftime('%Y%m%d_%H%M%S.log')
file_handler = logging.FileHandler(logFileName)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

2:我们下载对象。

for pre in prefixes:
for obj in SB.objects.filter(Prefix=pre):
    if '.' in obj.key:
        temp = obj.key.split('/')
        objList.append((obj.key,temp[-1]))
for item in objList:
    SB.download_file(item[0],os.getenv("HOME") + '/' + item[1])
    logger.info('Downloaded - %s' % item[0])
objList[:] = []

3:然后我们尝试使用 os.system 来执行 chmod 命令以及 mkdir 和 mv

os.system('chmod 775 *.py')

# Move HQL files to a subfolder
os.system('mkdir -p hive')
os.system('mv -f *.hql hive')

第 2 步有效。 文件被下载到 ec2 实例。 由于某种原因,日志文件永远不会被写入或创建。 我们得到所有 os.system 命令的错误。

chmod: cannot access ‘*.py’: No such file or directory
mv: cannot stat ‘*.hql’: No such file or directory

(我们很确定 *.hql 和 *.py 周围的异常字符是亚马逊记录引用的一些问题。

我的一名团队成员设法排除故障并找到了他的错误原因。 他的声明如下:

我的脚本位于 /home/hadoop 下。 当我将该脚本作为 EMR 步骤运行时(使用 /home/hadoop 中文件位置的参数),该脚本在不同目录下运行 (/mnt/var/lib/hadoop/steps/ { unique-step-ID })。 由于运行的脚本正在寻找 /home/hadoop 下的文件,因此无法找到它并且似乎是权限问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM