图数据库JG实战[6]: JanusGraph+HBase+ElasticSearch的环境搭建
图数据库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>
相关文章