IBM SPSS Collaboration and Deployment Services(以下简称 CaDS)是一款管理和部署预测分析模型的企业级应用程序,同时也是 IBM SPSS 数据挖掘与预测分析产品家族中的重要成员,它为企业提供了完善的数据挖掘模型管理和部署平台。一般而言,企业级的数据资产非常庞大,如何更好地管理和分析 CaDS 资源库中的数据模型,对于管理员或是企业高级用户而言就显得尤为重要。为此,CaDS 基于 Python 强大的灵活性及易扩展性,为这类用户提供了一套完整的脚本框架,称之为 Essentials for Python,该框架提供了多种多样的与 CaDS 资源库交互的方式,用户不仅能够直接通过命令窗口(如:Windows Command Line)执行一些简单的命令来完成一系列复杂的任务,同时又能利用 Essentials for Python 框架中所提供的 API,与自己所开发的 Python 代码相结合,与 CaDS 资源存储库交互,完成目标任务,由此大大简化预测分析模型管理和分析的复杂性。
图 1 展示了 IBM SPSS CaDS 产品的整体架构,从图中可以看出,Essentials for Python 独立于 CaDS 资源库所运行的平台,它能远程访问 CaDS 资源库并实施一系列操作,例如: 运行在 Unix 平台上的 Essentials for Python 能够访问运行于 Windows 平台上的 CaDS 资源存储库中的内容,另外,Essentials for Python 适用于各种操作系统平台,包括 Window、Linux 及 Unix。
图 1. IBM SPSS CaDS产品架构
通过 Essentials for Python,企业高级用户或管理员能够对管理 CaDS 资源存储库中的数据资源(如:预测分析模型或用于模型训练的作业等)轻松管理,最大程度地简化大多数操作任务,其中包括:
回页首
由于 IBM SPSS CaDS Essentials for Python 是基于 Python 语言所开发的框架脚本,并支持多种操作系统平台,在正式安装之前,用户应首先确认当前产品版本所适用的系统平台版本,关于不同版本所适用的系统平台,请参照相关的IBM 技术支持网站。
除系统平台版本之外,同时还必须满足以下几个条件:
接下来,本文将以 Windows 平台为例,详细介绍 IBM SPSS CaDS Essentials for Python 的安装步骤。
用户可通过 Python 的 官方网站 下载适合的版本,本例中采用的是 Python 2.4.4。图 2 为 Python 的安装过程。
图 2. 安装 Python
接下来安装 PyXML-0.8.4,PyXML 是 Python 的一个 XML 工具集,里面包含了许多处理 XML 的工具,如:PySAX,xmlproc 等,通过利用该工具,Python 能够很好地处理 XML 文档。图 3 为 PyXML-0.8.4 的安装过程。
图 3. 安装 PyXML-0.8.4
到此,Python 环境已搭建完毕,为了使 Python 在系统内生效,需要将相关的路径引入到系统路径变量中,具体定义如清单 1 所示如下:
清单 1. 引入 Python 路径
%PYTHON_HOME% %PYTHON_HOME%/scripts %PYTHON_HOME%/Lib/site-package
其中,参数%PYTHON_HOME%对应于 Python 的安装的路径,本例中其值为:C:/Python24。接下来可通过 Windows 命令行窗口验证 Python 环境是否安装成功。在命令行中输入 python 命名,系统将返回 Python 的版本等信息,具体如下图所示。
图 4. 验证 Python
Python 环境安装完成后,接下来将通过 IBM Installation Manager 完成 IBM SPSS CaDS Essentials for Python 的安装。如系统中还未已经安装 IBM Installation Manager,请参考 IBM Installation Manager官方文档完成相应的安装。
启动 IBM Installation Manager,将 IBM SPSS CaDS 安装包导入到存储库并点击安装,此时将会列出 IBM SPSS CaDS 安装包中所有可选的软件包,选择 IBM SPSS Collaboration and Deployment Services - Essentials for Python 进行安装。
图 5. 选择软件安装包
在安装过程中,需要指定当前系统环境中 Python 可执行文件的路径,点击验证按钮对当前可执行路径下的 Python 版本兼容性进行验证,验证通过后直接点击下一步完成安装。
图 6. 验证可执行 Python 的版本
回页首
通过上面的阐述,相信大家对 Essentials for Python 已有了初步的了解。在本小节中,将详细阐述在 Windows 环境中如何利用 Command Line Scripting(命令行工具)对 CaDS 资源库中的资源进行管理。
当 Essentials for Python 安装完成后,在安装路径下会存在一个 Python 脚本文件 CADSTool.py,该脚本是 Essentials for Python 命令行工具的入口,它将目前 CaDS 对外发布的所有 Python API 都进行了良好的封装,向用户提供了一种命令行调用的方式对 CaDS 资源进行管理。用户只需要查阅 CaDS 官方的命令手册,就可以很轻松的像使用系统命令一样来和 CaDS 资源存储库进行交互。这种方式降低了 Essentials for Python 的使用难度,同时也便于灵活地与 bat 或是 shell 等脚本语言相结合来完成相对复杂的批量操作,对于不熟悉 Python 编程的用户来讲是个不错的选择。
清单 2 展示了通过命令行工具调用 CaDSTool.py 的基本语法:
清单 2. 命令行工具的基本语法
python CADSTool.py <Operation> <Keywords>
其中,Operation 指定了要调用的操作,Keywords 定义了作为被调用操作的输入参数的“键/值”对。下面笔者通过几个简单的场景示例为大家介绍命令行工具的使用。
首先进行文件夹的创建,其命令如清单 3 所示。
清单 3. 创建文件夹
python CADSTool.py createFolder --source "/PythonTest/CmdTool" –z
其中,参数-z 表示从配置文件 Authorization.properties 中获取 CaDS 服务器的相关信息,用户可提前在此文件中完成服务器、登陆用户等相关信息的配置,该配置文件位于 Essentials for Python 安装路径下的 config 文件夹内,其内容如清单 4 所示。
清单 4. 授权信息配置文件
# Authorization Information user=admin password=spss host=localhost port=80 ssl=false server_url=http://localhost:80/IBM/SPSS/CDS
其中,user 和 password 定义了执行此次操作登陆 CaDS 存储库的有效用户名和密码,host 定义了该存储所在的主机 IP 或主机名(注:若当前 CaDS 存储库运行在 IPv6 环境中,则 IP 地址需用 [] 括起来,如:[3ffe:2a00:100:7031::1]),port 定义了该 CaDS 存储库运行所使用的端口,ssl 定义了此次操作所连接的 CaDS 存储库是否启用了安全套接层(Secure Sockets Layer)协议来加密通信,更多关于 CaDS 配置 SSL 的信息,请参考 CaDS 的官方文档,server_url 定义了 CaDS 服务器的 URL 前缀。若未配置 Authorization.properties 文件,则用户也可直接在命令行中加入相应的 CaDS 存储库信息,因此清单 3 中的命令也可改写为:
清单 5. 创建文件夹
python CADSTool.py createFolder --source "/PythonTest/CmdTool" --host host --port port --user user --password password --server_url url
图 7. 命令行创建文件夹执行结果
createFolder 功能用于在 CaDS 存储库中创建文件夹,文件夹路径由--source 关键字来指定,本条命令之后行将在 CaDS 存储库中创建出"/PythonTest/CmdTool"这样的目录结构。接下来进行文件的上传,其命令如清单 6 所示:
清单 6. 上传本地文件
python CADSTool.py uploadFile --source "C:/qatest/SampleFile1.txt" --target "/PythonTest/CmdTool" -z
图 8. 命令行上传文件执行结果
uploadFile 功能用于上传文件到 CaDS 资源存储库中,其中--source 关键字指定了要上传的文件本地路径,--target 关键字指定了文件上传的目标位置。接下来,将对本地文件 SampleFile1.txt 内容进行修改,并重新上传到 CaDS 资源存储库,从而刚上传的文件创建一个新的版本,其命令如清单 7 所示:
清单 7. 上传本地文件
python CADSTool.py uploadFile --source "C:/qatest/SampleFile1.txt" --target "/PythonTest/CmdTool" --createVersion -z
图 9. 命令行创建文件新版本执行结果
这次通过 uploadFile 的操作给存储库中的 SampleFile1.txt 创建了一个新版本,这是通过加入 --createVersion 关键字来实现的,该关键字指定了如果目标位置已存在同名文件时,上传的文件会在目标文件上生成一个新的版本。
通过这三次命令调用,我们实现了场景 1 的需求,到此,读者应该对 Essentials for Python 命令行工具有了一个基础的了解。
在本场景中,将通过一个简单的示例将命令行工具与 bat 脚本结合完成批量文件夹的创建。首先在本地创建一个文本文件 folderNames.txt,添加以下内容并保存。
清单 8. 文件夹列表
/userhome/user1 /userhome/user2 /userhome/user3
该文件中中每一行表示要创建的一个文件夹的路径,该文件将用于稍后的批量处理。接下来创建一个 bat 脚本 CreateFolders.bat,和之前创建的文本文件放到同一目录下,并添加以下内容:
清单 9. 批量创建文件夹 bat 脚本
@ECHO off SETLOCAL GOTO:MAIN :CREATEFOLDER python %CADSTOOL_HOME%/CADSTool.py createFolder --source "%~1" -z GOTO:EOF :MAIN SET WORKING_DIR=%~dp0 SET CADSTOOL_HOME="C:/Program Files/IBM/SPSS/Deployment/7.0/PythonEssentials" FOR /F %%I IN (%WORKING_DIR%/folderNames.txt) DO CALL :CREATEFOLDER "%%I" :END ENDLOCAL
最后将批处理脚本保存并打开命令窗口运行。
图 10. 批量创建文件夹执行结果
由结果看出,通过 bat 脚本成功创建了三个由文本文件内容指定的文件夹。在这个示例中,笔者通过将命令行工具与 bat 脚本结合的方式实现了批量任务,读者可以根据自己的需求和熟悉的脚本语言进行更多批量任务的定制和执行。
Essentials for Python 所提供的命令行工具可看做一个轻量级的客户端工具,可以将 CaDS 资源存储库管理功能扩展至非 Windows 平台上(CaDS 资源管理器的客户端 Deployment Manager 目前仅支持 Windows 平台),可与多种脚本语言相结合来实现灵活的定制管理功能,以此简化 CaDS 资源的管理工作。
回页首
通过上一小节的介绍,相信读者对 Essentials for Python 命令行工具的使用有了初步了解,但正如该小节所介绍的那样,CaDSTool.py 对目前 CaDS 所有对外发布的 API 进行封装,对于不熟悉 Python 语言的用户而言,选择该工具能够方便地完成对 CaDS 资源的管理。除此之外,Essentials for Python 还为用户提供了 PESImpl 模块,用户可以在自己的 Python 脚本中从利用该模块导入 PESImpl 类,通过创建一个 PESImpl 对象连接到 CaDS 存储库,与其进行交互。清单 10 展示了如何通过 Python 脚本与 CaDS 资源存储库建立连接。
清单 10. 创建 PESImpl 对象到 CaDS 资源库的连接
from pes.api.PESImpl import PESImpl pesImpl = PESImpl("user", "password", "host", "port", ssl=True)
其中,PESImpl 构造函数中所涉及的参数定义与上一小节中提到的 Authorization.properties 配置文件中的参数定义基本相同,此处不再赘述。下面举例说明如何利用 PESImpl API 与 CaDS 存储库进行交互,同样的,笔者将通过一个场景示例对 PESImpl 模块进行介绍。
假定当前 CaDS 存储库中有多个群组,每个群组内有多个用户,具体如表 1 所示。通常而言,在 CaDS 存储库中,不同的用户对存储库内资源有着不同的权限,CaDS 中定义的用户权限依次由低到到高包括:读、写、删除和修改许可权。
表 1. 用户信息
群组 | 用户 | 群组 | 用户 |
---|---|---|---|
Group1 | g1user1 | Group2 | g2user1 |
g1user2 | g2user2 | ||
g1user3 | g2user3 |
下面,我们将首先在存储库中创建一个文件夹,并上传一个本地文件到该文件夹内。具体的 Python 脚本如清单 11 所示。
清单 11. 创建文件夹并上传文件
#导入 PESImpl from pes.util.PESExceptions import * from pes.api.PESImpl import PESImpl #创建 PESImpl 对象与 CaDS 存储库建立连接 pesImpl = PESImpl("admin", "spss", "host", "port") try: #创建文件夹 uriFolder = pesImpl.createFolder(source="/Demo/Drafts") print "Folder has been created. URI for the folder is:", uriFolder #上传文件 uriFile = pesImpl.uploadFile(source="C:/qatest/SampleFile.txt",target="/Demo/Drafts") print "File has been uploaded. URI for the uploaded file is: ", uriFile #若该文件已存在,则创建新的版本 except ResourceAlreadyExistsException: uriFile = pesImpl.uploadFile (source="C:/qatest/SampleFile.txt",target="/Demo/Drafts",versionFlag=True) print "File has been uploaded with new version created. URI for the uploaded file is: ", uriFile
行上面 Ptyhon 脚本,将会在 CADS 存储库中创建出/Demo/Drafts 的目录结构,并将本地文件 SampleFile.txt 上传到/Demo/Drafts 路径下。如果在创建过程中有异常,则会把异常信息输出到控制台(提示:所有 API 均可以通过 PESImpl 对象进行访问)。接下来将在命令行窗口执行该 Python 脚本,执行结果如图 11 所示。
图 11. Python 脚本执行结果
接下来将通过 Python 脚本,对上传的文件 SampleFile.txt 的权限进行批量管理,根据表 1 所提供的用户以及用户所在群组的信息,我们对群组 Group1 赋予读权限,此时该组内所以用户均具有读权限,另外,给 g1user1 单独赋予写权限,给 g1user2 单独赋予删除权限。具体的 Python 脚本如清单 12 所示:
清单 12. 管理文件权限
from pes.api.PESImpl import PESImpl pesImpl = PESImpl("admin", "spss", "host", "port") try: #为 Group1 赋读权限 bSuccessG1 = pesImpl.applySecurity (source="/Demo/Drafts/SampleFile.txt",principal="Group1",permission="READ",provider="Native") print("READ permission granted successfully to Group1./n") #为 g1user1 赋写权限 bSuccessG1User1 = pesImpl.applySecurity (source="/Demo/Drafts/SampleFile.txt",principal="g1user1",permission="WRITE",provider="Native") print("WRITE permission granted successfully to g1user1./n") #为 g1user2 赋删除权限 bSuccessG1User2 = pesImpl.applySecurity (source="/Demo/Drafts/SampleFile.txt",principal="g1user2",permission="DELETE",provider="Native") print("MODIFY permission granted successfully to g1user2./n") except: print("Apply security failed")
同样将该 Python 脚本在命令窗口执行,得到的结果如下图所示:
图 12. Python 脚本执行结果
为验证所有群组及组内用户对于该文件的权限,我们通过 CaDS 胖客户端 Deployment Manager 对该文件的权限进行查看,结果如下图所示。
图 13. SampleFile.txt 文件的权限
接下来将对 CaDS 存储库中的文件夹 Demo 的权限进行批量管理,并完成级联处理,包括 Demo 内的文件及文件夹。根据表 1,我们对群组 Group2 赋予写权限,并进行级联处理,使得 Group2 中的用户对 Demo 内的所有资源拥有同样的权限,另外,给 g2user1 赋予最高的修改权限,并级联至 Demo 内的所以资源。具体的 Python 脚本如清单 13 所示:
清单 13. 管理文件夹权限
from pes.api.PESImpl import PESImpl pesImpl = PESImpl("admin", "spss", "host", "port") try: #为 Group2 赋写权限 bSuccessG2 = pesImpl.applySecurity (source="/Demo",principal="Group2",permission="WRITE",provider="Native") print("WRITE permission granted successfully to Group2./n") #为 g2user1 赋修改许可权 bSuccessG2User1 = pesImpl.applySecurity (source="/Demo",principal="g2user1",permission="MODIFY_ACL",provider="Native") print("MODIFY permission granted successfully to g2user1./n") #对 Demo 上的权限级联处理 bSuccess = pesImpl.cascadeSecurity(source="/Demo") print("Cascade permission successfully./n except: print("Apply security failed")
将该 Python 脚本在命令窗口执行,得到的结果如下图所示:
图 14. Python 脚本执行结果
同样的,我们将通过 Deployment Manager 客户端对 CaDS 存储库中的文件夹/Demo 的权限进行查看,结果如图 15 所示,通过级联处理,Group2 及其组内用户对 Demo 内的文件及文件夹也拥有相同的权限,图 16 展示了/Demo/Draft/SampleFile.txt 的权限清单。
图 15. Demo 文件夹的权限
图 16. SampleFile.txt 文件的权限
通过上面这个示例可以看出,用户通过 Python 脚本调用 PESImpl 模块中所提供的 API,能够非常方便的完成对 CaDS 存储库中资源的管理,大大简化了复杂的操作任务,同时用户又可根据自身需求,定制相应的 Python 脚本从而对 CaDS 存储库灵活管理。
回页首
本文首先 Windows 平台为例,详细介绍了 IBM SPSS CaDS Essentials for Python 的安装步骤,包括环境要求以及 Python 的安装过程。接下来,又介绍了如何利用 Essentials for Python 所提供的命令行脚本对 CaDS 资源存储库中的资源进行管理,最后又介绍了如何利用 Essentials for Python 所提供的 API,与用户自身的 Python 脚本相结合,与 CaDS 资源库进行交互。