1. 程式人生 > >圖資料庫Titan安裝與部署

圖資料庫Titan安裝與部署

Titan簡介

Titan是一個分散式的圖資料庫,支援橫向擴充套件,可容納數千億個節點和邊。 Titan支援事務,並且可以支撐上千使用者併發進行復雜圖遍歷操作。

Titan包含下面這些特性:

  1. 彈性與線性擴充套件
  2. 分散式架構,可容錯
  3. 支援多資料中心的高可用和熱備
  4. 支援ACID和最終一致性
  5. 支援多種儲存後端
    Apache Cassandra
    Apache HBase
    Oracle BerkeleyDB
    Akiban Persistit
  6. 支援位置、數字和全文檢索
    ElasticSearch
    Apache Lucene
  7. 原生支援TinkerPop軟體棧
    Gremlin graph query language

    Frames object-to-graph mapper
    Rexster graph server
    Blueprints standard graph API
  8. 開源協議 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安裝

  1. tar -xzvf hadoop-2.5.2.tar.gz。 解壓縮到當前目錄
  2. cd hadoop-2.5.2
  3. 配置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>

  4. 配置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>

  5. 配置conf/Hadoop-env.sh,將JAVA_HOME改為JDK安裝目錄,which java 檢視目錄

    export JAVA_HOME=`/usr/libexec/java`

  6. 啟動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

  1. 解壓hbase

    sudo tar -xvf hbase-1.2.4-bin.tar.gz   #解壓安裝原始碼包

    cd hbase-1.2.4

  2. 配置安裝路徑

    #將hbase下的bin目錄新增到系統的path中,在/etc/profile檔案尾行新增如下的內容

    sudo vim /etc/profile

    export  PATH=$PATH:/usr/hbase/bin

    source /etc/profile #執行source命令使上述配置在當前終端立即生效

  3. 驗證是否安裝成功

    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

  4. 安裝單機模式
    (1) 配置/conf/hbase-env.sh

    vim 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) 啟動Hbase

    bin/start-hbase.sh

安裝elasticsearch

  1. 下載elasticsearch-1.5.2.zip
  2. 解壓檔案

    unzip elasticsearch-1.5.2.zip

  3. 啟動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包存在問題,下面會詳細說明。

  1. 解壓titan

    unzip titan-1.0.0-hadoop2.zip

  2. 刪除並新增相關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

  3. 使用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語言,不僅能解決大規模圖資料的問題,還能完成幾乎的實時查詢,未來還是很有潛力。

參考文章