前言:
目前姐妹们对“apachexp系统”大概比较注意,姐妹们都想要剖析一些“apachexp系统”的相关资讯。那么小编在网摘上汇集了一些有关“apachexp系统””的相关知识,希望大家能喜欢,我们快快来学习一下吧!1、JanusGraph简介
1.1 JanusGraph简介
JanusGraph是一个可扩展的图数据库,可以把包含数千亿个顶点和边的图存储在多机集群上。它支持事务,支持数千用户实时、并发访问存储在其中的图。(JanusGraph is a scalable graph database optimized for storing and querying graphs containing hundreds of billions of vertices and edges distributed across a multi-machine cluster. JanusGraph is a transactional database that can support thousands of concurrent users executing complex graph traversals in real time.)
我们可以将图数据库系统的应用领域划分成以下两部分:
·用于联机事务图的持久化技术(通常直接实时地从应用程序中访问)。这类技术被称为图数据库,它们和“通常的”关系型数据库世界中的联机事务处理(Online Transactional Processing,OLTP)数据库是一样的。
·用于离线图分析的技术(通常都是按照一系列步骤执行)。这类技术被称为图计算引擎。它们可以和其他大数据分析技术看做一类,如数据挖掘和联机分析处理(Online Analytical Processing,OLAP)。
1.2 JanusGraph的发展历史
JanusGraph是2016年12月27日从Titan fork出来的一个分支,之后TiTan的开发团队在2017年陆续发了0.1.0rc1、0.1.0rc2、0.1.1、0.2.0等四个版本,最新的版本是2017年10月12日。
titan是从2012年开始开发,到2016年停止维护的一个分布式图数据库。最初在2012年启动titan项目的公司是Aurelius,2015年此公司被 DataStax(DataStax是开发apache Cassandra 的公司)收购,DataStax公司吸收了TiTan的图存储能力,形成了自己的商业产品DataStax Enterprise Graph。
TiTan开发者们希望把TitTan放到Apache Software Foundation下,不过,DataStax不愿意这样做(可能考虑到要保护自己的商业产品DataStax Enterprise Graph的技术优势吧,其实这点优势是从Titan来的),而且自从2015年9月DataStax收购了Titan的母公司后,TiTan一直处于停滞状态(应该是DataStax收购之后,忙于推出自己的商业产品DataStax Enterprise Graph,忙于整合Titan进自己的商业产品吧,可是Titan本身没有得到发展)。鉴于此,2016年6月,TiTan的开发者们fork了一个TiTan的分支(因为Titan已经属于DataStax了,所以他们必须另外弄一个商标),重命名为JanusGraph,并将其置于Linux Software Foundation下。
2017年4月6日发布了第一个版本0.1.0-rc1,目前最新版本是2017年10月12日发布的0.2.0版。
JanusGraph项目启动的初衷是“通过为其增加新功能、改善性能和扩展性、增加后端存储系统来增强分布式图系统的功能,从而振兴分布式图系统的开发”,JanusGraph从Apahce TinkerPop中吸收了对属性图模型(Property Graph Model)的支持和对属性图模型进行遍历的Gremlin遍历语言。(“reinvigorate development of the distributed graph system to add new functionality, improve performance and scalability, and maintain a variety of storage backends,JanusGraph incorporates support for the property graph model with the open source graph computing framework Apache TinkerPop and its Gremlin graph traversal language”.)
1.3 JanusGraph的功能(Benefits)
JanusGraph最大的一个好处就是:可以扩展图数据的处理,能支持实时图遍历和分析查询(Scaling graph data processing for real time traversals and analytical queries is JanusGraph’s foundational benefit.)。
因为JanusGraph是分布式的,可以自由的扩展集群节点的,因此,它可以利用很大的集群,也就可以存储很大的包含数千亿个节点和边的图。由于它又支持实时、数千用户并发遍历图和分析查询图的功能。所以这两个特点是它显著的优势。
它支持以下功能:
(1)分布式部署,因此支持集群。
(2)可以存储大图,比如包含数千亿Vertices和edges的图。
(3)支持数千用户实时、并发访问。
(4)集群节点可以线性扩展,以支持更大的图和更多的并发访问用户。(Elastic and linear scalability for a growing data and user base)
(5)数据分布式存储,并且每一份数据都有多个副本,因此,有更好的计算性能和容错性。(Data distribution and replication for performance and fault tolerance)
(6)支持在多个数据中心做高可用,支持热备份。(Elastic and linear scalability for a growing data and user base)
(7)支持各种后端存储系统,目前标准支持以下四种,当然也可以增加第三方的存储系统:
·Apache Cassandra®
·Apache HBase®
·Google Cloud Bigtable
·Oracle BerkeleyDB
(8)通过集成大数据平台,比如Apache Spark、Apache Giraph、Apache Hadoop等,支持全局图数据分析、报表、ETL
(9)支持geo(Gene Expression Omnibus,基因数据分析)、numeric range(这个的含义不清楚)
(10) 集成ElasticSearch、Apache Solr、Apache Lucene等系统后,可以支持全文搜索。
(11) 原生集成Apache TinkerPop图技术栈,包括Gremlin graph query language、Gremlin graph server、Gremin applications。
(12) 开源,基于Apache 2 Licence。
(13) 通过使用以下系统可以可视化存储在JanusGraph中的图数据:
·Cytoscape
·Gephi plugin for Apache TinkerPop
·Graphexp
·KeyLines by Cambridge Intelligence
·Linkurious
1.4. JanusGraph的体系结构(architecture,架构)
想要深入了解JanusGraph,必须了解Tinkerpop。Tinkerpop是Apache基金会下的一个开源的图数据库与图计算框架(OLTP与OLAP),JanusGraph与Tinkerpop的关系可以认为是JanusGraph是基于Tinkerpop这个框架来开发的。
Tinkerpop有个组件叫Gremlin,它是一门用于图操作和图遍历的语言(也称查询语言)。Gremlin Console 和Gremlin Server分别提供了控制台和远程执行Gremlin查询语言的方式。Gremlin Server在JanusGraph中被成为JanusGraph Server。
Tinkerpop这个图数据库与图计算框架被很多厂商采用,比如百度开源的HugeGraph,华为的图引擎服务GES等。
JanusGraph是模块化的体系结构(JanusGraph has a modular architecture)。
它使用hadoop来做图的分析和图的批处理,使用模块化接口来做数据持久化、索引和客户端访问。
在JanusGraph和磁盘之间有多个后端存储系统和多个索引系统。(Between JanusGraph and the disks sits one or more storage and indexing adapters.)
它支持的外部存储系统,目前标准支持的有(当然也可以将第三方的存储系统作为JanusGraph的后端存储系统):
·Apache Cassandra
·Apache HBase
·Oracle Berkeley DB Java Edition
·Google Cloud BigTable
支持的外部索引系统:
·Elasticsearch
·Apache Solr
·Apache Lucene
体系结构图:
1.5 应用使用JanusGraph的方法
作为一个数据库系统,它是要用来为应用程序存储数据用的,那么应用程序应该如何使用JanusGraph来为自己存储数据呢?
一般来说,应用程序可以通过两种不同的方式来使用JanusGraph:
(1)第一种方式:可以把JanusGraph嵌入到应用程序中去,JanusGraph和应用程序处在同一个JVM中。应用程序中的客户代码(相对JanusGraph来说是客户)直接调用Gremlin去查询JanusGraph中存储的图,这种情况下外部存储系统可以是本地的,也可以处在远程。
(2)第二种方式:应用程序和Janus Graph处在两个不同JVM中,应用通过给JanusGraph提交Gremlin查询给GremlinServer,来使用JanusGraph,因为JanusGraph原生是支持Gremlin Server的。(Gremlin Server是Apache Tinkerpop中的一个组件)。
1.6 JanusGraph的配置文件
JanusGraph集群包含一个、或者多个JanusGraph实例。每次启动一个JanusGraph实例的时候,都必须指定JanusGraph的配置。在配置中,可以指定JanusGraph要用的组件,可以控制JanusGraph运行的各个方面,还可以指定一些JanusGraph集群的调优选项。
最小的JanusGraph配置只需要指定一下JanusGraph的后端存储系统,也就是它的持久化引擎。
如果要JanusGraph支持高级的图查询,就需要为JanusGraph指定一个索引后端。
若果要提升JanusGraph的查询性能,就必须为JanusGraph指定缓存,指定性能调优的选项。
以上提到的后端存储系统、索引后端、缓存、调优选项等都可以在JanusGraph的配置文件中进行指定。默认情况下它的配置文件存放在JanusGraph_home/conf目录下。
在JanusGraph_home/conf目录下有一些JanusGraph的示例配置文件。
下面是一个JanusGraph的示例配置文件的内容,这个文件中为JanusGraph指定了cassandra作为后端存储引擎,并且指定了elasticsearch作为索引后端。
storage.backend=cassandra
storage.hostname=localhost
index.search.backend=elasticsearch
index.search.hostname=100.100.101.1, 100.100.101.2
index.search.elasticsearch.client-only=true
1.7 JanusGraph配置文件的加载方法
JanusGraph的配置文件如何加载呢?
(1)对于单独安装的JanusGraph,可以在Gremlin中使用JanusGraphFactory类的方法来加载配置文件
graph = JanusGraphFactory.open('path/to/configuration.properties')
(2)对于嵌入到应用中的JanusGraph来说,应用可以直接调用JanusGraph的公共API,只要在应用中调用JanusGraph的JanusGraphFactory就可以加载配置文件了
(3)还可以在JanusGraphFactory中使用简写来加载配置。
graph = JanusGraphFactory.open('cassandra:localhost');
graph = JanusGraphFactory.open('berkeleyje:/tmp/graph');
1.8 JanusGraph分布式集群的安装方法
JanusGraph作为一个图数据库系统,其实还是比较复杂的,它的安装可以是很简单的单机安装,也可以是很复杂的分布式安装,最不可理解的是官网(janusgraph.org)上没有专门介绍安装的文档。这里的安装方法是从IBM Developer works搜索来的,下面着重介绍单机安装,分布式集群的安装较为复杂,目前还没有时间做,以后在做吧,任务在即。
从JanusGraph的架构图可以看出,Janus的安装需要以下组件:
(1)外部存储系统,上图左下的方框,JP也集成了一个Cassandra,可以用于单一数据库使用
(2)外部索引系统,上图右下的方框,JP本身集成了一个ES,这个是可选的。
(3)启动JanusGraph Server,上图中部的方框,它是从Apache Tinkpop项目中的Gremlin Server来的。
(4)启动Gremlin客户端去连接JanusGraph Server,上图中部方框中的小框Tinkpop API-Gremlin指的是Gremlin console这个客户端是调用了Tinkpop API去访问JanusGraph Server的。
1.9 JanusGraph的命令接口使用方法
如下的命令会创建一个图,如下所示:
它有3个顶点,2个边
3 vertex:
v1: label student property id: 1
v2: no label, no property
v3: label studentproperty id: 2
2 edges with label friends
graph = JanusGraphFactory.open('conf/janusgraph-cassandra.properties');
mgmt = graph.openManagement();
student = mgmt.makeVertexLabel('student').make();
friends = mgmt.makeEdgeLabel('friends').make();
mgmt.commit();
v1 = graph.addVertex(label, 'student');
v1.property('id', '1');
v2 = graph.addVertex();
v3 = graph.addVertex(label, 'student');
v3.property('id', '2');
graph.tx().commit();
v1.addEdge('friends', v2);
v1.addEdge('friends', v3);
graph.tx().commit();
graph.traversal().V();
graph.traversal().V().values('id');
graph.traversal().E();
2、部署JanusGraph
2.1 docker install
The following section gives a minimal introduction on how to use the JanusGraph Docker images. For a more detailed documentation, refer to the README.md, especially for information about configuration of the images. The source repository also contains example configuration and Docker Compose files.
Usage
Start a JanusGraph Server instance
The default configuration uses the Oracle Berkeley DB Java Edition storage backend and the Apache Lucene indexing backend
$ docker run --name janusgraph-default janusgraph/janusgraph:latest
Connecting with Gremlin Console
Start a JanusGraph container and connect to the janusgraph server remotely using Gremlin Console
$docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph \
-it janusgraph/janusgraph:latest ./bin/gremlin.sh
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured janusgraph/172.17.0.2:8182
gremlin> :> g.addV('person').property('name', 'chris')
==>v[4160]
gremlin> :> g.V().values('name')
==>chris
2.2 local install
下载地址:
In order to run JanusGraph, Java 8 SE is required. Make sure the $JAVA_HOME environment variable points to the correct location where either JRE or JDK is installed. JanusGraph can be downloaded as a .zip archive from the Releases section of the project repository.
The default configuration uses the Oracle Berkeley DB Java Edition storage backend and the Apache Lucene indexing backend
$ unzip janusgraph-0.5.2.zip
$ ./bin/gremlin-server.sh start
./bin/gremlin.sh
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
远程连接:
需要修改remote.yaml的地址
3、Gremlin Query Language
Gremlin是janusgraph的查询语言,用来获取/变更图数据。Gremlin是一个面向path的语言,能够简单快速的完成图遍历和变化操作。Gremlin是一个功能性语言,因此遍历操作被声明到类path的表达式表单。例如,from Hercules, traverse to his father and then his father’s father and return the grandfather’s name。
Gremlin是Apache TinkerPop的组件。它独立于janusgraph发展,并且被支持于大多数图数据库。建在janusgraph上的应用程序通过Gremlin查询语言,用户避免被发行商锁在一个图数据库上。
这章是Gremlin查询语言的简要概述。更多信息可以参考以下资源:
· Complete Gremlin Manual: Gremlin全部步骤的手册.
· Gremlin Console Tutorial: 学习如何用Gremlin Console高效图遍历,和交互式图分析.
· Practical Gremlin Book: 图数据库用户和Gremlin查询语言的起步教程。
· Gremlin Recipes: Gremlin的最佳实践集合和常见的图遍历语法。
· Gremlin Language Drivers: 用不同的语言连接到Gremlin server,如 Go, JavaScript, .NET/C#, PHP, Python, Ruby, Scala, and TypeScript.
· Gremlin Language Variants: 学习如何内嵌Gremlin到一个主机编程语言。
· Gremlin for SQL developers: 学习用SQL查询数据,Gremlin的经典语法。
3.1 :remote
:remote 命令告诉控制台配置一个到服务端的远程连接,该链接建立使用 conf/remote.yaml配置文件。 这个配置文件指向了一个运行在localhost的Gremlin Server 实例。 :>命令表示 提交命令, 它会把在那一行的Gremlin命令发送到远端服务器。 默认情况下,远程连接是无会话的,这意味着在控制台中发送的每一行都被解释为单个请求。 使用分号作为分割符,可以在一行上发送多个语句。 或者,您可以在创建连接时通过指定session建立带有会话的控制台。 console session 允许您在多行输入中重用变量。
gremlin> :remote connect tinkerpop.server conf/remote.yaml
3.2 :图遍历
gremlin> g.V().has('name', 'hercules').out('father').out('father').values('name')==>saturn
上面的查询可以分成以下步骤:
g:当前graph。V:graph中所有顶点。has('name', 'hercules'): 过滤出顶点有属性name = "hercules" (这里只有一个)。out('father'):从Hercules遍历出边(outgoing edge)为father的顶点。out('father'):从Hercules的father (Jupiter)遍历出边为father的顶点。name: 拿出顶点的name属性的value。
放到一起,这些步骤构成了类似遍历查询的路径。每一步都能分解且得到结果。当构造大型、复杂的查询链,这种图遍历/查询的风格是很有用的。
标签: #apachexp系统