使用示例

一般,您可以按以下步骤使用 nebula-algorithm:

  1. 参考配置文件修改 nebula-algorithm 的配置。
  2. 运行 nebula-algorithm。

本文以一个示例说明如何使用 nebula-algorithm。

示例环境

  • 三台虚拟机,配置如下:
    • CPU:Intel(R) Xeon(R) Platinum 8260M CPU @ 2.30GHz
    • Processors:32
    • CPU Cores:16
    • 内存:128 GB
  • 软件环境:
    • Spark:spark-2.4.6-bin-hadoop2.7 三个节点集群
    • yarn V2.10.0:三个节点集群
    • Nebula Graph V1.2.1:分布式部署,默认配置

示例数据

在本示例中,Nebula Graph 图空间名称为 algoTest,Schema 要素如下表所示。

要素名称属性
标签PERSON
边类型FRIENDlikeness(double)

前提条件

在操作之前,您需要确认以下信息:

  • 已经完成 nebula-algorithm 编译。详细信息参考 编译 nebula-algorithm
  • Nebula Graph 数据库中已经有图数据。您可以使用不同的方式将其他来源的数据导入 Nebula Graph 数据库中,例如 Spark Writer
  • 当前机器上已经安装 Spark 并已启动 Spark 服务。

第 1 步. 修改配置文件

根据项目中的 src/main/resources/application.conf 文件修改 nebula-algorithm 配置。

  1. {
  2. # Spark 相关设置
  3. spark: {
  4. app: {
  5. # Spark 应用程序的名称,可选项。默认设置为您即将运行的算法名称,例如 PageRank
  6. name: PageRank
  7. # Spark 中分区数量,可选项。
  8. partitionNum: 12
  9. }
  10. master: local
  11. # 可选项,如果这里未设置,则在执行 spark-submit spark 任务时设置
  12. conf: {
  13. driver-memory: 20g
  14. executor-memory: 100g
  15. executor-cores: 3
  16. cores-max:6
  17. }
  18. }
  19. # Nebula Graph 相关配置
  20. nebula: {
  21. # 必需。Meta 服务的信息
  22. addresses: "127.0.0.1:45500" # 如果有多个 Meta 服务复本,则以英文逗号隔开
  23. user: root
  24. pswd: nebula
  25. space: algoTest
  26. # 必需。创建图空间时设置的分区数量。如果创建图空间时未设置分区数,则设置为默认值 100
  27. partitionNumber: 100
  28. # 必需。Nebula Graph 的边类型,如果有多种边类型,则以英文逗号隔开
  29. labels: ["FRIENDS"]
  30. hasWeight: true
  31. # 如果 hasWeight 配置为 true,则必须配置 weightCols。根据 labels 列出的边类型,按顺序在 weightCols 里设置对应的属性,一种边类型仅对应一个属性
  32. # 说明:nebula-algorithm 仅支持同构图,所以,weightCols 中列出的属性的数据类型必须保持一致而且均为数字类型
  33. weightCols: ["likeness"] # 如果 labels 里有多种边类型,则相应设置对应的属性,属性之间以英文逗号隔开
  34. }
  35. algorithm: {
  36. # 指定即将执行的算法,可以配置为 pagerank 或 louvain
  37. executeAlgo: louvain
  38. # 指定算法结果的存储路径
  39. path: /tmp
  40. # 如果选择的是 PageRank,则配置 pagerank 相关参数
  41. #pagerank: {
  42. # maxIter: 20
  43. # resetProb: 0.15 # 默认值为 0.15
  44. #}
  45. # 如果选择的是 louvain,则配置 louvain 相关参数
  46. #louvain: {
  47. # maxIter: 20
  48. # internalIter: 10
  49. # tol: 0.5
  50. #}
  51. }
  52. }

第 2 步. 执行 nebula-algorithm

运行以下命令,提交 nebula-algorithm 应用程序。

  1. spark-submit --master "local" --class com.vesoft.nebula.tools.algorithm.Main /your-jar-path/nebula-algorithm-1.x.y.jar -p /your-application.conf-path/application.conf

其中,

  • --master:指定 Spark 集群中Master 进程的 URL。详细信息,参考 master-urls
  • --class:指定 Driver 主类。
  • 指定 nebula-algorithm JAR 文件的路径,JAR 文件版本号以您实际编译得到的 JAR 文件名称为准。
  • -p:Spark 配置文件文件路径。
  • 其他:如果您未在配置文件中设置 Spark 的任务资源分配(conf)信息,您可以在这个命令中指定。例如,本示例中,--driver-memory=20G --executor-memory=100G --executor-cores=3

测试结果

按本示例设置的 Spark 任务资源分配,对于一个拥有一亿个数据的数据集:

  • PageRank 的执行时间(PageRank 算法执行时间)为 21 分钟
  • Louvain 的执行时间(Reader + Louvain 算法执行时间)为 1.3 小时