本文介绍如何使用阿里云Lindorm的RAY资源组,通过准备环境、提交作业处理数据并上传结果,提供作业状态监控与日志查看等功能。
RAY资源组目前处于邀测阶段,如有使用需求,请联系Lindorm技术支持(钉钉号:s0s3eg3)申请使用名额。
前提条件
已开通Lindorm宽表引擎。
已开通Lindorm计算引擎。
已开通RAY资源组。
已将客户端IP地址添加至Lindorm白名单。
步骤一:准备工作
登录Lindorm管理控制台。在左上角选择实例所属的地域。在实例列表页,单击目标实例ID或者目标实例所在行操作列的管理。
在实例详情页的配置信息区域,单击计算引擎操作列的资源组管理。
在资源组详情界面,将鼠标悬停在RAY资源组操作列的WebUI之上,获取资源组的WebUI地址,例如:
http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/
。在客户端安装RAY Client。以Python3为例,执行
pip3 install ray[default]
安装RAY Client。说明安装后,可执行
ray --version
验证是否安装成功。
步骤二:提交RAY作业
在客户端准备RAY作业。
本文以使用RAY资源组处理阿里云对象存储服务OSS中
test-bucket
空间下的test-data
文件为例,展示如何编写脚本处理OSS数据,并上传结果至OSS。以下是客户端ray_job_test
目录下编写的RAY作业逻辑脚本ray-oss-example.py
。import ray import sys from ossfs import OSSFileSystem import tempfile import ossfs ray.init() @ray.remote def process(oss_key: str, oss_secret: str, filename: str): print("Processing %s" % filename) fs = oss_filesystem(oss_key, oss_secret) # Download to local tmp_filename = tempfile.NamedTemporaryFile(delete=False).name fs.get_file(filename, tmp_filename) print("tmp file name is %s" % tmp_filename) with open(tmp_filename, 'rb') as f: content = f.read() print(content) # Put to OSS result_remote_filename = f"{filename}_result" fs.put_file(tmp_filename, result_remote_filename) return "success" def oss_filesystem(oss_key: str, oss_secret: str) -> OSSFileSystem: return ossfs.OSSFileSystem( endpoint="oss-cn-hangzhou-internal.aliyuncs.com", # OSS Endpoint key=oss_key, secret=oss_secret ) if __name__ == "__main__": if (len(sys.argv) < 2): raise ValueError("python %s oss_key oss_secret" % __file__) oss_key = sys.argv[1] oss_secret = sys.argv[2] base = "/test-bucket/test-data/" # /<bucketname>/path fs = oss_filesystem(oss_key, oss_secret) files = [item['name'] for item in fs.ls(base) if item['name'] != base] for file in files: print("Head processing %s" % file) result = ray.get(process.remote(oss_key, oss_secret, file)) print(f"{file} is processed, status is {result}") ray.shutdown()
参数说明
参数
示例
说明
endpoint
oss-cn-hangzhou-internal.aliyuncs.com
OSS的Endpoint。获取Endpoint,请参见OSS地域和访问域名。
base
/test-bucket/test-data/
需要处理的 OSS 文件路径。
提交作业到指定RAY资源组。
进入作业所在路径:执行
cd ray_job_test
。提交作业:执行
ray job submit --runtime-env-json '{"working_dir": "."}' --address RAY_ADDRESS -- python my_job.py oss_key oss_secret
。参数说明
参数
示例
说明
RAY_ADDRESS
http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/
指定RAY资源组的WebUI访问地址。
my_job.py
ray-oss-example.py
执行脚本文件名。
oss_key
yourAccessKeyID
访问OSS文件的阿里云账号或RAM用户的AccessKey ID和 AccessKey Secret。如何获取AccessKey ID和AccessKey Secret,请参见获取AccessKey。
oss_secret
yourAccessKeySecret
示例
ray job submit --runtime-env-json '{"pip": ["ossfs"], "working_dir": "."}' --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ -- python ray-oss-example.py yourAccessKeyID yourAccessKeySecret
返回已提交作业的
SUBMISSION_ID
,如raysubmit_gmSnPSFqmEXG****
,查看作业状态命令行中需使用该参数。
步骤三:作业运维
您可以通过以下两种方式查看作业运行状态:
客户端命令行
查看作业运行状态。
ray job status --address RAY_ADDRESS SUBMISSION_ID
示例:
ray job status --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****
查看作业日志。
ray job logs --address RAY_ADDRESS SUBMISSION_ID
示例:
ray job logs --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****
查看作业列表。
ray job list --address RAY_ADDRESS
示例:
ray job list --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/
终止作业。
ray job stop --address RAY_ADDRESS SUBMISSION_ID
示例:
ray job stop --address http://alb-57k7r581oht8rd****.cn-hangzhou.alb.aliyuncsslb.com/ray/raycg/dashboard/ raysubmit_gmSnPSFqmEXG****
Web界面
在浏览器中访问RAY资源组的WebUI地址,通过RAY Dashboard实时监控作业运行状态、作业日志和作业列表。