Spark-submit AWS EMR с установленными анакондами python библиотеки - PullRequest
0 голосов
/ 10 января 2020

Я запускаю кластер EMR с boto3 из отдельного экземпляра ec2 и использую скрипт начальной загрузки, который выглядит следующим образом:

#!/bin/bash
############################################################################
#For all nodes including master                              #########
############################################################################

wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
bash Anaconda3-2019.10-Linux-x86_64.sh -b -p /mnt1/anaconda3

export PATH=/mnt1/anaconda3/bin:$PATH
echo "export PATH="/mnt1/anaconda3/bin:$PATH"" >> ~/.bash_profile

sudo sed -i -e '$a\export PYSPARK_PYTHON=/mnt1/anaconda3/bin/python' /etc/spark/conf/spark-env.sh
echo "export PYSPARK_PYTHON="/mnt1/anaconda3/bin/python3"" >> ~/.bash_profile

conda install -c conda-forge -y shap
conda install -c conda-forge -y lightgbm
conda install -c anaconda -y numpy
conda install -c anaconda -y pandas
conda install -c conda-forge -y pyarrow
conda install -c anaconda -y boto3

############################################################################
#For master                                                #########
############################################################################

if [ `grep 'isMaster' /mnt/var/lib/info/instance.json | awk -F ':' '{print $2}' | awk -F ',' '{print $1}'` = 'true' ]; then

sudo sed -i -e '$a\export PYSPARK_PYTHON=/mnt1/anaconda3/bin/python' /etc/spark/conf/spark-env.sh

echo "export PYSPARK_PYTHON="/mnt1/anaconda3/bin/python3"" >> ~/.bash_profile

sudo yum -y install git-core

conda install -c conda-forge -y jupyterlab
conda install -y jupyter
conda install -c conda-forge -y s3fs
conda install -c conda-forge -y nodejs

pip install spark-df-profiling


jupyter labextension install jupyterlab_filetree
jupyter labextension install @jupyterlab/toc

fi

Затем я программно добавляю шаг к работающему кластеру, используя add_job_flow_steps

action = conn.add_job_flow_steps(JobFlowId=curr_cluster_id, Steps=layer_function_steps)

Ступенька - идеальная форма для искры.

В одном из импортированных python файлов я импортирую boto3. Я получаю ошибку:

ImportError: No module named boto3

Я установил эту библиотеку. Если IS SH в главный узел и запустить

python
import boto3

, он работает нормально. Есть ли какая-то проблема с spark-submit при использовании установленных библиотек, так как я выполняю установку conda?

1 Ответ

0 голосов
/ 10 января 2020

AWS имеет проект (AWS Data Wrangler ), который помогает при запуске EMR.

Этот фрагмент должен работать для запуска кластера с включенной Python 3:

import awswrangler as wr

cluster_id = wr.emr.create_cluster(
    cluster_name="wrangler_cluster",
    logging_s3_path=f"s3://BUCKET_NAME/emr-logs/",
    emr_release="emr-5.28.0",
    subnet_id="SUBNET_ID",
    emr_ec2_role="EMR_EC2_DefaultRole",
    emr_role="EMR_DefaultRole",
    instance_type_master="m5.xlarge",
    instance_type_core="m5.xlarge",
    instance_type_task="m5.xlarge",
    instance_ebs_size_master=50,
    instance_ebs_size_core=50,
    instance_ebs_size_task=50,
    instance_num_on_demand_master=1,
    instance_num_on_demand_core=1,
    instance_num_on_demand_task=1,
    instance_num_spot_master=0,
    instance_num_spot_core=1,
    instance_num_spot_task=1,
    spot_bid_percentage_of_on_demand_master=100,
    spot_bid_percentage_of_on_demand_core=100,
    spot_bid_percentage_of_on_demand_task=100,
    spot_provisioning_timeout_master=5,
    spot_provisioning_timeout_core=5,
    spot_provisioning_timeout_task=5,
    spot_timeout_to_on_demand_master=True,
    spot_timeout_to_on_demand_core=True,
    spot_timeout_to_on_demand_task=True,
    python3=True,                                        # Relevant argument
    spark_glue_catalog=True,
    hive_glue_catalog=True,
    presto_glue_catalog=True,
    bootstraps_paths=["s3://BUCKET_NAME/bootstrap.sh"],  # Relevant argument
    debugging=True,
    applications=["Hadoop", "Spark", "Ganglia", "Hive"],
    visible_to_all_users=True,
    key_pair_name=None,
    spark_jars_path=[f"s3://...jar"],
    maximize_resource_allocation=True,
    keep_cluster_alive_when_no_steps=True,
    termination_protected=False,
    spark_pyarrow=True,                                  # Relevant argument
    tags={
        "foo": "boo"
    }
)

bootstrap. sh содержание:

#!/usr/bin/env bash
set -e

echo "Installing Python libraries..."
sudo pip-3.6 install -U awswrangler
sudo pip-3.6 install -U LIBRARY1
sudo pip-3.6 install -U LIBRARY2
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...