Подключение к Phoenix
Существует несколько способов соединения с Phoenix, некоторые из которых приведены в следующих секциях.
SQLLine
SQLLine предоставляет простейший способ для начала работы с Phoenix. Это Java-консоль, доступная на каждом узле кластера HBase сразу после его установки. Начните работу с SQLLine, выполнив следующую команду:
$ cd /usr/lib/phoenix/bin
$ ./sqlline.py
Консоль SQLLine выводит строку приглашения, заканчивающуюся символом >
, после которого следует вводить команду Phoenix.
Setting property: [incremental, false] Setting property: [isolation, TRANSACTION_READ_COMMITTED] issuing: !connect jdbc:phoenix: none none org.apache.phoenix.jdbc.PhoenixDriver Connecting to jdbc:phoenix: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/lib/phoenix/phoenix-5.0.0-HBase-2.0-client.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 21/11/30 13:51:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Connected to: Phoenix (version 5.0) Driver: PhoenixEmbeddedDriver (version 5.0) Autocommit status: true Transaction isolation: TRANSACTION_READ_COMMITTED Building list of tables and columns for tab-completion (set fastconnect to true to skip)... 142/142 (100%) Done Done sqlline version 1.2.0 0: jdbc:phoenix:>
Для закрытия консоли SQLLine введите следующую команду:
!quit
Простейшие операции управления данными в Phoenix с помощью консоли SQLLine приведены в разделе Использование SQLLine для работы с Phoenix.
JDBC
Существуют два способа подключения к Phoenix через JDBC:
-
Phoenix Thick Driver. Его используют для подключения через сервис ZooKeeper (ZK). Полный путь соединения (JDBC URL) имеет следующий вид:
jdbc:phoenix:[список узлов ZooKeeper через запятую [: порт ZK [:корневой узел ZK для HBase [:kerberos_principal [:путь к файлу keytab для Kerberos]]]]
Простейший пример:
jdbc:phoenix:bds-adh-1.ru-central1.internal,bds-adh-2.ru-central1.internal,bds-adh-3.ru-central1.internal:2181
-
Phoenix Thin Driver. Это отдельный клиент с минимальным набором зависимостей. Он использует возможности специальных серверов запросов (Phoenix Query Server services). В этом случае JDBC URL имеет следующий вид:
jdbc:phoenix:thin:[key=value[;key=value...]]
Например:
jdbc:phoenix:thin:url=http://10.92.6.9:8765;serialization=PROTOBUF
ПРИМЕЧАНИЕ
Более подробная информация о драйверах JDBC для Phoenix приведена в документации Phoenix. |
На практике используют оба типа драйверов. Выбор зависит от топологии кластера, количества серверов запросов Phoenix и возможности добавления зависимостей в клиентское приложение. При пакетной обработке производительность обоих драйверов примерно одинаковая, без использования пакетов производительность Thick Driver обычно на 30% выше.
Рассмотрим приложение Java, использующее Phoenix Thin Driver:
-
Создайте класс, используя приведенный ниже код (например в среде разработки Eclipse IDE). Замените
<IP>
на IP-адрес вашего сервера запросов (Phoenix Query Server). Следующий код создает таблицуTEST_JDBC
с двумя колонками, записывает в них некоторые значения и затем выводит содержимое таблицы в выходной поток:package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import java.sql.Statement; public class testclass { public static void main(String[] args) throws SQLException { Statement stmt = null; ResultSet rset = null; Connection con = DriverManager.getConnection("jdbc:phoenix:thin:url=http://<IP>:8765;serialization=PROTOBUF"); stmt = con.createStatement(); stmt.executeUpdate("CREATE TABLE TEST_JDBC (PK INTEGER NOT NULL PRIMARY KEY, NAME VARCHAR)"); stmt.executeUpdate("UPSERT INTO TEST_JDBC VALUES (1,'Thick')"); stmt.executeUpdate("UPSERT INTO TEST_JDBC VALUES (2,'Thin')"); con.commit(); PreparedStatement statement = con.prepareStatement("SELECT * FROM TEST_JDBC"); rset = statement.executeQuery(); while (rset.next()) { System.out.println(rset.getString("NAME")); } statement.close(); con.close(); } }
-
Определите необходимый вам JAR-файл, название которого содержит версии HBase и Phoenix и имеет вид phoenix-<phoenix_version>-HBase-<hbase_version>-thin-client.jar. Например, для версий HBase 2.0 и Phoenix 5.0.0 следует использовать phoenix-5.0.0-HBase-2.0-thin-client.jar. Его можно скопировать из узла кластера HBase (из каталога /usr/lib/phoenix) или загрузить из репозитория Phoenix.
-
Добавьте загруженный файл в путь сборки (build path) приложения Java. При работе в среде Eclipse скопируйте его в каталог /lib в вашем рабочем пространстве, а затем используйте пункт контекстного меню Build Path → Add to Build Path.
Добавление JAR-файла в путь сборкиДобавление JAR-файла в путь сборки -
Запустите ваш класс на исполнение как приложение Java. Пример вывода на экран:
log4j:WARN No appenders could be found for logger (org.apache.phoenix.shaded.org.apache.calcite.avatica.remote.AvaticaCommonsHttpClientImpl). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Thick Thin
ВНИМАНИЕЕсли ваш кластер ADH не использует аутентификацию Kerberos, соединение JDBC будет производиться по умолчанию под пользователем по имени
phoenix
. Этот пользователь должен иметь необходимые права в HBase. Например, если необходимо только создавать таблицы и записывать данные в них, расширьте полномочия этого пользователя с помощью следующей команды в среде HBase shell:grant 'phoenix', 'WC'
Если этого не сделать, то при попытке создать таблицу возникнет ошибка со следующим сообщением:
Insufficient permissions (user=phoenix, scope=default, params=[namespace=default,table=default:TEST_JDBC,family=0],action=CREATE) Insufficient permissions (user=phoenix, scope=default:SYSTEM.CATALOG, family=0:USE_STATS_FOR_PARALLELIZATION, params=[table=default:SYSTEM.CATALOG,family=0:USE_STATS_FOR_PARALLELIZATION],action=WRITE)
Более подробная информация о примененной команде приведена в описании grant.
-
Проверьте наличие таблицы
TEST_JDBC
в Phoenix:!tables
Вывод на экран:
+------------+--------------+--------------+---------------+----------+--------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | TYPE_N | +------------+--------------+--------------+---------------+----------+--------+ | | SYSTEM | CATALOG | SYSTEM TABLE | | | | | SYSTEM | FUNCTION | SYSTEM TABLE | | | | | SYSTEM | LOG | SYSTEM TABLE | | | | | SYSTEM | SEQUENCE | SYSTEM TABLE | | | | | SYSTEM | STATS | SYSTEM TABLE | | | | | | BEST_BOOKS | TABLE | | | | | | TEST_JDBC | TABLE | | | | | | employee | TABLE | | | | | | people_ages | TABLE | | | +------------+--------------+--------------+---------------+----------+--------+ 0: jdbc:phoenix:> select * from TEST_JDBC; +-----+--------+ | PK | NAME | +-----+--------+ | 1 | Thick | | 2 | Thin | +-----+--------+ 2 rows selected (0.058 seconds)
Графический интерфейс
Используя драйверы JDBC, можно также подключиться к Phoenix через инструменты с графическим интерфейсом. Рассмотрим пример применения Phoenix Thin Driver в DBeaver.
ПРИМЕЧАНИЕ
Данная секция служит только в качестве примера. Если необходимо использовать графический интерфейс, мы настоятельно рекомендуем обратить внимание на Zeppelin, поставляемый с пакетом ADH и специально разработанный для аналитиков больших данных. Информация о подключении Zeppelin к Phoenix приведена в разделе Добавление интерпретатора в группу. |
Шаг 1. Добавление драйвера
-
Установите DBeaver на вашем локальном компьютере.
-
Определите необходимый вам JAR-файл, название которого содержит версии HBase и Phoenix и имеет вид phoenix-<phoenix_version>-HBase-<hbase_version>-thin-client.jar. Например, для версий HBase 2.0 и Phoenix 5.0.0 следует использовать phoenix-5.0.0-HBase-2.0-thin-client.jar. Его можно скопировать из узла кластера HBase (из каталога /usr/lib/phoenix) или загрузить из репозитория Phoenix.
-
Поместите загруженный файл в папку plugins внутри рабочего каталога DBeaver. Например, полный путь в Windows — C:/Program Files/DBeaver/plugins/.
-
В главном меню DBeaver выберите Database → Driver Manager
-
В открывшейся форме кликните New.
Добавление драйвераДобавление драйвера -
В открывшемся окне введите информацию о новом драйвере:
-
Во вкладке Settings введите название драйвера —
phoenix-thin
.Добавление названия драйвераДобавление названия драйвера -
Во вкладке Libraries кликните Add file .
Переключение на выбор файлаПереключение на выбор файла -
В открывшемся диалоговом окне выберите предварительно загруженный JAR-файл и кликните Open.
Выбор JAR-файла из папкиВыбор JAR-файла из папки -
Кликните Find Class.
Переключение на поиск классаПереключение на поиск класса -
После выбора требуемого класса выберите класс
org.apache.phoenix.queryserver.client.Driver
из выпадающего меню.Выбор классаВыбор класса -
Вернитесь к вкладке Settings, проверьте наличие класса в поле Class Name и кликните OK. Закройте следующее окно.
Завершение создания драйвераЗавершение создания драйвераДрайвер добавлен в общий списокДрайвер добавлен в общий список
-
Новый драйвер готов к применению.
Шаг 2. Добавление соединения
-
Откройте пункт меню File → New. В открывшемся окне выберите пункт в выпадающем меню DBeaver → Database Connection и кликните Next.
Переключение на добавление нового соединения в главном менюПереключение на добавление нового соединения в главном менюВы можете добиться того же, кликнув на соответствующую иконку в главном окне.
Использование иконки для переключения на добавление соединенияИспользование иконки для переключения на добавление соединения -
Выберите созданный ранее драйвер
phoenix-thin
и кликните Next.Выбор драйвераВыбор драйвера -
В поле JDBC URL введите адрес соединения. Используйте следующий синтаксис:
jdbc:phoenix:thin:url=http://<IP>:8765;serialization=PROTOBUF
, где<IP>
означает IP-адрес вашего сервера запросов (Phoenix Query Server).Заполнение JDBC URLЗаполнение JDBC URL -
Кликните Test Connection… для проверки установки соединения.
Проверка соединенияПроверка соединенияПример вывода результата на экран:
Вывод на экранВывод на экран -
Кликните Finish. Соединение добавлено.
Завершение добавления соединенияЗавершение добавления соединения
Шаг 3. Работа с таблицами Phoenix
После установки соединения соответствующая ему строка покажется в списке соединений слева от главного окна. Развернув пункт Tables, вы увидите все таблицы Phoenix.


Если таблицы не показываются и при этом отсутствуют ошибки, попробуйте настроить собственный способ представления путем выбора в контекстном меню пункта Connection View → Custom… и настройки флагов.


ВНИМАНИЕ
Если в вашем кластере ADH отсутствует аутентификация Kerberos, соединение JDBC будет использовать по умолчанию имя пользователя
Если этого не сделать, то возникнет ошибка при попытке DBeaver прочитать таблицу с выводом следующего сообщения: Insufficient permissions for user 'phoenix' (table=SYSTEM.CATALOG, action=READ). Более подробная информация об использованной выше команде приведена в описании grant. |
Для получения содержимого таблицы выберите пункт View Data в контекстном меню.




Вы также можете выполнить другие запросы SQL-query, используя пункт меню SQL Editor → New SQL script.



