图数据库JG实战[6]: JanusGraph+HBase+ElasticSearch的环境搭建

2022-03-21 00:00:00 修改 配置 启动 方式 地址

图数据库JanusGraph实战是一个系列文章,将全面介绍JanusGraph的各个方面。本文是该系列的第六篇,主要介绍以HBase作为存储后端,以ElasticSearch为索引后端的JanusGraph环境大搭建。后续将会陆续介绍如何用Java来访问。


说明:本文以CentOS7为操作系统,并以安装包JDK1.8。


JanusGraph+HBase+ElasticSearch的安装主要分为四个部分:JanusGraph安装、HBase安装、ElasticSearch安装和Gremlin-Server配置。下面分别介绍这四个部分,后再介绍了下这个环境的日常使用命令。



部分:JanusGraph组件安装

[1] JanusGraph版本选择与下载

本文采用新的JanusGraph0.3.1版本,JanusGraph 0.3.1到这里下载https://github.com/JanusGraph/janusgraph/releases/。大约261M。


[2] 解压janus压缩包

将压缩包上传到dennis用户根目录下

[dennis@centos7 ~]$ unzip janusgraph-0.3.1-hadoop2.zip

[dennis@centos7 ~]$ mv janusgraph-0.3.1-hadoop2 janusgraph-0.3.1

[dennis@centos7 ~]$ sudo mv janusgraph-0.3.1 opt/

[3] 配置Janus环境变量

/opt/janusgraph-0.3.1

在~/.bashrc 末尾追加如下两行:

export JANUSGRAPH_HOME=/opt/janusgraph-0.3.1

export PATH=:$JANUSGRAPH_HOME/bin:$PATH

执行"source ~/.bashrc  "让环境变量即时生效,或者退出重新登录也可。


第二部分:HBase组件安装

说明:这里的HBase采用的是独立部署模式,无需安装Hadoop。独立模式的HBase与集群模式的在JanusGraph中的使用上没有太大区别,只是配置连接IP地址的时候独立模式只有一个IP,而集群需要配置zookeeper的多个IP地址,IP地址之前以逗号分隔。

[1] HBase版本选择与安装包下载

与JanusGraph0.3.1版本匹配的HBase版本为1.2.6, 1.3.1, 1.4.4,这里以HBase1.2.6为例。HBase1.2.6到这里下载http://archive.apache.org/dist/hbase/,选择1.2.6。hbase-1.2.6-bin.tar.gz,大约100M左右。我的百度网盘也有:链接:https://pan.baidu.com/s/12UtC2cXbGjTn_nPfOuB2JA 提取码:h52b

[2] 解压hbase压缩包

将压缩包上传到dennis用户的根目录下。

[dennis@centos7 ~]$ tar zxf hbase-1.2.6-bin.tar.gz

[dennis@centos7 ~]$ sudo mv hbase-1.2.6 opt/

[3] 配置hbase-env.sh

配置文件位于/opt/hbase-1.2.6/conf/hbase-env.sh

修改JAVA_HOME

export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64/jre

修改HBASE_PID_DIR

export HBASE_PID_DIR=/opt/hbase-1.2.6/data/pids

注释掉PermSize配置

# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+

#export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

#export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

[4] 配置hbase-site.xml

配置文件位于/opt/hbase-1.2.6/conf/hbase-site.xml

<configuration>

  <property>

    <name>hbase.rootdir</name>

    <value>file:///opt/hbase-1.2.6/data/hbase</value>

  </property>

  <property>

    <name>hbase.zookeeper.property.dataDir</name>

    <value>/opt/hbase-1.2.6/data/zookeeper</value>

  </property>

</configuration>

说明:

  • 上面配置的两个目录不需要事先创建,hbase会自动创建;

  • hbase.rootdir是RegionServer的共享目录,用来持久化HBase;

  • 如果不配置上面的目录,默认存放在/tmp目录下,机器重启后可能被删除掉.

[5] 配置环境变量

在~/.bashrc 末尾追加如下两行:

export HBASE_HOME=/opt/hbase-1.2.6

export PATH=:$HBASE_HOME/bin:$PATH

执行"source ~/.bashrc  "让环境变量即时生效。

[6] 配置hosts

注意:如果/etc/hosts中没有配置IP地址与主机名的映射,这可能会导致HBase启动失败。

先通过如下方法查看主机名:

[dennis@centos7 ~]$ cat etc/hostname

centos7

我本机的主机名为centos7,那么在/etc/hosts中的内容就应该为:

127.0.0.1   localhost

192.168.142.171 centos7

[7] 启动hbase

[dennis@centos7 ~]$ start-hbase.sh

[8] 检查hbase是否启动成功

先检查进程是否在,用jps看是否有HMaster进程。

[dennis@centos7 ~]$ jps

1817 HMaste

只有看到HMaster进程存在才表明HBase已成功启动。


第三部分:ElasticSearch组件安装

[1] 安装包

ElasticSearch的安装包在JanusGraph的安装包中已经包含了,因此不需要单独下载。但需要注意,自带的安装包只能以非root用户启动。

[2] 启动ElasticSearch服务

[dennis@centos7 ~]$ cd opt/janusgraph-0.3.1/

[dennis@centos7 janusgraph-0.3.1]$ cd elasticsearch/

[dennis@centos7 elasticsearch]$ nohup bin/elasticsearch &

nohup表示让elasticsearch在后台运行。

提示:如果需要从外部连接ES,需要在janusgraph-0.3.1/elasticsearch/config/elasticsearch.yml中配置监听的外部IP地址,例如:

