python中的pegasus云可重复实验-在云中设置可重复计算机科学实验的简单模块

precip的Python项目详细描述


precip-pegasus在python中的云可重复实验


overview


precip是一个灵活的体验管理api,用于在云上运行实验
。precip开发用于未来网格基础设施,如openstack、eucalyptus(>;=3.2)、nimbus,同时也用于商业云,如amazon ec2。api允许您轻松地
配置资源,然后您可以对其运行命令并将
文件复制到由标记标识的实例子集中。
api的目标是在python脚本中灵活而简单地使用它来控制
您的实验。


api不需要任何特殊的图像,这使得
很容易进行。任何基本的linux映像都可以工作。如果实验需要,可以使用更复杂的图像。或者,您可以使用实验api在映像上运行引导脚本来安装/配置所需的软件。



实例还获得一组默认标记。api方法,如运行
远程命令或复制文件,都使用标记来指定要针对的
实例。

帐户id和一个ssh密钥对,这个
密钥对用于同时访问多台机器或
帐户的实例。在支持它的云上,密钥对自动注册为"precip_id",并创建"precip"安全组。如果您的体验需要打开更多端口,您可以使用云接口将这些端口添加到precip security
组中。


precip是一个相当新的api,如果您有问题或建议需要改进,请联系pegasus support@isi.edu


安装


先决条件是paramiko和boto python模块。python
源包和RPM可在以下位置获得:
http://pegasus.isi.edu/static/precip/software/

api


provision(映像ID,实例类型='m1.small',count=1,ebs大小=none,
标记=none,启动超时=600,启动最大尝试数=3)
provision a new实例。注意,此方法启动
配置周期,但不会阻止实例完成引导。要在实例创建/启动时阻止,请参见
wait()


参数:

+image-id-要实例化的映像的id
+instance-type-实例的类型。这是特定于基础设施的,但通常遵循amazon ec2模型,
m1.small,m1.large,等等。
+count-要创建的实例数
+ebs-size-如果要增加根文件系统ebs磁盘
+标记的大小(以GB为单位)-这些标记稍后用于操作实例。使用
可以创建实例的逻辑组。
+boot廑timeout-以秒为单位的实例启动超时。
如果达到超时并且实例已重新启动
小于boot廑max廑尝试次数,则实例将重新启动。如果
重试次数已用尽,则会引发
实验异常。默认值为600秒。
+boot_max_tries-允许重试启动实例的次数。默认值为3。

wait(tags=[])
与tags参数匹配的所有实例的屏障。此
方法将被阻止,直到实例完成引导,并且
可通过其外部主机名访问。


参数:

+tags-指定要阻止的实例子集的标记。
默认值为[],其中意味着等待所有实例。


deprovision(tags)
deprovision(terminates)与tags参数匹配的实例



+tags-指定要去provision的实例子集的标记。

list(tags)
与标记匹配的实例的详细信息列表。
详细信息包括实例ID、主机名和标记。

参数:

+标记-指定要提供
信息的实例子集的标记。如果需要所有当前实例的详细信息,请使用[]。


返回:

+字典列表,每个实例一个。

get_public_hostnames(tags)
提供与标记匹配的实例的公用主机名列表。可以将公共主机名提供给其他
实例,以便让实例了解彼此。


参数:

+标记-指定实例子集的标记。

返回:

+公共主机名列表hostnames

get_private_hostnames(tags)
提供与标记匹配的实例的私有主机名列表。可以将私有主机名提供给其他
实例,以便让实例了解彼此。


参数:

+标记-指定实例子集的标记。

返回:

+私有主机名列表hostnames

get(tags,remote_path,local_path,user="root")
从一组与
标记匹配的远程计算机传输文件,并在本地存储该文件。如果有多个实例
与标记匹配,则实例ID将附加到
本地路径。


参数:

+标记-这些标记用于以后操作实例。使用
创建实例的逻辑组。
+remote_path-远程实例上文件的路径
+local_path-要传输到
+user-remote user的本地路径。如果未指定,则默认值为"root"

