【大数据分析】graphscope开发环境搭建

基础环境搭建

虽然Jetbrains的pycharm好用,但是开发graphscope我个人建议还是用jupyterlab。因为graphscope(我用的是0.16.0)的API只能用于Linux,所以如果要用Pycharm,操作系统层面就要带图形化界面。而我只能用纯净版的Linux操作系统,所以使用能远程连接jupyterlab比较好。

如何快速安装k8s,以及jupyterlab开发环境
graphscope依赖于k8s环境,关于k8s的部署安装可以参考
【部署与运维】sealos k8s 的安装和使用
我们使用jupyterlab进行开发
【大数据分析】基于virtualenv和jupyterlab搭建远程开发环境

使用sealos安装helm

root@master:~# sealos run labring/helm:v3.8.2

基于helm安装graphscope

配置helm的graphscope依赖

root@master:~# helm repo add graphscope https://graphscope.oss-cn-beijing.aliyuncs.com/charts/

然后update一下。
安装graphscope

root@master:~# helm install graphscope graphscope/graphscope

graphscope的安装对配置有一定的要求,例如所运行的cpu内核数>=4,内存>=8等,还至少两个worker。否则使用kubectl describe pod命令可以查看到pod并没有真正运行。

查看graphscope在k8s中的service

查看k8s中的服务,可以看到graphscope的service已经建立。

root@master:~# kubectl get svc
NAME                             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                          AGE
graphscope-coordinator-service   NodePort    10.96.0.13           59001:30922/TCP,8888:30080/TCP   2m1s
kubernetes                       ClusterIP   10.96.0.1            443/TCP                          19m

k8s中sevice的作用(备忘):
(1)使得集群内部可以访问pod。
(2)使用 NodePort 或者 LoadBalancer 类型的 Service,外部网络也可以访问该pod。
(3)每个 service 会创建出来一个虚拟 ip,通过访问 vip:port 就能获取服务的内容(vip是虚拟ip,用于内部访问,外部无法访问的)。

查看graphscope在k8s中的pod

root@master:~# kubectl get pod
NAME                                      READY   STATUS              RESTARTS   AGE
graphscope-coordinator-744bdb9cf7-fksf6   0/2     ContainerCreating   0          2m25s

可以看到此时的graphscope的pod并没有准备好,进一步用一下命令,可以看到第一次安装graphscope会有一个较长的拉取镜像(pulling image)的过程。
(这里关于如何修改如下中,graphscope的registry.cn-hongkong.aliyuncs.com镜像源,我还没有找到方法。有找到的读者希望可以指教,我是跨过了一个中秋假期回来才发现pull完的,放假前以为卡住没戏了,回来一看发现pull了两个半小时)

root@master:~# kubectl describe pod graphscope-coordinator-744bdb9cf7-fksf6
......省略
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m44s  default-scheduler  Successfully assigned default/graphscope-coordinator-744bdb9cf7-fksf6 to worker2
  Normal  Pulling    117s   kubelet            Pulling image "registry.cn-hongkong.aliyuncs.com/graphscope/graphscope:0.16.0

成功后再查看pods

root@master:~#  kubectl get pods
NAME                                      READY   STATUS    RESTARTS         AGE
graphscope-coordinator-744bdb9cf7-fksf6   2/2     Running   12 (3d12h ago)   3d15h
gs-engine-graphscope-8pdnl                2/2     Running   0                3d12h
gs-engine-graphscope-hsl5d                2/2     Running   0                3d12h
gs-etcd-graphscope-0                      1/1     Running   0                3d12h
gs-etcd-graphscope-1                      1/1     Running   0                3d12h
gs-etcd-graphscope-2                      1/1     Running   0                3d12h

此时我们可以查看使用graphscope-client需要连接的graphscope服务地址。

root@master:~# export NODE_IP=$(kubectl --namespace default  get pod -l graphscope.coordinator.name=graphscope-coordinator --no-headers=true | awk '/ /{print $1}' | xargs kubectl -o jsonpath="{.status.hostIP}")
root@master:~# export NODE_PORT=$(kubectl --namespace default get services -o jsonpath="{.spec.ports[0].nodePort}" graphscope-coordinator-service)
root@master:~# echo "GraphScope service listen on ${NODE_IP}:${NODE_PORT}"
GraphScope service listen on 172.16.11.99:30922

接着我们在jupyterlab上写一个样例代码

import graphscope
sess = graphscope.session(addr="172.16.11.99:30922")
print(sess)

执行可以得到下面这个结果

{'status': 'active', 'type': 'k8s', 'engine_hosts': 'gs-engine-graphscope-8pdnl,gs-engine-graphscope-hsl5d', 'namespace': 'default', 'cluster_type': '1', 'session_id': 'session_dfzwgkuz', 'num_workers': 2, 'coordinator_endpoint': '172.16.11.99:30922', 'engine_config': {'networkx': 'ON', 'vineyard_socket': '/tmp/vineyard_workspace/vineyard.sock', 'vineyard_rpc_endpoint': '172.16.11.99:30868', 'enable_java_sdk': 'ON', 'vineyard_service_name': 'gs-vineyard-service-graphscope', 'mars_endpoint': None}}

你可能感兴趣的:(图,kubernetes,大数据)