The HugeGraph-Computer is a distributed graph processing system for HugeGraph (OLAP). It is an implementation of Pregel. It runs on a Kubernetes(K8s) framework.(It focuses on supporting graph data volumes of hundreds of billions to trillions, using disk for sorting and acceleration, which is one of the biggest differences from Vermeer)
Features
Support distributed MPP graph computing, and integrates with HugeGraph as graph input/output storage.
Based on the BSP (Bulk Synchronous Parallel) model, an algorithm performs computing through multiple parallel iterations; every iteration is a superstep.
Auto memory management. The framework will never be OOM(Out of Memory) since it will split some data to disk if it doesn’t have enough memory to hold all the data.
The part of edges or the messages of super node can be in memory, so you will never lose it.
You can load the data from HDFS or HugeGraph, or any other system.
You can output the results to HDFS or HugeGraph, or any other system.
Easy to develop a new algorithm. You just need to focus on vertex-only processing just like as in a single server, without worrying about message transfer and memory/storage management.
2 Dependency for Building/Running
2.1 Install Java 11 (JDK 11)
Must use ≥ Java 11 to run Computer, and configure by yourself.
Be sure to execute the java -version command to check the jdk version before reading
3 Get Started
3.1 Run PageRank algorithm locally
To run the algorithm with HugeGraph-Computer, you need to install Java 11 or later versions.
You also need to deploy HugeGraph-Server and Etcd.
There are two ways to get HugeGraph-Computer:
Download the compiled tarball
Clone source code then compile and package
3.1.1 Download the compiled archive
Download the latest version of the HugeGraph-Computer release package:
wget https://downloads.apache.org/hugegraph/${version}/apache-hugegraph-computer-incubating-${version}.tar.gz
tar zxvf apache-hugegraph-computer-incubating-${version}.tar.gz -C hugegraph-computer
3.1.2 Clone source code to compile and package
Clone the latest version of HugeGraph-Computer source package:
3.2.4 Wait for hugegraph-computer-operator&etcd-server deployment to complete
kubectl get pod -n hugegraph-computer-operator-system
NAME READY STATUS RESTARTS AGE
hugegraph-computer-operator-controller-manager-58c5545949-jqvzl 1/1 Running 0 15h
hugegraph-computer-operator-etcd-28lm67jxk5 1/1 Running 0 15h
3.2.5 Submit a job
For more information about the computer CRD, see Computer CRD
cat <<EOF | kubectl apply --filename -apiVersion:hugegraph.apache.org/v1kind:HugeGraphComputerJobmetadata:namespace:hugegraph-computer-operator-systemname:&jobNamepagerank-samplespec:jobId:*jobNamealgorithmName:page_rank # ✅ Correct: use underscore format (matches algorithm implementation)image:hugegraph/hugegraph-computer:latestjarFile:/hugegraph/hugegraph-computer/algorithm/builtin-algorithm.jarpullPolicy:AlwaysworkerCpu:"4"workerMemory:"4Gi"workerInstances:5computerConf:job.partitions_count:"20"algorithm.params_class:org.apache.hugegraph.computer.algorithm.centrality.pagerank.PageRankParamshugegraph.url:http://${hugegraph-server-host}:${hugegraph-server-port}hugegraph.name:hugegraphEOF
Complete Example with Advanced Features:
cat <<EOF | kubectl apply --filename -apiVersion:hugegraph.apache.org/v1kind:HugeGraphComputerJobmetadata:namespace:hugegraph-computer-operator-systemname:&jobNamepagerank-advancedspec:jobId:*jobNamealgorithmName:page_rank # ✅ Correct: underscore formatimage:hugegraph/hugegraph-computer:latestjarFile:/hugegraph/hugegraph-computer/algorithm/builtin-algorithm.jarpullPolicy:Always# Resource limitsmasterCpu:"2"masterMemory:"2Gi"workerCpu:"4"workerMemory:"4Gi"workerInstances:5# JVM optionsjvmOptions:"-Xmx3g -Xms3g -XX:+UseG1GC"# Environment variables (optional)envVars:- name:REMOTE_JAR_URIvalue:"http://example.com/custom-algorithm.jar"# Download custom algorithm JAR- name:LOG_LEVELvalue:"INFO"# Computer configurationcomputerConf:# Job settingsjob.partitions_count:"20"# Algorithm parameters (⚠️ Required)algorithm.params_class:org.apache.hugegraph.computer.algorithm.centrality.pagerank.PageRankParamspage_rank.alpha:"0.85"# PageRank damping factor# HugeGraph connectionhugegraph.url:http://hugegraph-server:8080hugegraph.name:hugegraphhugegraph.username:""# Fill if authentication is enabledhugegraph.password:""# BSP configuration (⚠️ System-managed in K8s, do not override)# bsp.etcd_endpoints is automatically set by operatorbsp.max_super_step:"20"bsp.log_interval:"30000"# Snapshot configuration (optional)snapshot.write:"true"# Enable snapshot writingsnapshot.load:"false"# Do not load from snapshot this timesnapshot.name:"pagerank-snapshot-v1"snapshot.minio_endpoint:"http://minio:9000"snapshot.minio_access_key:"minioadmin"snapshot.minio_secret_key:"minioadmin"snapshot.minio_bucket_name:"hugegraph-snapshots"# Output configurationoutput.result_name:"page_rank"output.batch_size:"500"output.with_adjacent_edges:"false"EOF
Configuration Notes:
Configuration Key
⚠️ Important Notes
algorithmName
Must use page_rank (underscore format), matches the algorithm’s name() method return value
bsp.etcd_endpoints
System-managed in K8s - automatically set by operator, do not override in computerConf
algorithm.params_class
Required - must specify for all algorithms
REMOTE_JAR_URI
Optional environment variable to download custom algorithm JAR from remote URL
snapshot.*
Optional - enable snapshots for checkpoint recovery or repeated computations
3.2.6 Show job
kubectl get hcjob/pagerank-sample -n hugegraph-computer-operator-system
NAME JOBID JOBSTATUS
pagerank-sample pagerank-sample RUNNING
3.2.7 Show log of nodes
# Show the master logkubectl logs -l component=pagerank-sample-master -n hugegraph-computer-operator-system
# Show the worker logkubectl logs -l component=pagerank-sample-worker -n hugegraph-computer-operator-system
# Show diagnostic log of a job# NOTE: diagnostic log exist only when the job fails, and it will only be saved for one hour.kubectl get event --field-selector reason=ComputerJobFailed --field-selector involvedObject.name=pagerank-sample -n hugegraph-computer-operator-system
3.2.8 Show success event of a job
NOTE: it will only be saved for one hour
kubectl get event --field-selector reason=ComputerJobSucceed --field-selector involvedObject.name=pagerank-sample -n hugegraph-computer-operator-system
3.2.9 Query algorithm results
If the output to Hugegraph-Server is consistent with Locally, if output to HDFS, please check the result file in the directory of /hugegraph-computer/results/{jobId} directory.
3.3 Local Mode vs Kubernetes Mode
Understanding the differences helps you choose the right deployment mode for your use case.
Feature
Local Mode
Kubernetes Mode
Configuration
conf/computer.properties file
CRD YAML computerConf field
Etcd Management
Manual deployment of external etcd
Operator auto-deploys etcd StatefulSet
Worker Scaling
Manual start of multiple processes
CRD workerInstances field auto-scales
Resource Isolation
Shared host resources
Pod-level CPU/Memory limits
Remote JAR
JAR_FILE_PATH environment variable
CRD remoteJarUri or envVars.REMOTE_JAR_URI
Log Viewing
Local logs/ directory
kubectl logs command
Fault Recovery
Manual process restart
K8s auto-restarts failed pods
Use Cases
Development, testing, small datasets
Production, large-scale data
Local Mode Prerequisites:
Java 11+
HugeGraph-Server running on localhost:8080
Etcd running on localhost:2379
K8s Mode Prerequisites:
Kubernetes cluster (version 1.16+)
HugeGraph-Server accessible from cluster
HugeGraph-Computer Operator installed
Configuration Key Differences:
# Local Mode (computer.properties)bsp.etcd_endpoints=http://localhost:2379 # ✅ User-configuredjob.workers_count=4 # User-configured
# K8s Mode (CRD)spec:workerInstances:5# Overrides job.workers_countcomputerConf:# bsp.etcd_endpoints is auto-set by operator, do NOT configurejob.partitions_count:"20"
3.4 Common Troubleshooting
3.4.1 Configuration Errors
Error: “Failed to connect to etcd”
Symptoms: Master or Worker cannot connect to etcd
Local Mode Solutions:
# Check configuration key name (common mistake)grep "bsp.etcd_endpoints" conf/computer.properties
# Should output: bsp.etcd_endpoints=http://localhost:2379# ❌ WRONG: bsp.etcd.url (old/incorrect key)# ✅ CORRECT: bsp.etcd_endpoints# Test etcd connectivitycurl http://localhost:2379/version
K8s Mode Solutions:
# Check Operator etcd servicekubectl get svc hugegraph-computer-operator-etcd -n hugegraph-computer-operator-system
# Verify etcd pod is runningkubectl get pods -n hugegraph-computer-operator-system -l app=hugegraph-computer-operator-etcd
# Should show: Running status# Test connectivity from worker podkubectl exec -it pagerank-sample-worker-0 -n hugegraph-computer-operator-system -- \
curl http://hugegraph-computer-operator-etcd:2379/version
Error: “Algorithm class not found”
Symptoms: Cannot find algorithm implementation class
Cause: Incorrect algorithmName format
# ❌ WRONG formats:algorithmName:pageRank # Camel casealgorithmName:PageRank # Title case# ✅ CORRECT format (matches PageRank.name() return value):algorithmName:page_rank # Underscore lowercase
Verification:
# Check algorithm implementation in source code# File: computer-algorithm/.../PageRank.java# Method: public String name() { return "page_rank"; }
Error: “Required option ‘algorithm.params_class’ is missing”