欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

java 连接janusgraph_基于JanusGraph的大数据图数据库

发布时间:2025/3/20 数据库 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java 连接janusgraph_基于JanusGraph的大数据图数据库 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

导读

知识图谱是近来很火的概念,很多领域都希望能用知识图谱解决一些问题。在零售领域其实也有使用知识图谱的场景,比如阿里使用知识图谱进行商品智能导购以及商品“巡检”,而我想试验着把知识图谱应用到精准营销的场景。先抛开知识图谱复杂的概念不谈,先来了解下图数据库——janusGraph。

目前比较火的图数据库一个是Neo4j,它是原生的图数据库,即查询存储都自己完成,但是社区版只支持单机;而JanusGraph是从Titan fork而来,支持多种数据存储平台,如hbase、cassandra等;多种全文检索平台,如solr或者es;多种前端展示组件;以及多种API交互模式。

由于公司有现成的大数据环境,因此还是想基于HBase或者Cassandra作为存储引擎。

1 介绍

JanusGraph由于底层可以自由选择存储引擎并搭配全文检索,因此适用于大规模图数据的存储和计算,支持基于事务的在线交互与离线分析。JG的优势:

  • 支持大规模的图结构,支持分布式集群
  • 支持高并发的图操作
  • 支持全局图分析以及批处理
  • 支持geo、范围查询、全文检索等
  • 集成ThinkerPop、Gremlin
  • 多种知识图谱的性能配置
  • 以节点为中心的索引查询
  • 对不同的存储引擎提供加速优化
  • 基于Apache license 2

如果基于HBase作为存储引擎,还能保证:数据的可靠性、扩展性与一致性。

2 安装

2.1 单机版

janusGraph支持多种部署模式,比如单机版本gremlin、graph server、hbase可以安装到同一台机器。此时启动的时候只需要配置存储引擎为HBase就可以了:

JanusGraph graph = JanusGraphFactory.build().set("storage.backend", "hbase").open();

2.2 远程HBase集群版本

也支持graph与hbase分离,即gremlin和server为同一个机器,hbase单独一套集群。如在我的本机安装server以及gremlin,直接连接远程的zk。启动的时候直接配置zk地址就行:

graph = JanusGraphFactory.build() .set("storage.backend", "hbase") .set("storage.hostname", "localnode3, localnode8, localnode9") .open();

2.3 远程graph server集群版本

再高级一点,graph server可以配置成集群模式,客户端采用wesocket或者http的方式进行连接。如:

http://gremlin-server.janusgraph.machine2/mygraph/tp/gremlin?script=g.v(1).out('follows').out('created')。

此时server端就需要单独配置xx.yml文件进行启动了。

本次试验就采用第二种远程HBase模式测试。

3 使用

3.1 启动

采用远程HBase集群有两种启动方式,第一种读取配置文件,配置文件如下:

storage.backend=hbase storage.hostname=localnode3,localnode8,localnode9

启动sh bin/gremlin.sh然后执行下面的命令即可:

graph = JanusGraphFactory.open('conf/janusgraph-hbase.properties')

也可以在gremlin.sh中直接配置启动

graph = JanusGraphFactory.build() .set("storage.backend", "hbase") .set("storage.hostname", "localnode3, localnode8, localnode9") .open();

第一次启动有点慢,需要去创建HBase表,启动完成后,就可以在HBase看到一个janusgraph的表:

3.2 管理器

启动后创建了一个graph对象,可以基于这个对象创建mgmt管理器对象:

// 开启管理器mgmt = graph.openManagement()// 关闭管理器mgmt.commit()// 输出schema信息mgmt.printSchema()

可以通过mgmt定义节点、边、属性:

// 增加边follow = mgmt.makeEdgeLabel('follow').multiplicity(MULTI).make()mother = mgmt.makeEdgeLabel('mother').multiplicity(MANY2ONE).make()// 增加节点 person = mgmt.makeVertexLabel('person').make()// 增加属性 birthDate = mgmt.makePropertyKey('birthDate').dataType(Long.class).cardinality(Cardinality.SINGLE).make() name = mgmt.makePropertyKey('name').dataType(String.class).cardinality(Cardinality.SET).make() sensorReading = mgmt.makePropertyKey('sensorReading').dataType(Double.class).cardinality(Cardinality.LIST).make()

使用tx导入样例数据

// 开启事务增加数据 tx = graph.newTransaction() a = tx.addVertex(label, "namea", "birthDate", 1, "name","小张") b = tx.addVertex(label, "nameb", "birthDate", 2, "name","小王") a.addEdge("follow", b) tx.commit()

此时执行mgmt.printSchema()可以查看表的定义:

关于查询可以创建traversal对象:

g = graph.traversal()// 查询所有的节点 g.V().valueMap(true) ==>[id:4264,label:namea,birthDate:[1],name:[小张]] ==>[id:4328,label:nameb,birthDate:[2],name:[小王]]// 查询所有的边 g.E().valueMap(true) ==>[id:1zp-3ag-t1-3c8,label:follow]// 条件查询 g.V().has("name","小张").valueMap(true) ==>[id:4264,label:namea,birthDate:[1],name:[小张]]

这样基本的插入和查询就完成了。

4 遇到的问题

4.1 安装包下载过慢

安装包是放在amazon云上,所以国内下载很慢,幸好交流群里有人分享了安装包,可以直接从网盘下载,版本为0.4-hadoop2

链接:https://pan.baidu.com/s/1vVozberyi5_1iPIiRGnqTw&shfl=sharepset

密码:7f7k

4.2 NoSuchColumnFalimyException

0.4版本只支持HBase 2.0+版本,估计官网HBase版本没有更新。

Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException): org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 in table 'hbase:meta', {TABLE_ATTRIBUTES => {IS_META => 'true', coprocessor$1 => '|org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint|536870911|'}, {NAME => 'info', BLOOMFILTER => 'NONE', VERSIONS => '10', IN_MEMORY => 'true', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '8192', REPLICATION_SCOPE => '0'}at org.apache.hadoop.hbase.regionserver.HRegion.checkFamily(HRegion.java:7684)at org.apache.hadoop.hbase.regionserver.HRegion.get(HRegion.java:6762)at org.apache.hadoop.hbase.regionserver.RSRpcServices.get(RSRpcServices.java:2023)at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMetho

4.3 MissingProperyException

graph在gremlin里面不能加类型,直接graph = xxxx 就行

groovy.lang.MissingPropertyException: No such property: graph for class: groovysh_evaluateat org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:65)at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:51)at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(Abstr

5 参考

janusgraph官方文档:https://docs.janusgraph.org

更多内容参考:

HBase介绍​mp.weixin.qq.comImpala为什么那么快​mp.weixin.qq.comImpala原理探索​mp.weixin.qq.com《Impala实战》—— 读后总结​mp.weixin.qq.com开发篇——Impala介绍​mp.weixin.qq.com

总结

以上是生活随笔为你收集整理的java 连接janusgraph_基于JanusGraph的大数据图数据库的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。