JanusGraph 存储后端之 HBase 安装配置
Apache HBase 是一个开源的,分布式的,版本化的非关系数据库,参照 Google’s Bigtable: A Distributed Storage System for Structured Data by Chang et al 实现。 正如 Bigtable 利用 Google 文件系统提供的分布式数据存储一样,Apache HBase 在 Hadoop 和 HDFS 之上提供类似 Bigtable 的功能。
19.1 HBase 安装
以下部分讲述了 JanusGraph 与 Apache HBase 协同使用的各种方式。
19.1.1 本地服务模式
HBase 可以作为独立的单机数据库在与 JanusGraph 和最终用户应用程序相同的本地主机上运行。 在这个模型中,JanusGraph 和 HBase 通过 localhost
套接字相互通信。 在 HBase 上运行 JanusGraph 需要以下设置步骤:
- 下载和解压一个稳定版的 HBase 包:http://www.apache.org/dyn/closer.cgi/hbase/stable/
- 通过调用解压缩的 HBase 目录下,bin 目录中的
start-hbase.sh
脚本来启动 HBase。 要停止 HBase,请使用stop-hbase.sh
。
$ ./bin/start-hbase.sh
starting master, logging to ../logs/hbase-master-machine-name.local.out
现在,您可以按如下方式创建 HBase JanusGraph:
JanusGraph graph = JanusGraphFactory.build()
.set("storage.backend", "hbase")
.open();
请注意,由于默认情况下尝试使用 localhost 连接,因此您无需指定主机名。 此外,在 Gremlin 控制台中,您无法定义变量 conf
和 g
的类型。 因此,只需省略类型声明即可。
19.1.2 远程服务模式
当图形库需要扩展,超出单个机器的范围时,HBase 和 JanusGraph 在逻辑上分成不同的机器。 在此模型中,HBase 集群维护图形表示,并且任意数量的 JanusGraph 实例都维护对 HBase 集群的基于套接字的读/写访问。 最终用户应用程序可以在与 JanusGraph 相同的 JVM 中直接与 JanusGraph 交互。
例如,假设我们有一个运行的 HBase 集群,其 ZooKeeper 仲裁由 IP 地址为 77.77.77.77, 77.77.77.78 和 77.77.77.79 的三台机器组成,然后将 JanusGraph 与集群连接如下:
JanusGraph g = JanusGraphFactory.build()
.set("storage.backend", "hbase")
.set("storage.hostname", "77.77.77.77, 77.77.77.78, 77.77.77.79")
.open();
storage.hostname
接受以逗号分隔的 IP 地址列表以及 JanusGraph 应连接的 HBase 集群中任何机器子集的主机名。 此外,在 Gremlin 控制台中,您无法定义变量 conf
和 g
的类型。 因此,只需省略类型声明即可。
19.1.3 使用 Gremlin Server 的远程服务模式
最后,Gremlin Server 可以包装在前一小节中定义的每个 JanusGraph 实例上。 通过这种方式,最终用户应用程序不必是基于 Java 的应用程序,因为它可以作为客户端与 Gremlin Server 进行通信。 这种类型的部署非常适用于多语言体系结构,其中使用不同语言编写的各种组件需要在图形上进行引用和计算。
http://gremlin-server.janusgraph.machine1/mygraph/vertices/1
http://gremlin-server.janusgraph.machine2/mygraph/tp/gremlin?script=g.v(1).out('follows').out('created')
在这种情况下,每个 Gremlin Server 都将配置为连接到 HBase 集群。 以下显示了 Gremlin Server 配置的图形特定片段。 有关完整示例以及有关如何配置服务器的详细信息,请参阅第7章JanusGraph Server(译著,参考译文 Chapter 7. JanusGraph Server)。
...
graphs: {
g: conf/janusgraph-hbase.properties}
plugins:
- janusgraph.imports
...
19.2 HBase 特定配置
有关除常规 JanusGraph 配置选项外的所有 HBase 特定配置选项的完整列表,请参阅 第15章,配置参考。
配置 HBase 时,建议考虑以下 HBase 特定配置选项:
storage.hbase.table
:用于存储 JanusGraph 图的 HBase 表的名称。 允许多个 JanusGraph 图在同一 HBase 集群中共存。
有关更多 HBase 配置选项及其说明,请参阅 HBase 配置文档。 通过在 JanusGraph 配置中使用 storage.hbase.ext
添加相应的 HBase 配置选项,它将在初始化时传递给 HBase。 例如,要对 HBase 使用 znode /hbase-secure
,请设置属性:storage.hbase.ext.zookeeper.znode.parent = /hbase-secure
。 这种前缀允许通过 JanusGraph 配置任意 HBase 配置选项。
重要:HBase 后端使用毫秒来表示时间戳。 在 JanusGraph 0.2.0 及更早版本中,如果未明确设置
graph.timestamps
属性,则默认为MICRO
。 在这种情况下,graph.timestamps
属性必须显式设置为MILLI
。 在任何情况下都不要将graph.timestamps
属性设置为其他值。
19.3 全局图操作
HBase 上的 JanusGraph 支持全局顶点和边迭代。 但是,请注意所有这些顶点和、或边将被加载到内存中,这可能导致 OutOfMemoryException
。 使用 Chapter 37, JanusGraph with TinkerPop’s Hadoop-Gremlin 有效地迭代大图中的所有顶点或边。
19.4 管理 HBase 群集的贴士和技巧
主服务器上的 HBase shell 可用于获取群集的总体状态检查。
$HBASE_HOME/bin/hbase shell
通过 shell,以下命令通常被用于了解群集的状态。
status 'janusgraph'
status 'simple'
status 'detailed'
上述命令可以识别 region server 是否已关闭。 如果是这样,可以 ssh 到失败的 region server 机器并执行以下操作:
sudo -u hadoop $HBASE_HOME/bin/hbase-daemon.sh stop regionserver
sudo -u hadoop $HBASE_HOME/bin/hbase-daemon.sh start regionserver
使用 pssh 可以简化此过程,因为无需单独登录每台计算机来运行命令。 将 region servers 的 IP 地址放入 hosts.txt
文件,然后执行以下操作。
pssh -h host.txt sudo -u hadoop $HBASE_HOME/bin/hbase-daemon.sh stop regionserver
pssh -h host.txt sudo -u hadoop $HBASE_HOME/bin/hbase-daemon.sh start regionserver
接下来,有时您需要重新启动主服务器(例如遇到连接拒绝异常)。 为此,在主服务器上执行以下操作:
sudo -u hadoop $HBASE_HOME/bin/hbase-daemon.sh stop master
sudo -u hadoop $HBASE_HOME/bin/hbase-daemon.sh start master
最后,如果已经部署了HBase集群并且主服务器或区域服务器需要更多内存,只需使用必需的 -Xmx -Xms
参数编辑相应计算机上的 $HBASE_HOME/conf/hbase-env.sh
文件。 编辑完成后,如前所述停止/启动主服务器和/或 region servers。
翻译自官方文档原文地址:JanusGraph Documentation > Storage Backends > Apache HBase