如何在 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 的默认端口以避免可能的干扰
我想使用 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 的默认端口以避免可能的干扰