作业估算
如果您不确定应为作业使用哪个 计算池选择器,可以使用 Neo4j_Graph_Analytics.estimate_experimental 架构中的过程来估算作业。该架构镜像了算法过程,但不是计算结果,而是估算作业所需的内存量,并根据该内存需求提供计算池选择器建议。
估算作业
假设您想在存放于 EXAMPLE_DB.DATA_SCHEMA 架构中的图上运行 弱连通分量 算法。
CALL Neo4j_Graph_Analytics.graph.wcc('CPU_X64_XS', {
'project': {
'nodeTables': ['EXAMPLE_DB.DATA_SCHEMA.NODES'],
'relationshipTables': {
'EXAMPLE_DB.DATA_SCHEMA.RELATIONSHIPS': {
'sourceTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'targetTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'orientation': 'NATURAL'
}
}
},
'compute': { 'consecutiveIds': true },
'write': [{
'nodeLabel': 'NODES',
'outputTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS'
}]
});
示例中使用的计算池选择器是 CPU_X64_XS,它是可用的最小计算池选择器。根据图的大小,该选择器可能不足以运行作业。遗憾的是,只有在作业实际执行时才能得知这一点;即使我们能够投影图,计算仍可能因内存不足而失败。
为了更好地了解内存需求,我们可以改用 estimate 过程。
CALL Neo4j_Graph_Analytics.estimate_experimental.wcc('CPU_X64_XS', {
'project': {
'nodeTables': ['EXAMPLE_DB.DATA_SCHEMA.NODES'],
'relationshipTables': {
'EXAMPLE_DB.DATA_SCHEMA.RELATIONSHIPS': {
'sourceTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'targetTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES',
'orientation': 'NATURAL'
}
}
},
'compute': { 'consecutiveIds': true },
'write': [{
'nodeLabel': 'NODES',
'outputTable': 'EXAMPLE_DB.DATA_SCHEMA.NODES_COMPONENTS'
}]
});
正如您所见,过程的配置与 wcc 过程完全相同。需要注意的是,我们同样需要提供一个计算池选择器,因为这会触发一个作业来估算内存需求。不过,该作业不会投影图或计算结果,所以使用最小的池选择器是可以的。如果同时有更多用户使用该选择器,您可能需要 更改该池的计算节点数量。
运行此过程将返回与 wcc 过程相同的作业结果布局,只是 JOB_RESULT 不同。
| JOB_ID | JOB_STATUS | JOB_START | JOB_END | JOB_RESULT |
|---|---|---|---|---|
job_42 |
SUCCESS |
.. |
.. |
{
"arguments": {
"node_count": 10000000,
"node_label_count": 1,
"node_property_count": 1,
"relationship_count": 500000000,
"relationship_property_count": 1,
"relationship_type_count": 1
},
"estimation": {
"bytes_total": 6012198024
},
"recommendation": {
"pool_selector": "CPU_X64_M",
}
} |
JOB_RESULT 包含以下信息
-
arguments包含我们从节点表和关系表推断出的计数信息。这包括行数以及用于推断属性数量的列数。 -
estimation是估算作业的原始结果,包含运行作业所需的总字节数。 -
recommendation包含基于估算内存需求的推荐计算池选择器。
示例显示,作业大约需要 6 GB 内存才能运行,建议使用 CPU_X64_M 计算池选择器。CPU_X64_XS 计算池仅提供 6 GB 内存,但我们还需考虑操作系统和计算节点上其他进程所占用的内存。当然,作业仍会使用较小的计算池启动,但极有可能因内存不足而失败。
一旦得到结果,您可以将架构从 estimate_experimental 更改为 graph,并使用推荐的计算池选择器再次运行作业。