Oracle PGX на пряже - 404 на веб-сервисе - PullRequest
0 голосов
/ 13 ноября 2018

Я использую Yarn на Oracle BDA X7-2, спецификации:

  • Cloudera Enterprise 5.14.3
  • Java 1.8.0_171
  • PGX 2.7.1

Я пытаюсь запустить PGX на Yarn, следуя этому руководству: https://docs.oracle.com/cd/E56133_01/2.5.0/tutorials/yarn.html

Удалось запустить скрипт установки, завершил предоставленный им файл конфигурации следующим образом:

{
  "pgx_yarn_jar_hdfs_path": "hdfs:/user/pgx/pgx-yarn-2.7.1.jar",
  "pgx_war_hdfs_path": "hdfs:/user/pgx/pgx-webapp-2.7.1.war",
  "pgx_conf_hdfs_path": "hdfs:/user/pgx/pgx.conf",
  "pgx_log4j_conf_hdfs_path": "hdfs:/user/pgx/log4j2.xml",
  "pgx_dist_log4j_conf_hdfs_path": "hdfs:/user/pgx/dist_log4j.xml",
  "pgx_cluster_host_hdfs_path": "hdfs:/user/pgx/cluster-host.tgz",
  "zookeeper_connect_string": "bda1node05,bda1node06,bda1node07",
  "standard_library_path": "/usr/lib64/gcc/4.8.2",
  "min_heap_size": "512m",
  "max_heap_size": "12g",
  "container_cores": 9,
  "container_memory": 0,
  "container_priority": 0,
  "num_machines": 1
}

Пряжа имеет приложение pgx-service в состоянии RUNNING, в stderr нет ошибок, журнал показывает, что служба работает по адресу:

http://bda1node06:7007

И процесс linux Java запускается с помощью следующей команды:

/usr/java/default/bin/java -Xms512m -Xmx12g oracle.pgx.yarn.PgxService bda1node06 /u11/hadoop/yarn/nm/usercache/root/appcache/application_1539869144089_2070/container_e22_1539869144089_2070_01_000002/pgx-server.war 7007 bda1node05,bda1node06,bda1node07 /pgx-8eef44e2-1657-403a-8193-0102f5266680

И после выполнения клиента PGX для целей тестирования:

$PGX_HOME/bin/pgx --base_url http://bda1node06:7007

Я получаю:

java.util.concurrent.ExecutionException: java.lang.IllegalStateException: cannot connect to server; requested http://bda1node06:7007/version?extendedInfo=true and expected status 200, got 404 instead; response body = ""
    at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
    at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
    at oracle.pgx.api.PgxFuture.get(PgxFuture.java:99)
    at oracle.pgx.api.ServerInstance.createSession(ServerInstance.java:559)
    at oracle.pgx.shell.Console.initSession(Console.java:280)
    at oracle.pgx.shell.Console.(Console.java:153)
    at oracle.pgx.shell.Console.main(Console.java:296)
Caused by: java.lang.IllegalStateException: cannot connect to server; requested http://bda1node06:7007/version?extendedInfo=true and expected status 200, got 404 instead; response body = ""
    at oracle.pgx.api.ClientApiProvider.lambda$versionCheck$2(ClientApiProvider.java:189)
    at oracle.pgx.client.RemoteUtils.lambda$asyncRequest$5(RemoteUtils.java:278)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Я понятия не имею, как отлаживать и проверять, нужен ли какой-либо дополнительный путь в URL-адресе соединения.

Как я могу приступить к отладке?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Я сделаю небольшое наблюдение.

Нам удалось запустить сервер pgx и управлять графом hbase! : D

PGX "Hello World"

Мы написали небольшой код для вставки вершин, edgex, создания экземпляра pgx и запуска простого примера, вот что:

cfg = GraphConfigBuilder.forPropertyGraphHbase().setName('sinapse').setZkQuorum('bda1node05').build()
opg = OraclePropertyGraph.getInstance(cfg)
​
a = opg.addVertex()
a.setProperty('nome', 'Felipe')
​
b = opg.addVertex()
b.setProperty('nome', 'Rhenan')
​
c = opg.addVertex()
c.setProperty('nome', 'Hugo')
​
opg.addEdge(a, b, 'Pai de')
opg.addEdge(b, c, 'Pai de')
opg.addEdge(a, c, 'Avo de')

