跳转至

Dag Controller

Dag Controller 是一款任务编排调度工具,可以编排调度有向无环图(DAG)类型的作业,该作业由多个任务组成,且任务之间存在先后关系,组成一个有向无环图(DAG)。

Dag Controller 可以结合 Nebula Analytics 进行复杂的图计算。例如 Dag Controller 将算法调用请求发送给 Nebula Analytics ,Nebula Analytics 保存结果至 Nebula Graph 或 HDFS,Dag Controller 再将上次的计算结果作为下一个算法任务的输入创建新的任务。

本文介绍如何使用 Dag Controller。

Enterpriseonly

仅企业版支持本功能。

前提条件

  • 已部署 2.2.x 或以上版本的 HDFS
  • 已安装 1.8 版本的 JDK。

准备工作

不同的环境安装包和命令略有区别,本文的准备工作如下:

  • 操作系统为 CentOS 7。
  • 如果 Nebula Analytics 和 Dag Controller 分别部署在多台机器,请确保机器网络互通。
  • 如果 Nebula Analytics 是分布式架构,请确保路径、端口等配置相同。

注意事项

  • BFS、SSSP 算法需要对参数root做校验,只支持一个上游组件,且必须要指定行和列。存在多个文件时,随机取一个,找不到行、列或者文件时直接报错。
  • 相似度算法,不限制上游组件的格式,但是需要指定列。存在多个文件时,随机叠加然后取前 N 条数据进行处理,指定了行和列、或者指定列不存在的话直接报错。

部署 Nebula Analytics

  1. 安装 libatomic、psmisc。

    $ sudo yum -y install libatomic psmisc
    
  2. 安装 Nebula Analytics。

    $ sudo rpm -ivh <analytics_package_name> --prefix <install_path>
    $ sudo chown <user>:<user> -R <install path>
    

    例如:

    $ sudo rpm -ivh nebula-analytics-3.2.0-centos.x86_64.rpm --prefix=/home/vesoft/nebula-analytics
    $ sudo chown vesoft:vesoft -R /home/vesoft/nebula-analytics
    
  3. 配置set_env.sh文件,路径为nebula-analytics/scripts/set_env.sh。配置正确的 Hadoop 路径和 JDK 路径。如果有多台机器,请确保路径一致。

    export HADOOP_HOME=<hadoop_path>
    export JAVA_HOME=<java_path>
    

部署 Dag Controller

  1. 配置 Dag Controller 机器 SSH 免密登录 Nebula Analytics 机器,以及 Nebula Analytics 集群内所有节点间的 SSH 相互免密登录。

    例如机器 A(Dag Controller)通过 SSH 免密登录至 Nebula Analytics 集群 B 中的机器 B-1。请在机器 A 上执行如下命令:

    //执行后按提示生成密钥,默认按回车即可。
    $ ssh-keygen -t rsa
    
    //将机器 A 的公钥文件安装到机器 B-1 对应的用户下,即可从机器 A 免密登录机器 B-1。
    $ ssh-copy-id -i ~/.ssh/id_rsa.pub <B_user>@<B_IP>
    

    按同样方法设置 A 免密登录机器 B-2、B-3 等,以及集群 B 内所有机器的互相免密登录。

  2. 添加以下内容至~/.bash_profile文件内,执行source ~/.bash_profile使其生效。

    eval $(ssh-agent)
    ssh-add ~/.ssh/id_rsa
    
  3. 安装 Dag Controller。

    $ sudo rpm -ivh <analytics_package_name> --prefix <install_path>
    $ sudo chown <user>:<user> -R <install path>
    

    例如:

    $ sudo rpm -ivh dag-ctrl-3.2.0-centos.x86_64.rpm --prefix=/home/vesoft/dag-ctrl
    $ sudo chown vesoft:vesoft -R /home/vesoft/dag-ctrl
    
  4. 配置dag-ctrl-api.yaml文件,路径为dag-ctrl/etc/dag-ctrl-api.yaml。配置 Nebula Analytics 机器的用户名及端口,如果有多台机器,请确保使用相同用户名。

    # Nebula Analytics 机器的用户名以及 SSH 端口。
    SSH:
      UserName: vesoft
      Port: 22
    
    #任务和作业的并行线程池大小。
    JobPool:
      Sleep: 3    # 3 秒检查一次有没有未执行的作业。
      Size: 3    # 同时可以执行 3 个作业。
    TaskPool:
      CheckStatusSleep: 1    # 1 秒检查一次任务状态。
      Size: 10    #同时可以执行 10 个任务。
    
    Dag:
      VarDataListMaxSize: 100    # 如果读取 HDFS 的列,则限制为每次 100 条数据。
    
  5. 配置tasks.yaml文件,路径为dag-ctrl/etc/tasks.yaml。配置算法文件的具体路径(exec_file参数),如果有多台机器,请确保路径一致。

  6. 启动 Dag Controller。

    $ cd <dag_ctrl_install_path>
    $ ./scripts/start.sh
    
  7. 查看 Dag Controller 的端口状态,确认是否启动成功。默认端口为9002,在dag-ctrl-api.yaml文件内设置。

    $ netstat -aon | grep 9002
    

