在minikube 上运行 graphscope
1.环境安装
安装docker环境。
安装minikube。https://minikube.sigs.k8s.io/docs/start/
python版本升级到 3.7 - 3.9。
安装GraphScope 客户端
1
2
3
4
5Requires the latest pip
pip3 install --upgrade pip
Current stable release
pip3 install --upgrade graphscope-client
2. 启动
2.1 minikube
启动 minikube
1
minikube start
minikube映射
1
minikube mount $HOME:/host
例如这里把 本机的home目录映射到minikube的 /host目录下。
参考 https://minikube.sigs.k8s.io/docs/handbook/mount/
mount 需要一直挂在终端,建议tmux启动
mount映射功能需要较新的Linux内核,我之前用3.x的内核失败了,后来升级成了5.x的内核就可以了。
minikube修改时区方法,在宿主机执行
1
2
3
4
5
6
7
8
9
10
11
12 > mkdir -p ~/.minikube/files/etc
> cp /etc/localtime ~/.minikube/files/etc
### 2.2 启动graphscope
```python
import graphscope
if __name__ == '__main__':
graphscope.set_option(show_log=True)
sess = graphscope.session()
print(sess)
第一次启动的时候会去拉取镜像,可能需要比较久
例如会看到这样的日志打印
1 | 2023-05-29 02:27:33,087 [INFO][kubernetes_launcher:553]: [gs-engine-cltlyf-0]: Pulling image "registry.cn-hongkong.aliyuncs.com/graphscope/interactive-executor:0.21.0" |
也可以提前在本机准备好镜像,然后导入到minikube中
以上面的镜像为例子
1 | 准备镜像 |
启动成功后 可以通过 kubectl get pods
看到,graphscope启动了4个pods
1 | [miku@centos7 gsremote]$ kubectl get pods |
参考https://graphscope.io/docs/v0.20.0/reference/session#session获取sess
如果遇到执行结束后,pods却还一直在运行,可以通过下面的命令删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # 找到当前的deployments
kubectl get deployments
# 删除 graphscope 相关的 deployments
kubectl delete deployments deployments_name
# 如果全部都是graphscope相关的 deployments,也可以直接删除所有
kubectl delete deployments --all
# 找到当前的statefulsets
kubectl get statefulsets
# 删除grahpscope相关的statefulsets
kubectl delete statefulset statefulset_name
# 如果全部都是rahpscope相关的statefulsets,也可以直接删除所有
kubectl delete statefulset --all
3. 图的导入
以p2p-network 为例子
参考:
- https://graphscope.io/docs/v0.20.0/zh/loading_graph#id3
- https://nbviewer.org/github/alibaba/GraphScope/blob/main/tutorials/zh/04_loading_graphs.ipynb
3.1 直接通过网络导入
映射准备
需要把本地的home目录最终映射到k8s的home目录,例如本地的用户是miku,home目录是 /home/miku。
需要把 /home/miku目录映射到k8s的/home/miku目录上。
可以这样做:
执行mount命令,映射本地/home/miku到minikube上的/home/miku
1 | minikube mount /home/miku:/home/miku |
在python代码中配置k8s上映射
我们需要把minikube上的/home/miku映射到k8s上的/home/miku
1 | k8s_volumes = { |
图的导入(完整代码)
1 | import graphscope |
最后可以看到图的结构打印
1 | oid_type: LONG |
3.2 本地离线导入
数据准备
我们可以提前准备好点和边的文件。
下载 graphscope p2p-networkd的数据 https://github.com/MikuSugar/data/blob/master/p2p_network.tar.gz
解压后放在一个目录上,例如我放在 /home/miku/test_data/p2p_network
目录内如下
1 | [miku@centos7 p2p_network]$ ll |
映射准备
目的是要让数据文件目录映射到k8s上,让graphscope能够读取到数据。
可以这样做
把本地目录映射到minikube上
1 | minikube mount /home/miku:/host |
在python代码中配置k8s上的映射
1 | k8s_volumes = { |
完整代码
1 | import graphscope |
这里导入的图的结构与3.1一致。
4. 运行算法
为了方便,下面都采用3.1的方法导入图,用sssp算法举例。
参考 https://graphscope.io/docs/v0.20.0/zh/analytics_engine
文档有一些问题,已经反馈给grapescope,下个版本修复(当前版本0.21.0)
4.1 运行内置算法
1 | import graphscope |
4.2 运行自定义pregel算法
1 | import graphscope |
4.3 运行自定义PIE算法
1 | import graphscope |
4.4 运行flash算法
这里以K-core算法为例子,参考 https://github.com/alibaba/GraphScope/tree/main/python/graphscope/analytical/app/flash
完整代码
1 | import graphscope |
flash算法编写参考 https://github.com/alibaba/GraphScope/tree/main/analytical_engine/apps/flash
5. 交互式运行
参考
- https://graphscope.io/docs/v0.20.0/zh/interactive_engine
- https://nbviewer.org/github/alibaba/GraphScope/blob/main/tutorials/zh/01_node_classification_on_citation_network.ipynb
完整代码
1 | import graphscope |