本文为您介绍Mars集群操作,并提供读写MaxCompute表和获取Mars UI、Logview及Jupyter Notebook地址的操作方法。

Mars集群操作

  • 创建Mars集群
    执行如下命令创建Mars集群。创建Mars集群的过程较慢,请您耐心等待。
    from odps import options
    options.verbose = True  
    #在DataWorks PyODPS 3中已经设置上述命令,因此使用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个,否则会导致镜像服务器负载过大。如果您新建Worker超过30个,请提工单申请。
    • min_worker_num:当启动min_worker_num个Worker后,即可返回Client对象,不需要等待全部Worker都启动后再返回Client对象。

    当指定options.verbose=True时,新建Mars集群过程中会打印MaxCompute Instance的Logview、Mars UI和Jupyter 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用于编写代码。新建的Jupyter NoteBook会自动创建Session,并提交作业至Mars集群。
    import mars.dataframe as md
    md.DataFrame(mt.random.rand(10, 3)).sum().execute() # 在Jupyter 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地址
    如果创建Mars集群时指定了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())