Phoenix Query Server не возвращает никаких результатов

Я только начал использовать Apache Phoenix на HBase. У нас есть настройка, в которой Phoenix работает при вызове из узлов кластера (мы можем чисто CRUD в таблицах). Теперь нам нужно, чтобы приложение, работающее вне сети (скажем, система, на которой размещено мобильное приложение), могло запрашивать таблицу Phoenix. Для этого мы пытаемся использовать Phoenix Query Server (PQS). Я убедился, что порт 8765 доступен из внешней сети, поэтому, когда мы используем приведенную ниже команду CURL, мы ожидаем желаемого результата:

[root@externalsystem ~]# curl -XPOST -H 'request:{"request":"prepareAndExecute","connectionId":"000000-0000-0000-00000000","statementId": 12345,"sql": "SELECT * FROM QUESTTWEETS1","maxRowCount":1}' http://here.comes.external.ip:8765/

Но ответ, который мы получаем:

{"response":"executeResults","missingStatement":true,"rpcMetadata":{"response":"rpcMetadata","serverAddress":"viper.quest.com:8765"},"results":null}

Мы используем HDP 2.3.4.7-4 и согласованные версии HBase и PQS.

Совершенно ясно, что я передаю SQL как один из ключей в запросе. Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно здесь? Кроме того, поскольку цель этого состоит в том, чтобы предоставить способ доступа к таблицам Phoenix с высокой степенью параллелизма (что может потребоваться мобильным приложениям), является ли PQS подходящим решением или есть какие-либо лучшие варианты доступа к таблицам Phoenix? Поскольку я новичок в использовании HBase и Phoenix, дайте мне знать, если потребуются какие-либо другие подробности.


person iamds    schedule 10.09.2016    source источник


Ответы (2)


Узнал ответ на вопрос и дал его здесь для помощи другим новичкам. Я должен был знать больше о том, как работает JDBC в целом. Ниже приведены подробные шаги, чтобы заставить PQS работать на вас:

Шаг 1: curl -XPOST -H 'request:{request:openConnection,connectionId:000000-0000-0000-00000000}' URL

Пример ответа: {response:openConnection,rpcMetadata:{response:rpcMetadata,serverAddress:viper.quest.com:8765}}

Шаг 2: URL-адрес curl -XPOST -H 'request:{request:createStatement,connectionId:000000-0000-0000-00000000}'

Пример ответа: {response:createStatement,connectionId:000000-0000-0000-00000000,statementId:1,rpcMetadata:{response:rpcMetadata,serverAddress:viper.quest.com:8765}}

Шаг 3: curl -XPOST -H 'request:{request:prepareAndExecute,connectionId:000000-0000-0000-00000000,statementId: 1,sql: SELECT * FROM QUESTTWEETS1,maxRowCount:-1}' URL

Пример ответа: JSON с данными

Шаг 4: curl -XPOST -H 'request:{request:closeStatement,connectionId:000000-0000-0000-00000000,statementId: 1}' URL

Пример ответа: {response:closeStatement,rpcMetadata:{response:rpcMetadata,serverAddress:viper.quest.com:8765}}

Шаг 5: curl -XPOST -H 'request:{request:closeConnection,connectionId:000000-0000-0000-00000000}' URL

Пример ответа: {response:closeConnection,rpcMetadata:{response:rpcMetadata,serverAddress:viper.quest.com:8765}}

Где URL имеет форму - http://external.ip.of.pqs:8765/

Надеюсь это поможет.

person iamds    schedule 14.09.2016

Вы можете использовать jdbc для подключения к phoenix так же, как и mysql. --- http://phoenix.apache.org/index.html

person 陈志明    schedule 30.09.2016