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

图数据库JanusGraph实战[6]:  JanusGraph+ HBase+ElasticSearch的环境搭建
 
做者:胡佳辉(家辉)  日期:2019年01月14日 CSDN博客: https://blog.csdn.net/gobitan
 
图数据库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查询语言。示例以下:
若是正常,会返回以下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>
 
 
本文原发于 "图数据库与图计算"公众号,欢迎关注!也能够加入"图数据库与图计算"QQ群(463749267)