Я хочу сделать что-то действительно базовое, просто запустите кластер Spark через консоль EMR и запустите скрипт Spark, который зависит от пакета Python (например, Arrow). Какой самый простой способ сделать это?Как загрузочная установка модулей Python на Amazon EMR?
ответ
Самый простой способ - создать скрипт bash, содержащий ваши команды установки, скопировать его на S3 и установить действие бутстрапа из консоли, чтобы указать на ваш скрипт.
Вот пример, я использую в производстве:
s3: //mybucket/bootstrap/install_python_modules.sh
#!/bin/bash -xe
# Non-standard and non-Amazon Machine Image Python modules:
sudo pip install -U \
awscli \
boto \
ciso8601 \
ujson \
workalendar
sudo yum install -y python-psycopg2
Короче говоря, есть два способа установить пакеты с помощью pip, в зависимости от платформы. Во-первых, вы устанавливаете все, что вам нужно, и затем можете запустить свой шаг Spark. Проще всего использовать ЭМИ-4.0.0 и «командной runner.jar»:
from boto.emr.step import JarStep
>>> pip_step=JarStep(name="Command Runner",
... jar="command-runner.jar",
... action_on_failure="CONTINUE",
... step_args=['sudo','pip','install','arrow']
...)
>>> spark_step=JarStep(name="Spark with Command Runner",
... jar="command-runner.jar",
... step_args=["spark-submit","/usr/lib/spark/examples/src/main/python/pi.py"]
... action_on_failure="CONTINUE"
)
>>> step_list=conn.add_jobflow_steps(emr.jobflowid, [pip_step,spark_step])
На 2.x и 3.x, вы используете скрипт-runner.jar аналогичным образом, за исключением, что вы для указания полного URI для scriptrunner.
EDIT: Извините, я не видел, что вы хотели сделать это через консоль. Вы также можете добавить те же шаги в консоли. Первым шагом будет JAR клиента с теми же аргументами, что и выше. Второй шаг - искровой шаг. Надеюсь это поможет!
откуда 'conn' родом из –
это установит пакеты на одном из узлов в кластере EMR. Как я могу убедиться, что пакет установлен на всех узлах? – Aliza
Это устанавливает пакеты на всех узлах – noli