opg.commit()
​
session = Pgx.createSession('sinapsepgx')
analyst = session.createAnalyst()
pgxGraph = session.readGraphWithProperties(opg.getConfig(), true)
analyst.countTriangles(pgxGraph, true)

И это сработало просто отлично!

Клиент - Архитектура сервера

Следующим шагом мы перешли в режим клиент / сервер, запустив скрипт start-server. Нам удалось сделать это просто отлично! Это наши конфигурационные файлы:

server.conf

{
  "port": 7007,
  "enable_tls": false,
  "enable_client_authentication": false
}

pgx.conf

{
    "allow_idle_timeout_overwrite": true,
    "allow_local_filesystem": false,
    "allow_task_timeout_overwrite": true,
    "enable_gm_compiler": true,
    "enterprise_scheduler_config": {
      "analysis_task_config": {
        "priority": "MEDIUM",
        "weight": 12,
        "max_threads": 12
      },
      "fast_analysis_task_config": {
        "priority": "HIGH",
        "weight": 1,
        "max_threads": 12
      },
      "num_io_threads_per_task": 12
    },
    "preload_graphs": [
        {"path": "graphs/sinapse_conf.json",
         "name": "sinapse"}
    ],
    "max_active_sessions": 1024,
    "max_queue_size_per_session": -1,
    "max_snapshot_count": 0,
    "memory_cleanup_interval": 600,
    "path_to_gm_compiler": null,
    "release_memory_threshold": 0.85,
    "session_idle_timeout_secs": 0,
    "session_task_timeout_secs": 0,
    "strict_mode": true,
    "tmp_dir": "/tmp"
  }

sinapse_conf.json

{
  "edge_props": [
    {
      "name": "relacao",
      "type": "string"
    }
  ],
  "db_engine": "HBASE",
  "vertex_props": [
    {
      "name": "nome",
      "type": "string"
    },
    {
      "name": "cpf",
      "type": "string"
    }
  ],
  "format": "pg",
  "name": "sinapse",
  "error_handling": {},
  "vertex_id_type": "long",
  "attributes": {},
  "loading": {},
  "zk_quorum": "bda1node05,bda1node06,bda1node07"

}

start-script прекрасно с этим справился, предварительно загрузил наш hbase график, работает как чудо.

Подключено к серверу с помощью клиента pgx:

./bin/pgx -b http://localhost:7007

И удалось сделать то же самое, что мы сделали в заводной оболочке. Это круто.

PGX на пряже

Что ж, теперь мы вернулись к нашей задаче: запустить и управлять PGX на Yarn.

Мы скопировали наш файл pgx.conf в hdf, например:

HDFS: //user/pgx/pgx.conf

{
    "allow_idle_timeout_overwrite": true,
    "allow_local_filesystem": false,
    "allow_task_timeout_overwrite": true,
    "enable_gm_compiler": true,
    "enterprise_scheduler_config": {
      "analysis_task_config": {
        "priority": "MEDIUM",
        "weight": 12,
        "max_threads": 12
      },
      "fast_analysis_task_config": {
        "priority": "HIGH",
        "weight": 1,
        "max_threads": 12
      },
      "num_io_threads_per_task": 12
    },
    "preload_graphs": [
        {"path": "graphs/sinapse_conf.json",
         "name": "sinapse"}
    ],
    "max_active_sessions": 1024,
    "max_queue_size_per_session": -1,
    "max_snapshot_count": 0,
    "memory_cleanup_interval": 600,
    "path_to_gm_compiler": null,
    "release_memory_threshold": 0.85,
    "session_idle_timeout_secs": 0,
    "session_task_timeout_secs": 0,
    "strict_mode": true,
    "tmp_dir": "/tmp"
  }