put(标记、本地路径、远程路径,user="root")
将本地文件传输到一组与
标记匹配的远程计算机。

后来。使用
创建实例的逻辑组。
+local_path-要从
+remote_path传输的本地路径-要将
文件存储为
+user-remote user的远程实例上的路径。如果未指定,则默认值为"root"

run(tags,cmd,user="root",check_exit_code=true,
output_base_name=none)
在实例上运行与标记匹配的命令。命令
在一个接一个的实例上串行运行。

参数:

+标记-这些标记用于以后操作实例。使用
创建实例的逻辑组。
+cmd-运行
+user-remote user的命令。如果未指定,则默认值为"root"。
如果需要以其他用户身份运行命令,则必须
确保用户在~/.precip/
+check_exit_code中接受ssh密钥-如果设置为true(默认值),则返回命令
非零退出代码将导致出现实验异常

+output_base_name-默认情况下,
远程命令的stdout和stderr将在precip stdout日志中查找。给出一个
基本文件名(.out和.err将自动追加)
将把stdout和stderr重定向到文件。

返回:

+一个列表列表,包含退出代码[],stdout[]和stderr[]
对于命令运行

copy_and_run(标记,local_script,args=[],user="root",
check_exit_code=true)
将脚本从本地计算机复制到远程实例并执行脚本。脚本是在一个接一个的
实例上按系列运行的。


参数:

+标记-这些标记稍后用于操作实例。使用
创建实例的逻辑组。
+local_script-要运行的本地脚本
+args-脚本的参数
+user-远程用户。如果未指定,则默认值为"root"。
如果需要以另一个用户身份运行命令,则必须
确保用户在~/.precip/
+check_exit_code中接受ssh密钥-如果设置为true(默认值),返回
非零退出代码的命令将导致引发
实验异常。


返回:

+包含退出代码的列表[],stdout[]和stderr[]
对于运行


的命令,上述基本方法是所有云
基础设施的标准方法。不同的是构造函数,因为每个
基础结构处理初始化的方式略有不同。对于
示例,要使用FutureGrid自动提供的EC2环境创建新的OpenStack,请执行以下操作:

os.environ['ec2_url',
os.environ['ec2_access_key'],
os.environ['ec2_secret_key'])




i对于Amazon EC2,必须指定区域、端点和
访问/密钥。请注意,您的凭据不需要使用环境
变量,但将凭据与
代码分开可防止凭据检入源代码管理系统。

"us-west-2c",
"ec2.us-west-2.amazonaws.com",
os.environ['amazon-ec2-u access-key',
os.environ['amazon-ec2-u secret-key'])




示例

hello world


/usr/bin/python

import time
from pprint import pprint



基于openstack的实验。在本例中,我们从environment中选择
up endpoints和access/secret cloud key,因为在futuregrid上公开这些是常见的设置
exp=openstackexperiment(
os.environ['ec2戋url',
os.environ['ec2戋access戋key',,
os.environ['ec2_secret_key'])

您可以给一个实例任意数量的标记。
exp.provision("ami-0000004c",tags=["test1"],count=1)

provision
wait方法为安全启动实际exper提供了一个
iment.
exp.wait()

打印实例的详细信息。详细信息包括实例id、
私有和公共主机名,以及由您和api添加的标记
pprint(exp.list())

对具有"test1"标记的实例运行命令。在这种情况下,我们只有一个实例,但是如果您有多个带有
标记的实例,则命令将在每个实例上运行。
exp.run(["test1"],"echo‘hello world from a experiment instance’"


deprovision调用放在finally下:即使在失败的情况下也要执行该deprovision操作。
如果exp不是none:
exp.deprovision()





/usr/bin/python

import time


from precip import*

fg=none


这个设置与helloworld示例非常相似,只是我们现在必须进行
实验来处理。第一步是初始化实验。请注意,您的凭据不需要使用环境变量,但将凭据从代码中分离会阻止凭据检入到源代码管理系统。

"US-WEST-2c",
"ec2.us-west-2.amazonaws.com",
os.environ['amazon-ec2-u-access-key'],
os.environ['amazon-ec2-u-secret-key'])

os.environ['ec2-u-url',
os.environ['ec2-u-access-key'],
os.environ['ec2戋u secret戋key'])


tags=["id=fg_1"])

provision
wait方法为安全地开始实际实验提供了一个障碍。
ec2.wait([])
fg.wait([])

ec2.run([],"echo'hello world amazon ec2'"
fg.run([],"echo'hello world futuregrid openstack'")


deprovision调用放在finally下:即使在失败的情况下也要执行该deprovision操作。
如果ec2不是none:
ec2.deprovision([])
如果fg不是none:
fg.deprovision([])


Pegasus Workflow

这是一个更复杂的示例,其中设置了一个小的Condor池,然后运行Pegasus Workflow并对其进行基准测试。precip脚本
与我们之前看到的类似,但它有两组
实例,一个主节点充当condor中央管理器,一组
condor工作节点。

/usr/bin/python

import time


from precip import*


os.environ['openstack_secret_key'])


instance_type="m1.large",count=2)
exp.wait()


