前言
前面介绍了TinkerPop集成Neo4j的配置方法,并且实现了HA操作。这里有一个突出问题就是不管是使用Neo4j,还是自带的TinkerGraph都不可避免的面临一个问题——大数据量场景,也即分布式问题。鉴于此,Tinkerpop还提供了和Hadoop+Spark的集成解决方案,从而解决单节点问题。但是由于Spark中的数据一致性问题,不能修改数据,所以这种方案不能修改数据,也不能新增数据,只适合用来查询、计算,不得不说这是一个很大的缺点。如果有同学有更好的解决方法,欢迎在下面留言交流。另外,本文的所有操作同样都以Tinkerpop Server 3.4.4为例。
TinkerPop集成Hadoop+Spark
在Tinkerpop官网中已经给出了和Hadoop+Spark的集成方法,但是有两个问题。第一,所有的操作都是基于console完成的,没有server的操作步骤;第二,在使用SparkGraphComputer时,master都是local模式,对于使用YARN作为资源管理器的时候,参照官网资料往往是调试不成功的。原因主要有三点:
- SparkGraphComputer会创建自己的SparkContext,而不是通过spark-submit获取配置信息。
- 对于Spark运行在YARN上的模式,直到Tinkerpop 3.2.7/3.3.1版本之后才支持。
- 集群的Spark依赖包很可能会和Tinkerpop的依赖产生冲突。
另外,在配置过程中,还需要指定Hadoop的依赖包目录信息和Tinkerpop Spark的驱动包路径,并且这一步往往是成功的关键。详细步骤如下:
- 安装Hadoop和Spark依赖
./gremlin-server.sh install org.apache.tinkerpop hadoop-gremlin 3.4.4
./gremlin-server.sh install org.apache.tinkerpop spark-gremlin 3.4.4 - 将Tinkerpop_HOME/ext/spark-gremlin/lib目录下的所有文件打包为spark-gremlin.zip文件(不需要新建spark-gremlin目录,直接打包所有jar包),并放置在/tmp/目录(任意位置都可以)。
- 制作启动文件spark-yarn.sh,放在Tinkerpop_HOME/bin目录下,内容如下:
GREMLIN_HOME=/home/apache-tinkerpop-gremlin-server-3.4.4 export HADOOP_HOME=/usr/local/hadoop export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export CLASSPATH=$HADOOP_CONF_DIR export JAVA_OPTIONS="-Djava.library.path=$HADOOP_HOME/lib/native:$HADOOP_HOME/lib/native/Linux-amd64-64" cd $GREMLIN_HOME [ ! -e empty ] && mkdir empty export HADOOP_GREMLIN_LIBS=$GREMLIN_HOME/empty bin/gremlin.sh conf/gremlin-server-spark.yaml
- 修改Tinkerpop_HOME/conf目录下的hadoop-gryo.properties配置文件如下。Tinkerpop Server通常不提供该文件,可以从Tinkerpop Console的 conf/hadoop目录下拷贝一份,或者新建也可以(根据自己的配置信息修改即可)。
gremlin.graph=org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph gremlin.hadoop.graphReader=org.apache.tinkerpop.gremlin.hadoop.structure.io.gryo.GryoInputFormat gremlin.hadoop.graphWriter=org.apache.tinkerpop.gremlin.hadoop.structure.io.gryo.GryoOutputFormat gremlin.hadoop.jarsInDistributedCache=true gremlin.hadoop.defaultGraphComputer=org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer gremlin.hadoop.inputLocation=tinkerpop-modern.kryo gremlin.hadoop.outputLocation=output #################################### # SparkGraphComputer Configuration # #################################### spark.master=yarn spark.submit.deployMode=client spark.executor.memory=1g spark.yarn.archive=/tmp/spark-gremlin.zip spark.yarn.appMasterEnv.CLASSPATH=./__spark_libs__/*:/usr/local/hadoop/etc/hadoop spark.executor.extraClassPath=./__spark_libs__/*:/usr/local/hadoop/etc/hadoop spark.driver.extraLibraryPath=/usr/local/hadoop/lib/native:/usr/local/hadoop/lib/native/Linux-amd64-64 spark.executor.extraLibraryPath=/usr/local/hadoop/lib/native:/usr/local/hadoop/lib/native/Linux-amd64-64 spark.serializer=org.apache.spark.serializer.KryoSerializer spark.kryo.registrator=org.apache.tinkerpop.gremlin.spark.structure.io.gryo.GryoRegistrator # spark.serializer=org.apache.tinkerpop.gremlin.spark.structure.io.gryo.GryoSerializer (3.2.x model) gremlin.spark.graphStorageLevel=MEMORY_AND_DISK gremlin.spark.persistContext=true
- 将数据文件tinkerpop-modern.kryo拷贝到hdfs上,并保持文件位置和4中gremlin.hadoop.inputLocation配置一致。
- 修改Tinkerpop_HOME/conf/gremlin-server-spark.yaml文件host和port为合适配置。
- 启动Tinkerpop(该方式会以前台方式启动):sh spark-yarn.sh
- 通过Console连接Server,第一次计算因为需要初始化Spark环境,所以会比较慢。
上面步骤会以前台方式启动Tinkerpop Server,更多启动方式可以参考前一篇文章TinkerPop集成Neo4j中的详细介绍。
参考资料
来源:CSDN
作者:二加三等于五
链接:https://blog.csdn.net/haveanybody/article/details/103987807