0

目前我正在 Google DataProc 上开发 Spark 应用程序。我经常需要更新 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

但是,在集群内分发更新包的最有效方法是什么?是否已经内置了任何自动化功能(例如 Chef)?

目前,我做了两件不同的事情:部署和引导一个新集群(需要时间)或 SSH 到每个节点,然后复制 + 安装更新的包。

4

2 回答 2

1

通常,使用初始化操作部署新集群是首选方法,因为如果您需要克隆新集群、更改更基本的机器或区域设置,或者万一您不小心破坏了现有集群,它有助于保持您自己的开发工作流程的可重复性一个凌乱的方式。与基于 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仅在工作节点上运行。

于 2016-03-13T02:41:49.160 回答
0

初始化操作会起作用吗? https://cloud.google.com/dataproc/init-actions

于 2016-03-12T20:44:20.397 回答