JanusGraph Install
Install the JanusGraph archive. It contains scripts for:
- the Gremlin REPL
- the Rexster Server
Note: the archive contains the rexster server but it is not configured here, please see ryba/rexster
module.exports = header: 'JanusGraph Install', handler: ->
{janusgraph, hbase} = @config.ryba
@registry.register ['file', 'jaas'], 'ryba/lib/file_jaas'
Install
Download and extract a ZIP Archive
@call header: 'Packages', ->
archive_name = path.basename janusgraph.source
unzip_dir = path.join janusgraph.install_dir, path.basename archive_name, path.extname archive_name
archive_path = path.join janusgraph.install_dir, archive_name
@system.mkdir
target: janusgraph.install_dir
@file.download
source: janusgraph.source
target: archive_path
@system.remove
target: unzip_dir
if: -> @status -1
@tools.extract
source: archive_path,
target: janusgraph.install_dir
@system.remove
target: janusgraph.home
if: -> @status -1
@system.link
source: unzip_dir
target: janusgraph.home
if: -> @status -2
Env
Modify envvars in the gremlin scripts.
@call header: 'Gremlin Env', ->
write = [
match: /^JAVA_OPTIONS="\$JAVA_OPTIONS -Djava.security.auth.login.config=.*/m
replace: "JAVA_OPTIONS=\"$JAVA_OPTIONS -Djava.security.auth.login.config=#{path.join janusgraph.home, 'janusgraph.jaas'}\" # RYBA CONF, DON'T OVERWRITE"
place_before: /^exec \$JAVA \$JAVA_OPTIONS \$MAIN_CLASS.*/m
,
match: /^JAVA_OPTIONS="\$JAVA_OPTIONS -Djava.library.path=.*/m
replace: "JAVA_OPTIONS=\"$JAVA_OPTIONS -Djava.library.path=${HADOOP_HOME}/lib/native\" # RYBA CONF, DON'T OVERWRITE"
place_before: /^exec \$JAVA \$JAVA_OPTIONS \$MAIN_CLASS.*/m
,
match: /^(.*)# RYBA SET HADOOP-ENV, DON'T OVERWRITE/m
replace: "HADOOP_HOME=/usr/hdp/current/hadoop-client # RYBA SET HADOOP-ENV, DON'T OVERWRITE"
append: /^set -u.*/m
]
if janusgraph.config['storage.backend'] is 'hbase' then write.unshift
match: /^.*# RYBA CONF hbase-env, DON'T OVERWRITE/m
replace: "CP=\"$CP:#{@config.ryba.hbase.conf_dir}:/etc/hadoop/conf\" # RYBA CONF hbase-env, DON'T OVERWRITE"
place_before: /^export CLASSPATH=.*/m
@file
target: path.join janusgraph.home, 'bin/gremlin.sh'
write: write
mode: 0o755
Kerberos
Secure the Zookeeper connection with JAAS
@file.jaas
header: 'Kerberos JAAS'
target: path.join janusgraph.home, 'janusgraph.jaas'
content: Client:
useTicketCache: 'true'
mode: 0o644
Configure
Creates a configuration file. Always load this file in Gremlin REPL !
@call header: 'Gremlin Properties', ->
storage = janusgraph.config['storage.backend']
index = janusgraph.config['index.search.backend']
@file.properties
target: path.join janusgraph.home, "janusgraph.#{storage}-#{index}.properties"
content: janusgraph.config
backup: true
eof: true
## Configure Test
Creates a configuration file. Always load this file in Gremlin REPL !
module.exports.push header: 'Gremlin Test Properties', ->
{janusgraph. = @config.ryba
storage = janusgraph.config['storage.backend']
config = {}
config[k] = v for k, v of janusgraph.config
config['storage.hbase.table'] = 'janusgraph.test'
@file.properties
target: path.join janusgraph.home, "janusgraph.hbase-#{janusgraph.config['index.search.backend']}-test.properties"
content: config
merge: true
HBase Configuration
Namespace is still not working in version 1.0
# @call
# header: 'Create HBase Namespace'
# if: -> @config.ryba.janusgraph.config['storage.backend'] is 'hbase'
# , (options) ->
# # @log "Titan: HBase namespace not yet ready"
# @system.execute
# cmd: mkcmd.hbase @, """
# if hbase shell -n 2>/dev/null <<< "list_namespace 'janusgraph." | grep '1 row(s)'; then exit 3; fi
# hbase shell -n 2>/dev/null <<< "create_namespace 'janusgraph."
# """
# code_skipped: 3
@call
header: 'Create HBase table'
if: -> @config.ryba.janusgraph.config['storage.backend'] is 'hbase'
, ->
table = janusgraph.config['storage.hbase.table']
@system.execute
cmd: mkcmd.hbase @, """
if hbase shell -n 2>/dev/null <<< "exists '#{table}'" | grep 'Table #{table} does exist'; then exit 3; fi
cd #{janusgraph.home}
bin/gremlin.sh 2>/dev/null <<< \"g = JanusGraphFactory.open('janusgraph.hbase-#{janusgraph.config['index.search.backend']}.properties')\" | grep '==>janusgraph.raph'
"""
code_skipped: 3
Dependencies
path = require 'path'
mkcmd = require '../lib/mkcmd'