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放在哪里_