* ** 1055 тысячи пятьдесят-четырь * / Opt / оракул / Оракул-пространственно-граф / property_graph / PGX / нить / CONF / yarn.conf * +1056 ** * 1 057
{
  "pgx_yarn_jar_hdfs_path": "hdfs://mpmapas-ns/user/pgx/pgx-yarn-2.7.1.jar",
  "pgx_war_hdfs_path": "hdfs://mpmapas-ns/user/pgx/pgx-webapp-2.7.1.war",
  "pgx_conf_hdfs_path": "hdfs://mpmapas-ns/user/pgx/pgx.conf",
  "pgx_log4j_conf_hdfs_path": "hdfs://mpmapas-ns/user/pgx/log4j2.xml",
  "pgx_dist_log4j_conf_hdfs_path": "hdfs://mpmapas-ns/user/pgx/dist_log4j.xml",
  "pgx_cluster_host_hdfs_path": "hdfs://mpmapas-ns/user/pgx/cluster-host.tgz",
  "zookeeper_connect_string": "bda1node05.pgj.rj.gov.br,bda1node06.pgj.rj.gov.br,bda1node07.pgj.rj.gov.br",
  "standard_library_path": "/usr/lib64/gcc/4.8.2",
  "min_heap_size": "512m",
  "max_heap_size": "12g",
  "container_cores": 9,
  "container_memory": 0,
  "container_priority": 0,
  "num_machines": 1
}

Кроме того, @albert рекомендовал нам удалить файл log4j2.xml из файла server / shared-mem / pgx-webapp-2.7.1.war, чтобы мы могли обрабатывать журналирование log4j, используя только файл, расположенный в нашей папке hdfs.

Итак, мы распаковали, удалили, перепаковали файл war, отредактировали файл log4j2.xml на hdfs следующим образом:

HDFS: //user/pgx/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss,SSS} %p %C{1} - %m%n"/>
        </Console>
                <File name="LogFile" fileName="file:/tmp/pg_trace.log">
                        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
                </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="LogFile"/>
        </Root>
        <Logger name="oracle.pgx.engine.admin.Ctrl" level="debug">
            <AppenderRef ref="LogFile"/>
        </Logger>
        <Logger name="pgx.dist.cluster_host" level="debug">
            <AppenderRef ref="LogFile"/>
        </Logger>
    </Loggers>
</Configuration>

И наконец запустил команду сервера запуска пряжи, вот так:

yarn jar yarn/pgx-yarn-2.7.1.jar yarn/conf/yarn.conf

И мы получаем нижнюю часть лог-файла, которая кажется очень хорошей!:

18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:java.io.tmpdir=/tmp
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:java.compiler=<NA>
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:os.name=Linux
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:os.arch=amd64
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:os.version=4.1.12-124.14.1.el7uek.x86_64
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:user.name=root
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:user.home=/root
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Client environment:user.dir=/opt/oracle/oracle-spatial-graph/property_graph/pgx
18/12/11 16:25:03 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=bda1node05.pgj.rj.gov.br,bda1node06.pgj.rj.gov.br,bda1node07.pgj.rj.gov.br sessionTimeout=10000 watcher=oracle.pgx.yarn.ClientZkClient@32da97fd
18/12/11 16:25:03 INFO zookeeper.ClientCnxn: Opening socket connection to server bda1node07.pgj.rj.gov.br/192.168.8.7:2181. Will not attempt to authenticate using SASL (unknown error)
18/12/11 16:25:03 INFO zookeeper.ClientCnxn: Socket connection established, initiating session, client: /192.168.8.5:33299, server: bda1node07.pgj.rj.gov.br/192.168.8.7:2181
18/12/11 16:25:03 INFO zookeeper.ClientCnxn: Session establishment complete on server bda1node07.pgj.rj.gov.br/192.168.8.7:2181, sessionid = 0x3668759ae4553df, negotiated timeout = 10000
18/12/11 16:25:05 INFO yarn.StartService: waiting for PGX service (yarn appId == 'application_1539869144089_2555') to come up ...
18/12/11 16:25:10 INFO yarn.StartService: retrieved PGX host: http://bda1node07.pgj.rj.gov.br:7007
18/12/11 16:25:10 INFO yarn.StartService: to connect a remote shell to this host, run '$PGX_HOME/bin/pgx --base_url http://bda1node07.pgj.rj.gov.br:7007'
18/12/11 16:25:10 INFO yarn.StartService: to shut the PGX service down, run 'yarn application -kill application_1539869144089_2555'
18/12/11 16:25:10 INFO zookeeper.ZooKeeper: Session: 0x3668759ae4553df closed
18/12/11 16:25:10 INFO zookeeper.ClientCnxn: EventThread shut down

