java 连接janusgraph_基于JanusGraph的大数据图数据库
導(dǎo)讀
知識(shí)圖譜是近來(lái)很火的概念,很多領(lǐng)域都希望能用知識(shí)圖譜解決一些問(wèn)題。在零售領(lǐng)域其實(shí)也有使用知識(shí)圖譜的場(chǎng)景,比如阿里使用知識(shí)圖譜進(jìn)行商品智能導(dǎo)購(gòu)以及商品“巡檢”,而我想試驗(yàn)著把知識(shí)圖譜應(yīng)用到精準(zhǔn)營(yíng)銷的場(chǎng)景。先拋開(kāi)知識(shí)圖譜復(fù)雜的概念不談,先來(lái)了解下圖數(shù)據(jù)庫(kù)——janusGraph。
目前比較火的圖數(shù)據(jù)庫(kù)一個(gè)是Neo4j,它是原生的圖數(shù)據(jù)庫(kù),即查詢存儲(chǔ)都自己完成,但是社區(qū)版只支持單機(jī);而JanusGraph是從Titan fork而來(lái),支持多種數(shù)據(jù)存儲(chǔ)平臺(tái),如hbase、cassandra等;多種全文檢索平臺(tái),如solr或者es;多種前端展示組件;以及多種API交互模式。
由于公司有現(xiàn)成的大數(shù)據(jù)環(huán)境,因此還是想基于HBase或者Cassandra作為存儲(chǔ)引擎。
1 介紹
JanusGraph由于底層可以自由選擇存儲(chǔ)引擎并搭配全文檢索,因此適用于大規(guī)模圖數(shù)據(jù)的存儲(chǔ)和計(jì)算,支持基于事務(wù)的在線交互與離線分析。JG的優(yōu)勢(shì):
- 支持大規(guī)模的圖結(jié)構(gòu),支持分布式集群
- 支持高并發(fā)的圖操作
- 支持全局圖分析以及批處理
- 支持geo、范圍查詢、全文檢索等
- 集成ThinkerPop、Gremlin
- 多種知識(shí)圖譜的性能配置
- 以節(jié)點(diǎn)為中心的索引查詢
- 對(duì)不同的存儲(chǔ)引擎提供加速優(yōu)化
- 基于Apache license 2
如果基于HBase作為存儲(chǔ)引擎,還能保證:數(shù)據(jù)的可靠性、擴(kuò)展性與一致性。
2 安裝
2.1 單機(jī)版
janusGraph支持多種部署模式,比如單機(jī)版本gremlin、graph server、hbase可以安裝到同一臺(tái)機(jī)器。此時(shí)啟動(dòng)的時(shí)候只需要配置存儲(chǔ)引擎為HBase就可以了:
JanusGraph graph = JanusGraphFactory.build().set("storage.backend", "hbase").open();2.2 遠(yuǎn)程HBase集群版本
也支持graph與hbase分離,即gremlin和server為同一個(gè)機(jī)器,hbase單獨(dú)一套集群。如在我的本機(jī)安裝server以及gremlin,直接連接遠(yuǎn)程的zk。啟動(dòng)的時(shí)候直接配置zk地址就行:
graph = JanusGraphFactory.build() .set("storage.backend", "hbase") .set("storage.hostname", "localnode3, localnode8, localnode9") .open();2.3 遠(yuǎn)程graph server集群版本
再高級(jí)一點(diǎn),graph server可以配置成集群模式,客戶端采用wesocket或者h(yuǎn)ttp的方式進(jìn)行連接。如:
http://gremlin-server.janusgraph.machine2/mygraph/tp/gremlin?script=g.v(1).out('follows').out('created')。
此時(shí)server端就需要單獨(dú)配置xx.yml文件進(jìn)行啟動(dòng)了。
本次試驗(yàn)就采用第二種遠(yuǎn)程HBase模式測(cè)試。
3 使用
3.1 啟動(dòng)
采用遠(yuǎn)程HBase集群有兩種啟動(dòng)方式,第一種讀取配置文件,配置文件如下:
storage.backend=hbase storage.hostname=localnode3,localnode8,localnode9啟動(dòng)sh bin/gremlin.sh然后執(zhí)行下面的命令即可:
graph = JanusGraphFactory.open('conf/janusgraph-hbase.properties')也可以在gremlin.sh中直接配置啟動(dòng)
graph = JanusGraphFactory.build() .set("storage.backend", "hbase") .set("storage.hostname", "localnode3, localnode8, localnode9") .open();第一次啟動(dòng)有點(diǎn)慢,需要去創(chuàng)建HBase表,啟動(dòng)完成后,就可以在HBase看到一個(gè)janusgraph的表:
3.2 管理器
啟動(dòng)后創(chuàng)建了一個(gè)graph對(duì)象,可以基于這個(gè)對(duì)象創(chuàng)建mgmt管理器對(duì)象:
// 開(kāi)啟管理器mgmt = graph.openManagement()// 關(guān)閉管理器mgmt.commit()// 輸出schema信息mgmt.printSchema()可以通過(guò)mgmt定義節(jié)點(diǎn)、邊、屬性:
// 增加邊f(xié)ollow = mgmt.makeEdgeLabel('follow').multiplicity(MULTI).make()mother = mgmt.makeEdgeLabel('mother').multiplicity(MANY2ONE).make()// 增加節(jié)點(diǎn) 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導(dǎo)入樣例數(shù)據(jù)
// 開(kāi)啟事務(wù)增加數(shù)據(jù) 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()此時(shí)執(zhí)行mgmt.printSchema()可以查看表的定義:
關(guān)于查詢可以創(chuàng)建traversal對(duì)象:
g = graph.traversal()// 查詢所有的節(jié)點(diǎn) 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 遇到的問(wèn)題
4.1 安裝包下載過(guò)慢
安裝包是放在amazon云上,所以國(guó)內(nèi)下載很慢,幸好交流群里有人分享了安裝包,可以直接從網(wǎng)盤下載,版本為0.4-hadoop2
鏈接:https://pan.baidu.com/s/1vVozberyi5_1iPIiRGnqTw&shfl=sharepset
密碼:7f7k
4.2 NoSuchColumnFalimyException
0.4版本只支持HBase 2.0+版本,估計(jì)官網(wǎng)HBase版本沒(méi)有更新。
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
更多內(nèi)容參考:
HBase介紹?mp.weixin.qq.comImpala為什么那么快?mp.weixin.qq.comImpala原理探索?mp.weixin.qq.com《Impala實(shí)戰(zhàn)》—— 讀后總結(jié)?mp.weixin.qq.com開(kāi)發(fā)篇——Impala介紹?mp.weixin.qq.com總結(jié)
以上是生活随笔為你收集整理的java 连接janusgraph_基于JanusGraph的大数据图数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: alert()的功能_功能强大的Flut
- 下一篇: idea没有out文件夹_史上最详细没有