Как включить библиотеку python на основных узлах EMR, чтобы запустить шаг приложения EMR spark - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь запустить шаг EMR (1 главный и 2 основных узла) с очень простым python сценарием, который я загрузил на s3 для использования на этапе приложения EMR spark. Этот скрипт читает файл data.txt на S3 и сохраняет его обратно, и это можно увидеть ниже,

import pyspark
import boto3

sc = SparkContext()
text_file = sc.textFile('s3://First_bucket/data.txt')
text_file.repartition(1).saveAsTextFile('s3://First_bucket/logdata')
sc.stop()

Однако этот прямой скрипт не вызывает ошибку, когда import boto3 не используется Чтобы решить эту проблему, я пытался добавить действие bootstrap с файлом boto. sh во время создания кластера EMR. Файл boto. sh, который я использовал, выглядит следующим образом:

#!/bin/bash

sudo easy_install-3.6 pip
sudo pip install --target /usr/lib/spark/python/ boto3

К сожалению, это просто включило библиотеку boto3 на главном узле , а не основных узлах. Снова шаг EMR для выполнения этого не выполнен, и файл журнала ошибок:

2020-02-08T20:56:49.698Z INFO Ensure step 4 jar file command-runner.jar
2020-02-08T20:56:49.699Z INFO StepRunner: Created Runner for step 4
INFO startExec 'hadoop jar /var/lib/aws/emr/step-runner/hadoop-jars/command-runner.jar spark-submit --deploy-mode cluster s3://First_bucket/data.py'
INFO Environment:
  PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/opt/aws/bin
  LESS_TERMCAP_md=[01;38;5;208m
  LESS_TERMCAP_me=[0m
  HISTCONTROL=ignoredups
  LESS_TERMCAP_mb=[01;31m
  AWS_AUTO_SCALING_HOME=/opt/aws/apitools/as
  UPSTART_JOB=rc
  LESS_TERMCAP_se=[0m
  HISTSIZE=1000
  HADOOP_ROOT_LOGGER=INFO,DRFA
  JAVA_HOME=/etc/alternatives/jre
  AWS_DEFAULT_REGION=eu-central-1
  AWS_ELB_HOME=/opt/aws/apitools/elb
  LESS_TERMCAP_us=[04;38;5;111m
  EC2_HOME=/opt/aws/apitools/ec2
  TERM=linux
  runlevel=3
  LANG=en_US.UTF-8
  AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon
  MAIL=/var/spool/mail/hadoop
  LESS_TERMCAP_ue=[0m
  LOGNAME=hadoop
  PWD=/
  LANGSH_SOURCED=1
  HADOOP_CLIENT_OPTS=-Djava.io.tmpdir=/mnt/var/lib/hadoop/steps/s-2V51S7I25TLLW/tmp
  _=/etc/alternatives/jre/bin/java
  CONSOLETYPE=serial
  RUNLEVEL=3
  LESSOPEN=||/usr/bin/lesspipe.sh %s
  previous=N
  UPSTART_EVENTS=runlevel
  AWS_PATH=/opt/aws
  USER=hadoop
  UPSTART_INSTANCE=
  PREVLEVEL=N
  HADOOP_LOGFILE=syslog
  PYTHON_INSTALL_LAYOUT=amzn
  HOSTNAME=ip-***-***-***-***
  HADOOP_LOG_DIR=/mnt/var/log/hadoop/steps/s-2V51S7I25TLLW
  EC2_AMITOOL_HOME=/opt/aws/amitools/ec2
  EMR_STEP_ID=s-2V51S7I25TLLW
  SHLVL=5
  HOME=/home/hadoop
  HADOOP_IDENT_STRING=hadoop
INFO redirectOutput to /mnt/var/log/hadoop/steps/s-2V51S7I25TLLW/stdout
INFO redirectError to /mnt/var/log/hadoop/steps/s-2V51S7I25TLLW/stderr
INFO Working dir /mnt/var/lib/hadoop/steps/s-2V51S7I25TLLW
INFO ProcessRunner started child process 22893
2020-02-08T20:56:49.705Z INFO HadoopJarStepRunner.Runner: startRun() called for s-2V51S7I25TLLW Child Pid: 22893
INFO Synchronously wait child process to complete : hadoop jar /var/lib/aws/emr/step-runner/hadoop-...
INFO waitProcessCompletion ended with exit code 1 : hadoop jar /var/lib/aws/emr/step-runner/hadoop-...
INFO total process run time: 26 seconds
2020-02-08T20:57:15.787Z INFO Step created jobs: 
2020-02-08T20:57:15.787Z WARN Step failed with exitCode 1 and took 26 seconds

Мой вопрос заключается в том, как использовать шаг приложения EMR spark со сценарием python, который содержит библиотеки, такие как boto3. Заранее благодарен.

1 Ответ

0 голосов
/ 09 февраля 2020

Ответ: Bootstrap actions

При создании кластера и добавлении bootstrap action [1] вы сможете установить пакет boto3. В противном случае для работающего кластера вам потребуется установить boto3 на все узлы вручную, подключившись к узлам или используя Chef, ansible, ...

Действие bootstrap будет выглядеть следующим образом:

sudo pip-3.6 install boto3 

Или

sudo pip install boto3 

Примечание. Действия : Bootstrap выполняются до того, как Amazon EMR установит приложения, которые вы укажете при создании кластера и до того, как узлы кластера начнут обрабатывать данные.

Журналы запущенного действия boostrap будут расположены в '/ mnt / var / log / bootstrap -actions' на всех узлах.

[1] - Создать Bootstrap Действия по установке дополнительного программного обеспечения - https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html

...