ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

搭建xorbits容器集群,大规模数据去重利器

2026/8/11 18:25:54 拓冰建站 浏览量
搭建xorbits容器集群,大规模数据去重利器

大致步骤

机器免密
pdsh机器安装
容器启动
去重任务执行

机器免密

在集群物理机上主节点上生成秘钥

# 秘钥生成在/root/.ssh 目录
ssh-keygen

这里采用一个偷懒的做法所有机器共用一套秘钥
新建一个expect脚本ssh_pass.sh

#!/usr/bing/expect -f
set i [lindex $argv 0]
spawn scp -r /root/.ssh 192.168.112.${i}:/root/
expect{"yes/no" {send yes\r}"password:" {send "your password\r"}
}expect{"yes/no" {send yes\r}"password:" {send "your password"}
}

expect重复两次的原因是因为第一遍登录需要确认是否要记住机器,第二遍是自动输入密码,\r是输入回车
使用时只用执行

#将本机秘钥拷贝到192.168.112.20,实现本机对192.168.112.20的免密
./ssh_pass.sh 20

机器较少的话可以手动执行复制秘钥

安装pdsh

apt update
apt install pdsh# 常规用法介绍
# 在机器192.168.112.[21-30]上执行 ls 命令
#pdsh -w ssh:192.168.112.[20-30]  ls

编写容器启动脚本

master_node.sh

docker run -itd --gpus=all --rm --ipc=host --net=host -v /data:/data --name xorbits_dedup xorbits_dedup:v1 bash /data/start_master.sh

start_master.sh

local_ip =`ifconfig | grep 192.168.112 | awk '{print $2}' `
xorbits-supervisor -H ${local_ip} -p 7001 -w 7005

worker_node.sh

docker run -itd --gpus=all --rm --ipc=host --net=host -v /data:/data --name xorbits_dedup xorbits_dedup:v1 bash /data/start_worker.sh

start_worker.sh -s 后的参数替换成你自己的master_node的ip

local_ip =`ifconfig | grep 192.168.112 | awk '{print $2}' `
xorbits-worker -H ${local_ip} -p 7001  -s 192.168.112.20:7001

启动机器

在主节点(192.168.112.20)上执行

# 启动主节点
sh master_node.sh
#从节点
pdsh -w ssh:192.168.112.[21-30] sh worker_node.sh

在一台有浏览器的主机上查看集群运行状态
192.168.112.20:7005

去重

官方文档地址:https://doc.xorbits.io/en/latest/getting_started/index.html

import numpy as np
import xorbits.pandas as pd
from xorbits.experimental import dedupxorbits.init("http://192.168.112.20:7005")words = list("abcdefghijklmnopqrstuvwxyz")
df = pd.DataFrame({"text": [" ".join(["".join(np.random.choice(words, 5)) for i in range(50)])for _ in np.arange(10)]* 2,}
)
res = dedup(df, col="text", method="exact") # for 'exact' method
res = dedup(df, col="text", method="minhash", threshold=0.8, num_perm=128, min_length=5, ngrams=5, seed=42) # for 'minhash' method