这包括安装condor和pegasus,
下载并设置工作流。
exp.copy_和_run(["master"],"/bootstrap.sh")
exp.copy_和_run(["compute"],"/bootstrap.sh",args=[主/私有地址]

"cd~/montage&;run montage",user="wf")

或者使用不同的参数/设置运行工作流。


设置实例:

/bin/bash

脚本采用了一个可选的
参数,它是主实例的地址(condor术语中的central
manager)。如果未给出参数,
脚本将实例设置为主实例。


1/bin/true


对于大多数项目来说,正确的时钟对大多数项目来说都很重要
yum-q-y instainstall ntpdate
/etc/init.d/ntpdate start


;添加epel存储库
wget-nv http://mirror.utexas.edu/epel/6/x86_/epel-release-6-7.noarch.rpm
rpm-noarch.rpm
rpm-um epel release-*.noarch.rpm


>

/br/>添加秃鹰存储库
cat>;/etc/yum.repos.d/condor.repo<;<;eof
[condor stable]
name=condor stable RPM repository for redhat enterprise linux 6
baseurl=http://www.cs.wisc.edu/condor/yum/stable/rhel6
enabled=1
gpgcheck=0
eof

eof
[pegasus]
name=pegasus
baseurl=http://download.pegasus.isi.edu/wms/download/rhel/6/x86_br/>gpgcheck=0
enabled=1
priority=50
eof

java-1.7.0-openjdk.x86_64\
java-1.7.0-openjdk-devel.x86_64\
ganglia gmond condor pegasus

/etc/condor/condor_config.local

startd

然后,
yum-q-y安装ganglia gmetad ganglia web

cat>;/etc/condor/config.d/90-master.conf<;<;eof
condor\u host=\$(完整主机名)
守护进程列表=主进程、收集器、协商进程、schedd
eof
fi

并允许实验管理
ssh密钥进行身份验证
adduser wf
mkdir-p~wf/.ssh
cp~/.ssh/authorized\u keys~wf/.ssh/
chown-r wf:~wf/.ssh

master是提交主机,因此如果["x$master\u addr"="x"],则在其上部署我们的工作流
;然后安装工作流tarball并等待脚本
cd~wf
wget-q http://pegasus.isi.edu/static/precip/wf experiment/montage.tar.gz
tar xzf montage.tar.gz
chown-rwf:montage*
fi

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在Android中维护应用程序状态   javajavacc:如何指定在特定上下文中需要哪些令牌?   java为什么改型会在重新加载数据时设置以前的响应?   java如何将键转换为字符串,反之亦然   java JDOM解析器插入#固定手动属性   java按元素对XML数据排序?   java Android中有哪些哈希算法?   java为什么使用可选返回类型进行单元测试失败?   Gson和argonauts使用Gson将javascript数组转换为json字符串并转换为javapojo时遇到的问题。试图让我的结构正确   java中的空格   java SQLite高分,草率IndexOutofBounds Android   使用Spring OAUTH2的java Make客户端   netbeans如何在java中创建一个JPopupMenu,其中包含一个要复制文本的项