Скопируйте файлы из S3 в EMR local, используя Lambda - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно программно переместить файлы из S3 в локальный каталог EMR dir / home / hadoop с помощью Lambda.

S3DistCp копирует в HDFS.Затем я вхожу в EMR и запускаю команду CopyToLocal hdfs в командной строке, чтобы получить файлы в / home / hadoop.

Существует ли программный способ использования boto3 в Lambda для копирования из S3 в локальный каталог Emr?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Я написал тестовую лямбда-функцию для отправки шага задания в EMR, который копирует файлы из S3 в локальный каталог EMR. Это сработало.

emrclient = boto3.client('emr', region_name='us-west-2')

def lambda_handler(event, context): 
EMRS = emrclient.list_clusters( ClusterStates = ['STARTING', 'RUNNING', 'WAITING'] ) 
clusters = EMRS["Clusters"] 
print(clusters)
for cluster in clusters: 
    ID = cluster["Id"]
    response = emrclient.add_job_flow_steps(JobFlowId=ID,
                                 Steps=[
                                     {
                                         'Name': 'AWS S3 Copy',
                                         'ActionOnFailure': 'CONTINUE',
                                         'HadoopJarStep': {
                                             'Jar': 'command-runner.jar',
                                             'Args':["aws","s3","cp","s3://XXX/","/home/hadoop/copy/","--recursive"],
                                         }
                                     }
                                 ],
                            )

Если есть лучшие способы сделать копию, пожалуйста, дайте мне знать.

0 голосов
/ 17 июня 2019

Для того чтобы лямбда-функция AWS могла удаленно запускать команду CopyToLocal в кластере, необходим способ.

Функция Lambda может вызвать add-steps , чтобы запросить кластер для запуска сценария, выполняющего это действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...