Но при подключении к нему все равно возвращается 404; (

Последняя информация, которую я могу вам дать, - это журнал пряжи stderr, который также сообщает, что мы неправильно используем log4j:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/cloudera/parcels/CDH-5.14.2-1.cdh5.14.2.p0.3/jars/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/u09/hadoop/yarn/nm/filecache/890/pgx-yarn-2.7.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.
18/12/11 16:25:06 INFO yarn.AppMaster: register app
18/12/11 16:25:06 INFO yarn.AppMaster: RM response = [queue=root.users.root,maxCap=<memory:65536, vCores:9>]
18/12/11 16:25:06 INFO yarn.AppMaster: max capability of cluster: <memory:65536, vCores:9>
18/12/11 16:25:06 INFO yarn.AppMaster: attempting to allocate 1 containers
18/12/11 16:25:06 INFO yarn.AppMaster: attempt 1: got 0 containers. Available: <memory:194560, vCores:180>
18/12/11 16:25:06 INFO yarn.AppMaster: attempt 2: got 0 containers. Available: <memory:194560, vCores:180>
18/12/11 16:25:06 INFO yarn.AppMaster: attempt 3: got 1 containers. Available: <memory:129024, vCores:171>
18/12/11 16:25:06 INFO yarn.AppMaster: copy hdfs://mpmapas-ns/user/pgx/pgx-yarn-2.7.1.jar into pgx-yarn.jar
18/12/11 16:25:06 INFO yarn.AppMaster: copy hdfs://mpmapas-ns/user/pgx/pgx-webapp-2.7.1.war into pgx-server.war
18/12/11 16:25:06 INFO yarn.AppMaster: copy hdfs://mpmapas-ns/user/pgx/pgx.conf into conf/pgx.conf
18/12/11 16:25:06 INFO yarn.AppMaster: copy hdfs://mpmapas-ns/user/pgx/log4j2.xml into conf/log4j2.xml
18/12/11 16:25:07 INFO yarn.AppMaster: server env = {CLASSPATH=conf:pgx-server/WEB-INF/lib/*:pgx-yarn.jar:$HADOOP_CONF_DIR}
18/12/11 16:25:07 INFO yarn.AppMaster: server command = $JAVA_HOME/bin/java -Xms512m -Xmx12g oracle.pgx.yarn.PgxService bda1node07.pgj.rj.gov.br $PWD/pgx-server.war 7007 bda1node05.pgj.rj.gov.br,bda1node06.pgj.rj.gov.br,bda1node07.pgj.rj.gov.br /pgx-37a121ce-e028-432c-8761-104027126c3b 1><LOG_DIR>/stdout 2><LOG_DIR>/stderr; 
18/12/11 16:25:07 INFO yarn.AppMaster: check for completion
18/12/11 16:25:08 INFO yarn.AppMaster: check for completion
18/12/11 16:25:08 INFO yarn.AppMaster: check for completion
18/12/11 16:25:09 INFO yarn.AppMaster: check for completion
18/12/11 16:25:09 INFO yarn.AppMaster: check for completion
18/12/11 16:25:10 INFO yarn.AppMaster: check for completion
18/12/11 16:25:10 INFO yarn.AppMaster: check for completion
18/12/11 16:25:11 INFO yarn.AppMaster: check for completion
18/12/11 16:25:11 INFO yarn.AppMaster: check for completion
18/12/11 16:25:12 INFO yarn.AppMaster: check for completion
.
.
.

Это самое дальнее, что нам удалось пройти.

Мы можем начать нашу работу сейчас! Это действительно захватывающе. Теперь я знаю, как правильно запустить службу, предварительно загрузить, вставить, управлять данными, и мы импортируем в нее нашу существующую графическую базу данных и проведем некоторые эксперименты.

Было бы замечательно, чтобы это работало на пряже на уровне производства.

Спасибо всем за преданность и внимание.

0 голосов
/ 13 ноября 2018

По умолчанию PGX имеет базовый путь /pgx, что означает, что вы должны подключиться следующим образом:

$PGX_HOME/bin/pgx --base_url http://bda1node06:7007/pgx
...