如何在 HPC 上访问和查询 mongodb

How to access and query mongodb on HPC

我想使用 pymongo 将查询并行化到 MongoDB 数据库。我正在使用一个 HPC 系统,它使用 Slurm 作为工作负载管理器。我有一个在单个节点上运行良好的设置,但当任务分布在多个节点时失败。

我知道问题是 mongodb 绑定到我启动它的节点,因此其他节点无法连接到它。

我特别想知道在使用多个 HPC 节点时如何启动然后连接到 mongodb 服务器。谢谢!

一些额外的细节:

在启动我的 python 脚本之前,我会像这样启动 mongodb:

numactl --interleave=all mongod --dbpath=database &

然后我收到警告消息:

** WARNING: This server is bound to localhost.
**          Remote systems will be unable to connect to this server. 
**          Start the server with --bind_ip <address> to specify which IP 
**          addresses it should serve responses from, or with --bind_ip_all to
**          bind to all interfaces. If this behavior is desired, start the
**          server with --bind_ip 127.0.0.1 to disable this warning.

在我的 python 脚本中,我有一个 worker 函数,每个处理器 运行。它的基本结构如下:

def worker(args):
    cl = pymongo.MongoClient()
    db = cl.mydb
    collection = db['mycol']
    query = {}
    result = collection.find_one(query)
    # now do some work...

警告消息提到 --bind_ip <address>。要知道计算节点的 IP 地址,最简单的解决方案是使用 hostname -i 命令。所以在你的提交脚本中,try

numactl --interleave=all mongod --dbpath=database --bind_ip $(hostname -i) &

但是,您的 Python 脚本还必须知道 MongoDB 所在节点的 IP 地址 运行ning:

def worker(args):
    cl = pymongo.MongoClient(host=<IP of MongoDB Server>)
    db = cl.mydb
    collection = db['mycol']
    query = {}
    result = collection.find_one(query)
    # now do some work...

您需要根据您希望如何将信息传递给 Python 脚本来调整 <IP of MongoDB Server> 部分。它可以通过命令行参数,通过环境,通过文件等。

不要忘记在分配的所有节点上使用 srun 到 运行 python 脚本,否则您将需要在 python 中实现该功能脚本本身。

如果您有多个 运行ning.

,请不要犹豫,在作业之间更改 MongoDB 的默认端口以避免可能的干扰