network.host: 0.0.0.0

修改了IP地址之后,启动可能会提示失败需要修改内容。在/etc/sysctl.conf文件末尾增加如下一行:

vm.max_map_count=262144

保存后,执行"sudo sysctl -p"让配置立即生效。可以通过如下命令查看是否生效:

sudo sysctl -a|grep vm.max_map_count


前三部分小结

到这里JanusGraph就算装完成,是否觉得有些奇怪的是JanusGraph并没有启动什么进程服务之类的。这是因为JanusGraph本身就是一些Jar包,并没有什么服务。这里引出一个话题:访问JanusGraph数据的方式,也就是嵌入式和Gremlin-Server方式。嵌入式的方式就是直接通过JanusGraph的jar包去存取,只需要设定后端存储的IP地址即可。Gremlin-Server提供了一种RESTful接口的方式。

为了保证JausGraph+HBase+ElasticSearch环境搭建的完整性,这里将Gremlin-Server也搭建好。

注意:Gremlin-Server是在Tinkerpop中的叫法,在JanusGraph被成为JanusGraph Server。


第四部分:配置JanusGraph Server

JanusGraph Server的配置分为两部分:janusgraph-hbase-es-server.properties 和gremlin-hbase-es-server.yaml。

janusgraph-hbase-es-server.properties的配置

[1] 进入gremlin-server配置目录

[dennis@centos7 ~]$ cd opt/janusgraph-0.3.1/conf/gremlin-server

[2] 从默认的cassandra后端配置拷贝一份作为模板

[dennis@centos7 gremlin-server]$ cp janusgraph-cassandra-es-server.properties janusgraph-hbase-es-server.properties 

[3] 修改存储和索引类型

将原来的存储类型由cassandrathrift改为hbase,如下:

storage.backend=hbase

如果你的hbase不在本地,还需要修改storage.hostname。其他关键配置想还包括索引,如下:

index.search.backend=elasticsearch

index.search.hostname=127.0.0.1

如果你的配置不同,也需要一并修改。


gremlin-hbase-es-server.yaml的配置

[1] 先拷贝yifen[dennis@centos7 gremlin-server]$ cp gremlin-server.yaml gremlin-hbase-es-server.yaml

[dennis@centos7 ~]$ cd opt/janusgraph-0.3.1/conf/gremlin-server

[dennis@centos7 gremlin-server]$ cp gremlin-server.yaml gremlin-hbase-es-server.yaml

[2] 修改channelizer

channelizer是关系访问gremlin-server的方式,它提供了WebSocket和Http两种方式,默认只配置了WebSocket,即org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer。这里可以改为同时支持两种方式,如下:

channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer


[3] 配置graphs

原有配置为:graph: conf/gremlin-server/janusgraph-cql-es-server.properties,如下改为如下:

graph: conf/gremlin-server/janusgraph-hbase-es-server.properties

这里的graph就是你的向Gremlin-Server发送Gremlin查询语言时可以使用的图实例对象。它指向了实例化该图实例的配置文件,就是开始配置的那个文件。



启动JanusGraph Server

[dennis@centos7 janusgraph-0.3.1]$ gremlin-server.sh conf/gremlin-server/gremlin-hbase-es-server.yaml

说明:这个命令可以在任意目录下执行。


JanusGraph Server测试验证

上面提到JanusGraph Server支持WebSocket和HTTP访问。下面将通过这两种方式来验证环境的正确性。

[1] WebSocket接口验证

通过Gremlin控制台远程连接JanusGraph Server是WebSocket方式,因此可以用这种方式来验证。

打开gremlin控制台

[dennis@centos7 ~]$ gremlin.sh

gremlin> :remote connect tinkerpop.server conf/remote.yaml

==>Configured localhost/127.0.0.1:8182

gremlin> :> g.V().count()

==>0

gremlin>

g.V().count()是统计当前图数据库中的所有顶点。这里返回值为0.


[2] HTTP接口验证

HTTP接口验证要更简单,可以直接在浏览器输入IP地址+端口,后面跟Gremlin查询语言。示例如下:

 http://192.168.142.171:8182/?gremlin=g.V().count()

如果正常,会返回如下JSON结果:

{"requestId":"a85166ee-302d-444a-b02a-e163ef7e7ddb","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[{"@type":"g:Int64","@value":0}]},"meta":{"@type":"g:Map","@value":[]}}}

到这里,整个环境搭建及测试基本结束。


下面对该环境的日常使用再做个总结,如果从零启动该环境应该按如下方式来操作:

启动HBase

[dennis@centos7 ~]$ start-hbase.sh

启动ElasticSearch

[dennis@centos7 ~]$ cd /opt/janusgraph-0.3.1/elasticsearch/

[dennis@centos7 elasticsearch]$ nohup bin/elasticsearch &

启动Gremlin-Server

[dennis@centos7 ~]$ nohup gremlin-server.sh conf/gremlin-server/gremlin-hbase-server.yaml &

进入命令行

[dennis@centos7 ~]$ gremlin.sh

通过Gremlin-Server的使用方式如下:

gremlin> :remote connect tinkerpop.server conf/remote.yaml

gremlin> :> g.V().count()

==>0

gremlin>

通过嵌入式方式直接使用方式如下:

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

==>standardjanusgraph[hbase:[127.0.0.1]]

gremlin>

gremlin> g = graph.traversal()

==>graphtraversalsource[standardjanusgraph[hbase:[127.0.0.1]], standard]

gremlin> g.V().count()

==>0

gremlin>

相关文章