4. Quick Start Guide¶
This guide gets you started running a simple xGT server and client, for the purposes of trying out xGT in its simplest form. Note that this will require you to have root privileges for your environment.
- Step 1: Install dnf packages.
sudo dnf install apr apr-utils bzip2-libs hwloc-libs krb5-libs numactl openssl-libs zlib
- Step 2: Install the RPMs.
Download the RPMs provided as link by Trovares (typically provided by email).
sudo dnf install xgt-license-tools-X.Y.Z-1.x86_64.rpm xgt-server-X.Y.Z-1.x86_64.rpm
- Step 3: Retrieve host-id of system to run xGT.
/opt/xgtd/bin/lmxendutil -hostid
A sample output from such a run:
/opt/xgtd/bin/lmxendutil -hostid LM-X End-user Utility v5.0 Copyright (C) 2002-2021 X-Formation. All rights reserved. ETHERNET: ens3 HostID: 000C2BC32G83 ETHERNET: ens4 HostID: 0A42F8D4C3F0 HOSTNAME: wyvern HostID: wyvern USERNAME: jacob HostID: jacob IPADDRESS: 192.128.121.148 HostID: 192.128.121.148 IPADDRESS: 192.138.111.* HostID: 192.138.111.* IPADDRESS: 192.118.*.* HostID: 192.118.*.*
Copy the output of the program and send it to gettingstarted@trovares.com, and you will receive a license to your machine. Once you receive the license, put it in
/etc/xgtd/licenses/
. It should be namedxgtd.lic
.- Step 4: Update the PAM xgtd file.
xGT makes use of Pluggable Authentication Modules (PAM). For this example we’ll use
pam_permit
, which simply allows authentication of any user and password combination. Replace the file at path/etc/pam.d/xgtd
with the following (Note: writing to this file path requires root privileges):# # /etc/pam.d/xgtd - specify the PAM behavior for xgtd # auth required pam_permit.so account required pam_permit.so session required pam_permit.so
Warning
The pam_permit.so module is insecure and should never be used in a production environment where the xGT server and the xGT client are communicating over a network.
- Step 5: Start xgtd.
Execute the following commands to start xgtd.
systemctl start xgtd
- Step 6: Install the Python client.
pip install xgt
- Step 7: Install Jupyter Notebook.
To run the following Jupyter Notebook, you need the jupyter client installed.
pip install jupyter
Now we have done everything needed to set up the xGT server and client and can run a simple example. You may download the following as a Jupyter Notebook.
import xgt
# Connect to server
server = xgt.Connection()
# Drop all objects
[server.drop_frame(f) for f in ['ReportsTo', 'Employees']]
# Define and create the graph schema in the "demo" namespace
employees = server.create_vertex_frame(
name='Employees',
schema=[['person_id', xgt.INT],
['name', xgt.TEXT],
['postal_code', xgt.INT]],
key='person_id')
reports_to = server.create_edge_frame(
name='ReportsTo',
schema=[['employee_id', xgt.INT],
['boss_id', xgt.INT],
['start_date', xgt.DATE],
['end_date', xgt.DATE]],
source=employees,
target=employees,
source_key='employee_id',
target_key='boss_id')
# Load data to the graph in the xGT server.
# Use the insert() method for data of a few hundred rows or fewer;
# for bigger amounts of data, use the load() method with CSV files.
employees.insert(
[[111111101, 'Manny', 98103],
[111111102, 'Trish', 98108],
[911111501, 'Frank', 98101],
[911111502, 'Alice', 98102]
])
reports_to.insert(
[[111111101, 911111501, '2015-01-03', '2017-04-14'],
[111111102, 911111501, '2016-04-02', '2017-04-14'],
[911111502, 911111501, '2016-07-07', '2017-04-14'],
[111111101, 911111502, '2017-04-15', None],
[111111102, 911111502, '2017-04-15', None],
[911111501, 911111502, '2017-04-15', None]
])
def run_query(server, query):
j=server.run_job(query)
return j.get_data(format = 'pandas')
# Example Query
run_query(server, """
MATCH (employee:Employees)-[edge1:ReportsTo]->
(boss:Employees)-[edge2:ReportsTo]->(employee)
WHERE
edge1.end_date <= edge2.start_date
RETURN
employee.person_id AS employee1_id,
boss.person_id AS employee2_id,
edge1.start_date AS start1,
edge1.end_date AS end1,
edge2.start_date AS start2,
edge2.end_date AS end2
""")
# Cleanup, drop all objects
[server.drop_frame(f) for f in ['ReportsTo', 'Employees']]
If setting up the server and client on separate machines, information on ssh tunneling can be found here: Use SSH Tunneling.