本文为您介绍Mars集群上的操作、MaxCompute读取表以及获取Mars UI地址等更多操作。
如果您需要了解开发Mars作业的详细操作指导,详情请参见Mars。
前提条件
已完成Mars运行环境准备。具体操作,请参见准备工作。
Mars集群操作
创建Mars集群
执行如下命令创建Mars集群。Mars集群的创建过程较慢,请您耐心等待。
from odps import options options.verbose = True #在DataWorks PyODPS3中已经设置上述命令,因此使用PyODPS 3节点无需执行前两行代码。 client = o.create_mars_cluster(5, 4, 16, min_worker_num=3)
参数说明如下:
5:指定该集群的Worker数量。此集群Worker数量为5。
4:每个Worker的核数。此处每个Worker为4核。
16:每个Worker的内存大小。此处每个Worker内存为16 GB。
说明申请的单个Worker内存需要大于1 GB,CPU核数和内存的最佳比例为1:4,例如单Worker配置为4核、16 GB。
新建Worker个数不应超过30个,否则会对镜像服务器造成压力。如果需要超过30个Worker,请搜索(钉钉群号:11782920)加入MaxCompute开发者社区钉群联系MaxCompute技术支持团队申请。
min_worker_num:指当启动3个Worker后,即可返回Client对象,无需等待全部Worker都启动后再返回。
当指定
options.verbose=True
时,新建Mars集群过程中会打印MaxCompute Instance的Logview、Mars UI。Mars UI可以用于连接Mars集群,也可以用于查看集群、任务状态。提交作业
创建Mars集群时会设置默认Session,通过
.execute()
方法执行任务,任务会被自动提交至集群。import mars.dataframe as md import mars.tensor as mt md.DataFrame(mt.random.rand(10, 3)).execute() #使用execute方法自动提交任务至创建的集群。
停止并释放集群
当Mars集群超过3天会被自动释放。不再需要使用Mars集群时,您可以通过调用
client.stop_server()
手动释放。client.stop_server()
MaxCompute表读写
Mars可以直接读写MaxCompute表。本文以读写test_mars
和test_mars_persist
表为例,test_mars
和test_mars_persist
表的建表语句如下。
CREATE TABLE test_mars(col1 INT,col2 INT);
INSERT into test_mars(col1, col2) VALUES (1, 2);
INSERT into test_mars(col1, col2) VALUES (3, 4);
INSERT into test_mars(col1, col2) VALUES (5, 6);
CREATE TABLE test_mars_persist(col1 INT,col2 INT);
读表
通过
o.to_mars_dataframe
读取MaxCompute表,并返回 Mars DataFrame。df = o.to_mars_dataframe('test_mars') df.head(3).execute()
返回结果如下。
col1 col2 0 1 2 1 3 4 2 5 6
写表
通过
o.persist_mars_dataframe(df, 'table_name')
将Mars DataFrame保存为MaxCompute表。df = o.to_mars_dataframe('test_mars') df2 = df + 1 o.persist_mars_dataframe(df2, 'test_mars_persist') # 保存Mars DataFrame。 o.get_table('test_mars_persist').to_df().head(6) # 通过PyODPS DataFrame查看数据。
返回结果如下。
col1 col2 0 2 3 1 4 5 2 6 7
其它操作
使用已经创建的Mars集群
通过Instance ID重建Mars集群的Client。
client = o.create_mars_cluster(instance_id=**instance-id**)
获取Mars UI地址
Mars集群创建时指定了
options.verbose=True
,集群会自动打印Mars UI地址。您也可以通过client.endpoint
获取Mars UI。print(client.endpoint)
获取Logview地址
创建集群时指定了
options.verbose=True
,集群会自动打印Logview。您也可以通过client.get_logview_address()
获取Logview地址。print(client.get_logview_address())