日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時(shí)間:2025/3/20 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 连接janusgraph_基于JanusGraph的大数据图数据库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)讀

知識圖譜是近來很火的概念,很多領(lǐng)域都希望能用知識圖譜解決一些問題。在零售領(lǐng)域其實(shí)也有使用知識圖譜的場景,比如阿里使用知識圖譜進(jìn)行商品智能導(dǎo)購以及商品“巡檢”,而我想試驗(yàn)著把知識圖譜應(yīng)用到精準(zhǔn)營銷的場景。先拋開知識圖譜復(fù)雜的概念不談,先來了解下圖數(shù)據(jù)庫——janusGraph。

目前比較火的圖數(shù)據(jù)庫一個(gè)是Neo4j,它是原生的圖數(shù)據(jù)庫,即查詢存儲都自己完成,但是社區(qū)版只支持單機(jī);而JanusGraph是從Titan fork而來,支持多種數(shù)據(jù)存儲平臺,如hbase、cassandra等;多種全文檢索平臺,如solr或者es;多種前端展示組件;以及多種API交互模式。

由于公司有現(xiàn)成的大數(shù)據(jù)環(huán)境,因此還是想基于HBase或者Cassandra作為存儲引擎。

1 介紹

JanusGraph由于底層可以自由選擇存儲引擎并搭配全文檢索,因此適用于大規(guī)模圖數(shù)據(jù)的存儲和計(jì)算,支持基于事務(wù)的在線交互與離線分析。JG的優(yōu)勢:

  • 支持大規(guī)模的圖結(jié)構(gòu),支持分布式集群
  • 支持高并發(fā)的圖操作
  • 支持全局圖分析以及批處理
  • 支持geo、范圍查詢、全文檢索等
  • 集成ThinkerPop、Gremlin
  • 多種知識圖譜的性能配置
  • 以節(jié)點(diǎn)為中心的索引查詢
  • 對不同的存儲引擎提供加速優(yōu)化
  • 基于Apache license 2

如果基于HBase作為存儲引擎,還能保證:數(shù)據(jù)的可靠性、擴(kuò)展性與一致性。

2 安裝

2.1 單機(jī)版

janusGraph支持多種部署模式,比如單機(jī)版本gremlin、graph server、hbase可以安裝到同一臺機(jī)器。此時(shí)啟動的時(shí)候只需要配置存儲引擎為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。啟動的時(shí)候直接配置zk地址就行:

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

2.3 遠(yuǎn)程graph server集群版本

再高級一點(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)行啟動了。

本次試驗(yàn)就采用第二種遠(yuǎn)程HBase模式測試。

3 使用

3.1 啟動

采用遠(yuǎn)程HBase集群有兩種啟動方式,第一種讀取配置文件,配置文件如下:

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

啟動sh bin/gremlin.sh然后執(zhí)行下面的命令即可:

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

也可以在gremlin.sh中直接配置啟動

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

第一次啟動有點(diǎn)慢,需要去創(chuàng)建HBase表,啟動完成后,就可以在HBase看到一個(gè)janusgraph的表:

3.2 管理器

啟動后創(chuàng)建了一個(gè)graph對象,可以基于這個(gè)對象創(chuàng)建mgmt管理器對象:

// 開啟管理器mgmt = graph.openManagement()// 關(guān)閉管理器mgmt.commit()// 輸出schema信息mgmt.printSchema()

可以通過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ù)

// 開啟事務(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對象:

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 遇到的問題

4.1 安裝包下載過慢

安裝包是放在amazon云上,所以國內(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版本沒有更新。

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

更多內(nèi)容參考:

HBase介紹?mp.weixin.qq.comImpala為什么那么快?mp.weixin.qq.comImpala原理探索?mp.weixin.qq.com《Impala實(shí)戰(zhàn)》—— 讀后總結(jié)?mp.weixin.qq.com開發(fā)篇——Impala介紹?mp.weixin.qq.com

總結(jié)

以上是生活随笔為你收集整理的java 连接janusgraph_基于JanusGraph的大数据图数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。