簡體   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