PGX 20.1.1
Documentation

System Configuration

This page provides general configuration and troubloshooting information for PGX as an onprem artifact. Keep in mind that packaging may vary depending on the product that embeds PGX, always refer to the specific product documentation. Configuration instructions for more advanced usage models, which include running PGX as a server, can be found here.

System Requirements

The requirements for PGX on Oracle Linux (x86_64), on which PGX is actively tested, are the following:

  • Java SE 8 Development Kit (JDK8)
  • The enterprise scheduler of PGX Shared Memory requires the following shared libaries (with the minimum symbol versioning information mentioned in the parenthesis). If the requirements are not met, PGX Shared Memory falls back to the basic scheduler.
    • The GNU C Library libc.so.6 (GLIBC_2.6)
    • The GNU dynamic linker/loader ld-linux-x86-64.so.2 (GLIBC_2.3)
    • The POSIX Threading Library libpthread.so.0 (GLIBC_2.3.2)
    • The Standard Math Library libm.so.6 (GLIBC_2.2.5)
    • The Realtime Extensions library librt.so.1 (GLIBC_2.2.5)
    • The NUMA policy support library libnuma.so.1 (libnuma_1.2)
    • The GCC low-level runtime library libgcc_s.so.1 (GCC_3.4)
    • The GNU C++ Library libstdc++.so.6 (GLIBCXX_3.4.19 and CXXABI_1.3.5)
  • In the case of PGX in distributed execution mode, each machine of the target cluster must fulfill the same requirements as the enterprise scheduler of PGX Shared Memory mentioned above. Each machine additionally requires the following shared libaries (with the minimum symbol versioning information mentioned in parenthesis):
    • The GNU Offloading and Multi Processing Runtime Library libgomp.so.1 (GOMP_1.0 and OMP_3.0)
    • The libibverbs library (must contain the XRC extensions. To determine if your version of libibverbs.so contains the proper extensions, run the following command objdump -T <path-to-libibverbs.so>/libibverbs.so | grep "_xrc_", which will display something if and only if you have the proper extensions). You can install a version of the libibverbs library containing the proper extensions as part of the oracle-ofed-release package from the ol6_UEKR4_OFED or ol7_UEKR4_OFED yum repositories.

Checking for the Existence of the Required Shared Libraries

To check existing instances of a library (e.g., libstdc++.so.6) on your system, you can use the following commands:

# install 'mlocate' package in case the commands below does not work
sudo updatedb
locate libstdc++.so.6

To verify that an instance of a library has the minimum required symbol versioning information mentioned above, e.g., GLIBCXX_3.4.19 and CXXABI_1.3.5 for the libstdc++.so.6 library, you can use the following commands:

strings /path/to/libstdc++.so.6 | grep -x GLIBCXX_3.4.19
strings /path/to/libstdc++.so.6 | grep -x CXXABI_1.3.5

If no line is returned, then the library does not support the minimum required symbol versioning information. In this case, you need to get the required shared libraries with at least the minimum required symbol versioning information.

Getting and Pointing to the Required Shared Libraries

You can use your Linux distribution's package manager and software repositories to search and install the required shared libraries. Alternatively, you can look for newer versions of the shared libraries possibly brought in by other software, or you can build the shared libraries from sources. Please note that the shared libraries must have the minimum symbol versioning information mentioned above.

Specifically for the libgcc_s.so.1, libstdc++.so.6 and libgomp.so.1 shared libraries, you can either update the system's default GCC to version 4.8.2 (or newer) or, if an official update is not available, manually upgrade the C++ libraries.

Once you have the newer libraries somewhere in the system, either in some directory discovered via the locate command or in /usr/local/lib64, you can then simply set your LD_LIBRARY_PATH to point to the directory containing the shared libraries before starting PGX:

export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

To avoid setting the LD_LIBRARY_PATH after every login, you can add the command above to your ~/.bash_profile.

Basic Installation

This section describes the minimum steps required to install and run PGX in local shell mode, which is suitable for quickly testing PGX's features but not for a production environment. Please see the other usage modes to install PGX for a production environment.

  1. Install the Oracle JDK 8, if it is not already on your system. Refer to your system administrator, or follow these instructions to install:

    • Download Java SE 8 Development Kit (JDK8) from here .
    • Follow the installation instructions located above.
    • Make sure the JAVA_HOME environment variable points to the JDK8 home directory, e.g. export JAVA_HOME=/usr/lib/jvm/java-8-oracle.
  2. Download the PGX server package

  3. Unpack the downloaded zip file into a directory of your choice. For example, unzip pgx-20.1.1-server.zip -d /opt/pgx.

  4. [Optional] You can then verify that PGX boots up by starting it in local shell mode, by launching the PGX Shell (the path to the executable may vary according to the product packaging):

    cd $PGX_HOME
    ./bin/pgx-jshell
    

See our troubleshooting section if you encounter problems.

Pypgx Installation

Requirements

Make sure you have Python 3 installed (Python 3.5+ recommended)

Installation Steps

  1. Download the client zip file (pgx-distribution--client.zip)
  2. Run pip install <path-to-zip>
  3. Now pypgx and its dependencies should be installed. You can test this with something like python3 -c "import pypgx; help(pypgx)"
  4. You can use pypgx to connect to an existing PGX server