本文为您介绍Mars集群上的操作、MaxCompute读取表以及获取Mars UI地址等更多操作。

如果您需要了解开发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,请提工单申请。
    • min_worker_num:指当启动3个Worker后,即可返回Client对象,无需等待全部Worker都启动后再返回。

    当指定options.verbose=True时,新建Mars集群过程中会打印MaxCompute Instance的Logview、Mars UI以及Notebook地址。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表:
  • 读表
    通过o.to_mars_dataframe读取MaxCompute表,并返回 Mars DataFrame
    In [1]: df = o.to_mars_dataframe('test_mars')
    In [2]: df.head(6).execute()
    Out[2]:
           col1  col2
    0        0    0
    1        0    1
    2        0    2
    3        1    0
    4        1    1
    5        1    2
  • 写表
    通过o.persist_mars_dataframe(df, 'table_name')将Mars DataFrame保存为MaxCompute表。
    In [3]: df = o.to_mars_dataframe('test_mars')
    In [4]: df2 = df + 1
    In [5]: o.persist_mars_dataframe(df2, 'test_mars_persist')  # 保存Mars DataFrame。
    In [6]: o.get_table('test_mars_persist').to_df().head(6)  # 通过PyODPS DataFrame查看数据。
           col1  col2
    0        1    1
    1        1    2
    2        1    3
    3        2    1
    4        2    2
    5        2    3
  • 使用Mars集群自带的Jupyter NoteBook
    创建Mars集群时会自动创建一个Jupyter NoteBook以编写代码。新建的Notebook会自动创建Session,提交任务至Mars集群。
    import mars.dataframe as md
    md.DataFrame(mt.random.rand(10, 3)).sum().execute() # 在NoteBook中运行,execute方法自动提交到当前集群。因此在NoteBook中不需要显示创建Session。
    说明
    • 此Notebook不会自动保存,建议您根据需要自行保存。
    • 您也可以使用自己的NoteBook连接到集群,详情请参见使用已经创建的Mars集群

其它操作

  • 使用已经创建的Mars集群
    • 通过Instance ID重建Mars集群的Client。
      client = o.create_mars_cluster(instance_id=**instance-id**)
    • 如果只是想使用Mars,您可以指定Mars UI的地址,使用Mars Session连接。
      from mars.session import new_session
      new_session('**Mars UI address**').as_default() #设置为默认Session。
  • 获取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())
  • 获取Jupyter Notebook地址
    Mars集群创建时指定了options.verbose=True,集群会自动打印Jupyter Notebook地址。您也可以通过 client.get_notebook_endpoint()获取Jupyter Notebook地址。
    print(client.get_notebook_endpoint())