2016-03-12 2 views
0

В настоящее время я разрабатываю приложение Spark в Google DataProc. Часто мне нужно обновить пакет Python. Во время подготовки я запускаю следующие команды:Пакет Dataproc + python: распространение обновленных версий

echo "Downloading and extracting source code..." 
gsutil cp gs://mybucket/mypackage.tar.gz ./ 
tar -xvzf mypackage.tar.gz 
cd ./mypackage 

echo "Installing requirements..." 
sudo apt-get install -y python-pip 
python setup.py install 

Однако, что является наиболее эффективным способом распространения обновленных пакетов внутри кластера? Есть ли какая-либо автоматизация, уже встроенная (например, шеф-повар)?

В настоящее время я делаю две разные вещи: Развертывание и перезагрузка нового кластера (требуется время) или SSH для каждого узла и копирование + установка обновленного пакета.

ответ

0

В целом, развертывание нового кластера с действиями инициализации является предпочтительным подходом, поскольку это помогает держать свой собственный рабочий процесс разработки воспроизводимым, если вам необходимо клонировать новые кластеры, изменить более фундаментальные параметры устройства или зон, или только в случае, если случайно сломать существующий кластер грязным способом. Он также обеспечивает свежие исправления для всего установленного программного обеспечения и хорошо работает с динамическим масштабированием вверх/вниз по вашему кластеру по сравнению с настройкой на основе SSH.

При этом для изменения существующего кластера вы также можете использовать bdutil, который по совпадению совместим с именованием экземпляра Dataproc, если вы не используете никаких превентивных работников (но это официально не гарантировано всегда так). Это обеспечит удобный способ для выполнения команд на всех узлах с помощью SSH с сбор некоторые полезные сообщения об ошибке, если он не:

CLUSTER=<dataproc-cluster-name> 
PROJECT=<Google project you used to create the Dataproc cluster> 
BUCKET=<mybucket> 
ZONE=<dataproc cluster zone, like us-central1-f> 
NUM_WORKERS=<number of workers in dataproc cluster> 

# Run "sudo apt-get install -y python-pip" on all nodes 
./bdutil -P ${CLUSTER} -p ${PROJECT} -b ${BUCKET} -z ${ZONE} -n ${NUM_WORKERS} \ 
    run_command -t all -- "sudo apt-get install -y python-pip" 

Вы также можете использовать -t master запустить что-то только на главном узле, или -t workers к выполняется только на рабочих узлах.

+0

это помогает. Спасибо. – Frank