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安装
- 下载hadoop-2.5.2.tar.gz 地址http://mirrors.cnnic.cn/apache/hadoop/common/
- 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-1.2.4-bin.tar.gz 地址http://archive.apache.org/dist/hbase/
- 解压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-1.0.0-hadoop2.zip。地址https://github.com/thinkaurelius/titan/wiki/Downloads
- 解压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语言,不仅能解决大规模图数据的问题,还能完成几乎的实时查询,未来还是很有潜力。
登录 | 立即注册