HugeGraph-Spark Quick Start

1 项目依赖

HugeGraph-Spark依赖hugegraph 和 spark-2.1.1,需要添加相关项目依赖:

2 下载 HugeGraph-Spark

提供两种方式下载hugespark:

  • 直接下载具有hugespark功能的spark安装包,然后解压

    1. wget https://github.com/hugegraph/hugegraph-spark/releases/download/v${version}/hugegraph-spark-${version}.tar.gz
    2. tar -zxvf hugegraph-spark-${version}.tar.gz
  • 下载源码,编译hugespark jar包,配置本机spark;

2.1 源码编译

下载spark-2.1.1,解压spark(Spark文档参考),删除过期的guava.jar包

  1. rm -rf jars/guava-14.0.1.jar
  2. rm -rf jars/jackson-module-scala_2.11-2.6.5.jar
  3. rm -rf jars/jackson-annotations-2.6.5.jar
  4. rm -rf jars/jackson-module-paranamer-2.6.5.jar
  5. rm -rf jars/jackson-databind-2.6.5.jar
  6. rm -rf jars/jackson-core-2.6.5.jar

hugespark源码下载

  1. $ git clone https://github.com/hugegraph/hugegraph-spark.git

使用Apache Maven构建,示例如下:

  1. $ cd hugegraph-spark
  2. $ mvn -DskipTests clean assembly:assembly

将编译完成的jar包拷贝到spark安装目录下

  1. $ cp baidu/xbu-data/hugegraph-spark/target/hugegraph-spark-0.1.0-SNAPSHOT-jar-with-dependencies.jar ${spark-dir}/spark-2.1.1/jars/

3 配置

可以通过spark-default.properties或者命令行修改相关配置:

配置项如下:

配置名称 默认值 说明
spark.hugegraph.snapshot.dir /tmp/hugesnapshot 首次加载hugegraph RDD 保存的位置
spark.hugegraph.conf.url 获得hugegraph 配置的url,例如,http://localhost:8080/graphs/hugegraph/conf?token=162f7848-0b6d-4faf-b557-3a0797869c55
spark.hugegraph.split.size 67108864 从hugegraph中获取顶点和边时数据分割的大小,默认64M

提供两种添加配置项的方法:

  • 在conf/spark-defaults.conf中修改

    首次安装的用户需要将spark-defaults.conf.default文件拷贝一份,如下:

    1. $ cd spark-2.1.1/conf
    2. $ cp spark-defaults.conf.default spark-defaults.conf

    然后将上表中的配置项按照示例添加即可。

  • 命令行修改配置示例:

    1. $ spark-shell --conf spark.hugegraph.snapshot.dir=/tmp/hugesnapshot2

4 HugeGraph-Spark Shell 使用

启动Scala shell :

  1. ./bin/spark-shell

导入hugegraph相关类

  1. import com.baidu.hugegraph.spark._

初始化graph对象,并创建snapshot

  1. val graph = sc.hugeGraph("test","${spark.hugegraph.conf.url}")

其中${spark.hugegraph.conf.url}默认为conf/spark-defaults.conf中配置的参数,可以直接通过val graph = sc.hugeGraph("test")来调用。

4.1 操作

数据导入成功后可以对graph进行相关操作,示例如下:

获取边的个数

  1. graph.vertices.count()

获取边的个数

  1. graph.edges.count()

出度top 100

  1. val top100 = graph.outDegrees.top(100)
  2. val top100HugeGraphID = sc.makeRDD(top100).join(graph.vertices).collect
  3. top100HugeGraphID.map(e=> (e._2._2.vertexIdString,e._2._1)).foreach(println)

或使用隐式方法:

  1. implicit val degreeTop = new Ordering[(Long,Int)]{
  2. override def compare(a: (Long,Int), b: (Long,Int)) =a._2.compare(b._2)
  3. }

PageRank

PageRank的结果仍为一个图,包含verticesedges

  1. val ranks = graph.pageRank(0.0001)

获取 PageRank的top100的顶点 访问vertices的PageRank的过程中会隐式调用myOrd方法,每个vertices包含 (Long,Double)对,comapares方法中仅依据double值比较。

  1. val top100 = ranks.vertices.top(100)

5 限制

  • 一个分区的的元素个数需要小于40 亿(1<<32)
  • 分区的个数需要小于20亿(1<< 31).