【问题标题】:How to enable a python library over EMR core nodes to start EMR spark application step如何在 EMR 核心节点上启用 python 库以启动 EMR spark 应用程序步骤
【发布时间】:2020-05-24 15:53:24
【问题描述】:

我正在尝试使用我上传到 s3 的非常简单的 python 脚本运行 EMR(1 个主节点和 2 个核心节点)步骤,以便在 EMR spark 应用程序步骤中使用。该脚本在S3中读取一个data.txt文件并保存回来,如下图所示,

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 时,此直接脚本不会导致错误。为了解决这个问题,我尝试在创建 EMR 集群时使用 boto.sh 文件添加引导操作。我使用的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 应用程序步骤与包含 boto3 等库的 python 脚本一起使用。提前致谢。

【问题讨论】:

  • 您需要在引导操作中使用相同的脚本
  • boto3 将安装在所有节点上。这是 emr 的默认设置。

标签: python amazon-web-services apache-spark hadoop amazon-emr


【解决方案1】:

答案是引导操作

在创建集群并添加引导操作[1]时,您将能够安装 boto3 包。否则,对于正在运行的集群,您需要通过连接到节点或使用 Chef、ansible 手动在所有节点上安装 boto3...

引导操作如下:

sudo pip-3.6 install boto3 

或者

sudo pip install boto3 

注意:在 Amazon EMR 安装您在创建集群时指定的应用程序之前以及集群节点开始处理数据之前运行引导操作。

运行 boostrap 操作的日志将位于所有节点的“/mnt/var/log/bootstrap-actions”中。

[1]- 创建引导操作以安装附加软件 - https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html

【讨论】:

  • 我已阅读文档。它表示在创建 EMR 集群时添加引导操作适用于所有核心节点。但是,当我这样做时,.sh 文件只是应用于主节点(而不是所有核心节点)。我正在尝试解决这个问题。谢谢
  • 引导操作应该在所有节点上运行,您是否尝试过 SSH 核心节点并确保未使用 pip 列表安装软件包。最后,您可以检查 mnt/var/log/hadoop/steps/s-2V51S7I25TLLW/stdout 和 stderr。这可能是另一个错误
  • 您可以检查核心节点上的日志'/mnt/var/log/bootstrap-actions',以确保脚本在核心节点上成功运行
  • 一切都在我所做的引导操作的标准输出和标准错误中成功运行。但是,使用 import boto3 的 python 脚本在 EMR spark-submit 中作为步骤使用时不起作用。有什么办法解决这个问题吗?
  • 好的,问题解决了。实际上,我的 bash 文件写错了。真正的可以在这里找到:stackoverflow.com/questions/31525012/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2020-10-05
  • 2019-08-12
  • 1970-01-01
相关资源
最近更新 更多