下一步

Nebula Analytics 和 Dag Controller 都配置并启动成功后,在 Nebula Explorer 上进行资源配置后即可进行复杂图计算。详情参见资源配置

常见问题

如果 Graph 服务返回的查询结果数据量过大,会导致 Dag Controller 服务崩溃吗?

Dag Controller 服务仅仅提供调度功能,不会崩溃,但是数据量过大可能会导致 Nebula Analytics 服务读写 HDFS 或者 Nebula Graph 时内存不足而崩溃。

如果一个作业中的某个任务失败,能否从失败的任务开始重新执行?

暂不支持,只能整体重新执行。

如果任务结果保存很慢,或任务间数据传输很慢,如何加速?

Dag Controller 包含图查询组件和图计算组件。图查询是发送请求给 Graph 进程进行查询,因此只能增大 Graph 服务的内存进行加速;图计算是由 Nebula Analytics 提供的分布式节点进行计算,可以增大计算集群规模进行加速。

HDFS 服务器无法连接时,任务状态一直为running怎么办?

为 HDFS 连接设置超时时间、次数,配置如下:

<configuration>
<property>
    <name>ipc.client.connect.timeout</name>
    <value>3000</value>
</property>

<property>
    <name>ipc.client.connect.max.retries.on.timeouts</name>
    <value>3</value>
</property>
</configuration>

任务运行失败,报错Err:dial unix: missing address怎么办?

修改dag-ctrl/etc/dag-ctrl-api.yaml配置文件,配置 SSH 的UserName

任务运行失败,报错bash: /home/xxx/nebula-analytics/scripts/run_algo.sh: No such file or directory怎么办?

修改dag-ctrl/etc/tasks.yaml配置文件,配置算法执行路径exec_file

任务运行失败,报错/lib64/libm.so.6: version 'GLIBC_2.29' not found (required by /home/vesoft/jdk-18.0.1/jre/lib/amd64/server/libjvm.so)怎么办?

由于 JDK18 版本太新,而操作系统版本太旧,YUM无法下载GLIBC_2.29,可以安装 JDK1.8,请同步修改nebula-analytics/scripts/set_env.sh中的 JDK 地址。

任务运行失败,报错handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain怎么办?

重新配置.ssh文件夹及.ssh/authorized_keys文件的权限,.ssh文件夹权限为744.ssh/authorized_keys文件权限为600

任务运行失败,报错There are 0 Nebula Analytics available. clusterSize should be less than or equal to it怎么办?

可能是因为如下原因:

  • 未配置 Nebula Analytics。请按本文档配置 Nebula Analytics。
  • 已配置 Nebula Analytics,但是无法与 Dag Controller 联通。例如 地址错误、未配置 SSH、两个服务的启动用户不一致(导致 SSH 登录失败)等。

任务运行失败,报错broadcast.hpp:193] Check failed: (size_t)recv_bytes >= sizeof(chunk_tail_t) recv message too small: 0怎么办?

任务要处理的数据量过小,但是配置的计算节点数与进程数太多。需要在提交作业时设置较小的clusterSizeprocesses


最后更新: March 7, 2023