В ноутбуках EMR устанавливаются дополнительные библиотеки
Мне удивительно трудно работать с дополнительными библиотеками через ноутбук EMR. Интерфейс AWS для EMR позволяет мне создавать ноутбуки Jupyter и подключать их к работающему кластеру. Я хотел бы использовать в них дополнительные библиотеки. SSH-подключение к компьютерам и установка вручную в качестве ec2-user
или root
не сделает библиотеки доступными для ноутбука, поскольку он, очевидно, использует пользователя livy
. Загрузочные действия устанавливают вещи для hadoop
. Я не могу установить с ноутбука, потому что у пользователя, очевидно, нет sudo
, git
и т.д., И, вероятно, он все равно не установится на рабов.
Каков канонический способ установки дополнительных библиотек для ноутбуков, созданных через интерфейс EMR?
Ответы
Ответ 1
Для примера предположим, что вам нужен Python-модуль librosa
для запуска кластера EMR. Мы собираемся использовать Python 2.7, поскольку процедура более проста - Python 2.7 гарантированно находится в кластере и является средой выполнения по умолчанию для EMR.
Создайте скрипт, который устанавливает пакет:
#!/bin/bash
sudo easy_install-2.7 pip
sudo /usr/local/bin/pip2 install librosa
и сохраните его в своем домашнем каталоге, например /home/hadoop/install_librosa.sh
. Обратите внимание на название, мы будем использовать его позже.
На следующем шаге вы собираетесь запустить этот сценарий через другой сценарий, основанный на документации Amazon EMR: emr_install.py
. Он использует AWS Systems Manager для выполнения вашего скрипта над узлами.
import time
from boto3 import client
from sys import argv
try:
clusterId=argv[1]
except:
print("Syntax: emr_install.py [ClusterId]")
import sys
sys.exit(1)
emrclient=client('emr')
# Get list of core nodes
instances=emrclient.list_instances(ClusterId=clusterId,InstanceGroupTypes=['CORE'])['Instances']
instance_list=[x['Ec2InstanceId'] for x in instances]
# Attach tag to core nodes
ec2client=client('ec2')
ec2client.create_tags(Resources=instance_list,Tags=[{"Key":"environment","Value":"coreNodeLibs"}])
ssmclient=client('ssm')
# Run shell script to install libraries
command=ssmclient.send_command(Targets=[{"Key": "tag:environment", "Values":["coreNodeLibs"]}],
DocumentName='AWS-RunShellScript',
Parameters={"commands":["bash /home/hadoop/install_librosa.sh"]},
TimeoutSeconds=3600)['Command']['CommandId']
command_status=ssmclient.list_commands(
CommandId=command,
Filters=[
{
'key': 'Status',
'value': 'SUCCESS'
},
]
)['Commands'][0]['Status']
time.sleep(30)
print("Command:" + command + ": " + command_status)
Чтобы запустить это:
python emr_install.py [cluster_id]
Ответ 2
В этом случае я обычно удаляю свой кластер и создаю новый с действиями начальной загрузки. Действия начальной загрузки позволяют установить дополнительные библиотеки в вашем кластере: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-bootstrap.html. Например, написание следующего скрипта и сохранение его в S3 позволит вам использовать datadog из вашего ноутбука, работающего поверх кластера (по крайней мере, он работает с EMR 5.19):
#!/bin/bash -xe
#install datadog module for using in pyspark
sudo pip-3.4 install -U datadog
Вот командная строка, которую я бы запустил для запуска этого кластера:
aws emr create-cluster --release-label emr-5.19.0 \
--name 'EMR 5.19 test' \
--applications Name=Hadoop Name=Spark Name=Hive Name=Livy \
--use-default-roles \
--instance-groups \
InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m4.large \
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m4.large \
--region eu-west-1 \
--log-uri s3://<path-to-logs> \
--configurations file://config-emr.json \
--bootstrap-actions Path=s3://<path-to-bootstrap-in-aws>,Name=InstallPythonModules
И config-emr.json, который хранится локально на вашем компьютере:
[{
"Classification": "spark",
"Properties": {
"maximizeResourceAllocation": "true"
}
},
{
"Classification": "spark-env",
"Configurations": [
{
"Classification": "export",
"Properties": {
"PYSPARK_PYTHON": "/usr/bin/python3"
}
}
]
}]
Я предполагаю, что вы могли бы сделать то же самое при создании кластера через интерфейс EMR, перейдя к расширенным параметрам создания.
Ответ 3
Каков канонический способ установки дополнительных библиотек для ноутбуков, созданных через интерфейс EMR?
EMR Notebooks недавно выпустила "библиотеки для ноутбуков", с помощью которых вы можете установить дополнительные библиотеки Python в своем кластере из общего или частного репозитория PyPI и использовать его в сеансе ноутбука.
Библиотеки в области ноутбуков предоставляют следующие преимущества:
- Вы можете использовать библиотеки в записной книжке EMR без необходимости повторного создания
кластер или повторно присоедините ноутбук к кластеру.
- Вы можете изолировать зависимости библиотеки записной книжки EMR от индивидуальной сессии записной книжки. Библиотеки, установленные из записной книжки, не могут создавать помехи другим библиотекам кластера или библиотекам, установленным в других сеансах записной книжки.
Вот больше деталей,
https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-scoped-libraries.html
Технический блог:https://aws.amazon.com/blogs/big-data/install-python-libraries-on-a-running-cluster-with-emr-notebooks/