圖資料庫Titan安裝與部署
Titan簡介
Titan是一個分散式的圖資料庫,支援橫向擴充套件,可容納數千億個節點和邊。 Titan支援事務,並且可以支撐上千使用者併發進行復雜圖遍歷操作。
Titan包含下面這些特性:
- 彈性與線性擴充套件
- 分散式架構,可容錯
- 支援多資料中心的高可用和熱備
- 支援ACID和最終一致性
- 支援多種儲存後端
Apache Cassandra
Apache HBase
Oracle BerkeleyDB
Akiban Persistit - 支援位置、數字和全文檢索
ElasticSearch
Apache Lucene - 原生支援TinkerPop軟體棧
Gremlin graph query language
Frames object-to-graph mapper
Rexster graph server
Blueprints standard graph API - 開源協議 Apache 2 license
Titan安裝流程
在這裡使用Hbase儲存資料,elasticsearch做索引。但Titan本身對以上工具支援只限某些版本,下圖是Titan相容版本一覽。
最終使用 Titan1.0.0 + Hbase1.2.4 + elasticsearch1.5.2 + Hadoop2.5.2 進行安裝
雖然Titan並未說明支援Hbase1.2.4,但在安裝使用中並未發現問題,是否相容還有待深入驗證。
我的系統是Ubuntu 14.04.1,hadoop配置偽分佈模式,hbase配置單機模式,java版本為jdk1.8。值得注意的是Titan需要Java8,推薦Oracle Java 8
hadoop安裝
- tar -xzvf hadoop-2.5.2.tar.gz。 解壓縮到當前目錄
- cd hadoop-2.5.2
- 配置conf/core-site.xml
<configuration>
<!-- Hadoop 偽分散式配置 -->
<!-- 使用 hadoop-
2.5
.
2
/tmp 做為 hdfs 的儲存目錄,預設為 /tmp
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/lihu.clh/hadoop/hadoop-
2.5
.
2
/tmp</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs:
//localhost:9000</value>
</property>
</configuration>
- 配置conf/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<!-- 偽分佈設定為
1
-->
<value>
1
</value>
</property>
<!--
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/lihu.clh/hadoop/hadoop-
2.5
.
2
/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/lihu.clh/hadoop/hadoop-
2.5
.
2
/tmp/dfs/data</value>
</property>
-->
</configuration>
- 配置conf/Hadoop-env.sh,將JAVA_HOME改為JDK安裝目錄,which java 檢視目錄
export JAVA_HOME=`/usr/libexec/java`
- 啟動hadoop服務
sbin/start-dfs.sh
啟動成功後,執行jps,可以看到三個服務 NameNode、DataNode和SecondaryNameNode。成功啟動後,可以訪問 Web 介面 http://localhost:50070 來檢視 Hadoop 的資訊
hbase安裝
安裝Hbase單機模式,需要注意的是Hbase對Hadoop版本相容的問題,下圖是hadoop與habse之間支援表
Hadoop version support matrix
"S" = supported
"X" = not supported
"NT" = Not tested
- 解壓hbase
sudo tar -xvf hbase-
1.2
.
4
-bin.tar.gz #解壓安裝原始碼包
cd hbase-
1.2
.
4
- 配置安裝路徑
#將hbase下的bin目錄新增到系統的path中,在/etc/profile檔案尾行新增如下的內容
sudo vim /etc/profile
export PATH=$PATH:/usr/hbase/bin
source /etc/profile #執行source命令使上述配置在當前終端立即生效
- 驗證是否安裝成功
hbase version #成功會顯示如下資訊
HBase
1.2
.
4
Source code repository git:
//asf-dev/home/busbey/projects/hbase revision=67592f3d062743907f8c5ae00dbbe1ae4f69e5af
Compiled by busbey on Tue Oct
25
18
:
10
:
20
CDT
2016
From source with checksum b45f19b5ac28d9651aa2433a5fa33aa0
- 安裝單機模式
(1) 配置/conf/hbase-env.shvim conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk #配置本機的java安裝根目錄
export HBASE_MANAGES_ZK=
true
#配置由hbase自己管理zookeeper,不需要單獨的zookeeper
(2) 配置/conf/hbase-site.xml。在啟動Hbase前需要設定屬性hbase.rootdir,用於指定Hbase資料的儲存位置vim conf/hbase-site.sh
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:
///usr/hbase/hbase-tmp</value>
</property>
</configuration>
(3) 啟動Hbasebin/start-hbase.sh
安裝elasticsearch
- 下載elasticsearch-1.5.2.zip
- 解壓檔案
unzip elasticsearch-
1.5
.
2
.zip
- 啟動elasticsearch.es預設是在終端執行,終端關閉服務也會關閉。服務最好使用nouhp在後臺執行
bin/elasticsearch #看到如下輸出,安裝成功
[
2017
-
02
-
23
11
:
15
:
46
,
337
][INFO ][node ] [Yellow Claw] version[
1.5
.
2
], pid[
18336
], build[62ff986/
2015
-
04
-27T09:
21
:06Z]
[
2017
-
02
-
23
11
:
15
:
46
,
338
][INFO ][node ] [Yellow Claw] initializing ...
[
2017
-
02
-
23
11
:
15
:
46
,
344
][INFO ][plugins ] [Yellow Claw] loaded [], sites []
[
2017
-
02
-
23
11
:
15
:
48
,
946
][INFO ][node ] [Yellow Claw] initialized
[
2017
-
02
-
23
11
:
15
:
48
,
946
][INFO ][node ] [Yellow Claw] starting ...
[
2017
-
02
-
23
11
:
15
:
49
,
113
][INFO ][transport ] [Yellow Claw] bound_address {inet[/
0
:
0
:
0
:
0
:
0
:
0
:
0
:
0
:
9300
]}, publish_address {inet[/
30.30
.
17.84
:
9300
]}
[
2017
-
02
-
23
11
:
15
:
49
,
163
][INFO ][discovery ] [Yellow Claw] elasticsearch/OZ853SsXRIy-oVG0EWPGHA
[
2017
-
02
-
23
11
:
15
:
52
,
941
][INFO ][cluster.service ] [Yellow Claw] new_master [Yellow Claw][OZ853SsXRIy-oVG0EWPGHA][master.domain.com][inet[/
30.30
.
17.84
:
9300
]], reason: zen-disco-join (elected_as_master)
[
2017
-
02
-
23
11
:
15
:
52
,
998
][INFO ][http ] [Yellow Claw] bound_address {inet[/
0
:
0
:
0
:
0
:
0
:
0
:
0
:
0
:
9200
]}, publish_address {inet[/
30.30
.
17.84
:
9200
]}
[
2017
-
02
-
23
11
:
15
:
52
,
999
][INFO ][node ] [Yellow Claw] started
[
2017
-
02
-
23
11
:
15
:
53
,
010
][INFO ][gateway ] [Yellow Claw] recovered [
0
] indices into cluster_state
[
2017
-
02
-
23
11
:
18
:
53
,
783
][INFO ][cluster.metadata ] [Yellow Claw] [titan] creating index, cause [api], templates [], shards [
5
]/[
1
], mappings []
[
2017
-
02
-
23
11
:
22
:
22
,
191
][INFO ][cluster.metadata ] [Yellow Claw] [titan] create_mapping [vertices]
[
2017
-
02
-
23
11
:
22
:
22
,
235
][INFO ][cluster.metadata ] [Yellow Claw] [titan] create_mapping [edges]
[
2017
-
02
-
23
11
:
22
:
22
,
253
][INFO ][cluster.metadata ] [Yellow Claw] [titan] update_mapping [edges]
安裝Titan
準備工作都已完成,下面安裝Titan。Titan1.0.0有兩個版本,一個是hadoop1,另一個是hadoop2。在這裡使用的是hadoop2,值得注意的是這個版本本身有個坑,它的lib中本身jar包存在問題,下面會詳細說明。
- 解壓titan
unzip titan-
1.0
.
0
-hadoop2.zip
- 刪除並新增相關jar包 。官方提供的hadoop2的安裝包有一些問題,如果想要順利的使用titan,必須刪除相關的jar包,並新增一些缺失的jar包
(a) 刪除異常jar包hadoop-core-
1.2
.
1
.jar
(b)新增所需要的jar包,這些jar包
titan-hadoop-
1.0
.
0
.jar
titan-hadoop-core-
1.0
.
0
.jar
- 使用Gremlin客戶端測試服務是否啟動成功
/titan/titan-
1.0
.
0
-hadoop2/bin/gremlin.sh #啟動gremlin控制檯
#將titan中自帶例子眾神圖譜載入進來,並執行簡單的圖查詢操作幫助熟悉gremlin console
#titan getting started [http:
//s3.thinkaurelius.com/docs/titan/1.0.0/getting-started.html]
gremlin> graph = TitanFactory.open(
'conf/titan-hbase-es.properties'
) #建立一個graph例項,使用hbase儲存,es索引。執行完後可以看到habse中多了一個titan表
==>standardtitangraph[cassandrathrift:[
127.0
.
0.1
]]
gremlin> GraphOfTheGodsFactory.load(graph) #將titan中的眾神圖譜匯入資料庫。導完以後,hbase titan表裡會增加很多行資料。
==>
null
gremlin> g = graph.traversal() #遍歷圖
==>graphtraversalsource[standardtitangraph[cassandrathrift:[
127.0
.
0.1
]], standard]
#圖查詢案例
gremlin> saturn = g.V().has(
'name'
,
'saturn'
).next()
==>v[
256
]
gremlin> g.V(saturn).valueMap()
==>[name:[saturn], age:[
10000
]]
gremlin> g.V(saturn).in(
'father'
).in(
'father'
).values(
'name'
)
==>hercules
gremlin> g.E().has(
'place'
, geoWithin(Geoshape.circle(
37.97
,
23.72
,
50
)))
==>e[a9x-co8-9hx-39s][
16424
-battled->
4240
]
==>e[9vp-co8-9hx-9ns][
16424
-battled->
12520
]
gremlin> g.E().has(
'place'
, geoWithin(Geoshape.circle(
37.97
,
23.72
,
50
))).as(
'source'
).inV().as(
'god2'
).select(
'source'
).outV().as(
'god1'
).select(
'god1'
,
'god2'
).by(
'name'
)
==>[god1:hercules, god2:hydra]
==>[god1:hercules, god2:nemean]
總結
titan依賴比較多,所以安裝依賴環境比較花費時間,如果機器本身有titan支援資料儲存和索引平臺,那安裝titan應該不用太多時間。
titan本身是一個比較新的圖資料庫,未達到完全穩定,其官方版本自身存在一定問題
titan社群不是很活躍,如果在使用中遇到了問題可能會找不到相關的資料
目前在DB-Engines排名前三的圖資料庫分別是:neo4j,orient-DB,titan(排名分先後)。neo4j是目前使用人數最多的圖資料庫,其版本穩定,文件較全,但其無法應用於大規模圖資料。orient-DB也是分散式圖資料庫,但其並不是專業圖資料庫,除支援圖模型之外,它還支援文件、kv模型。
titan作為分散式的圖資料庫,支援gremlin語言,不僅能解決大規模圖資料的問題,還能完成幾乎的實時查詢,未來還是很有潛力。