Подключение к 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.