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.callBlockingMetho4.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(Abstr5 参考
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的大数据图数据库的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: alert()的功能_功能强大的Flut
- 下一篇: mysql的驱动connect放在哪里_