Подключение к Phoenix

Существует несколько способов соединения с Phoenix, некоторые из которых приведены в следующих секциях.

SQLLine

SQLLine предоставляет простейший способ для начала работы с Phoenix. Это Java-консоль, доступная на каждом узле кластера HBase сразу после его установки. Начните работу с SQLLine, выполнив следующую команду:

$ cd /usr/lib/phoenix/bin
$ ./sqlline.py

Консоль SQLLine выводит строку приглашения, заканчивающуюся символом >, после которого следует вводить команду Phoenix.

Приглашение к вводу команды в консоли SQLLine
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:

  1. Создайте класс, используя приведенный ниже код (например в среде разработки 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();
    	}
    }
  2. Определите необходимый вам 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.

  3. Добавьте загруженный файл в путь сборки (build path) приложения Java. При работе в среде Eclipse скопируйте его в каталог /lib в вашем рабочем пространстве, а затем используйте пункт контекстного меню Build PathAdd to Build Path.

    phoenix jdbc 01 dark
    Добавление JAR-файла в путь сборки
    phoenix jdbc 01 light
    Добавление JAR-файла в путь сборки
  4. Запустите ваш класс на исполнение как приложение 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.

  5. Проверьте наличие таблицы 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. Добавление драйвера

  1. Установите DBeaver на вашем локальном компьютере.

  2. Определите необходимый вам 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.

  3. Поместите загруженный файл в папку plugins внутри рабочего каталога DBeaver. Например, полный путь в Windows — C:/Program Files/DBeaver/plugins/.

  4. В главном меню DBeaver выберите DatabaseDriver Manager

  5. В открывшейся форме кликните New.

    phoenix gui 01 dark
    Добавление драйвера
    phoenix gui 01 light
    Добавление драйвера
  6. В открывшемся окне введите информацию о новом драйвере:

    • Во вкладке Settings введите название драйвера — phoenix-thin.

      phoenix gui 02 dark
      Добавление названия драйвера
      phoenix gui 02 light
      Добавление названия драйвера
    • Во вкладке Libraries кликните Add file .

      phoenix gui 03 dark
      Переключение на выбор файла
      phoenix gui 03 light
      Переключение на выбор файла
    • В открывшемся диалоговом окне выберите предварительно загруженный JAR-файл и кликните Open.

      phoenix gui 04 dark
      Выбор JAR-файла из папки
      phoenix gui 04 light
      Выбор JAR-файла из папки
    • Кликните Find Class.

      phoenix gui 05 dark
      Переключение на поиск класса
      phoenix gui 05 light
      Переключение на поиск класса
    • После выбора требуемого класса выберите класс org.apache.phoenix.queryserver.client.Driver из выпадающего меню.

      phoenix gui 06 dark
      Выбор класса
      phoenix gui 06 light
      Выбор класса
    • Вернитесь к вкладке Settings, проверьте наличие класса в поле Class Name и кликните OK. Закройте следующее окно.

      phoenix gui 07 dark
      Завершение создания драйвера
      phoenix gui 07 light
      Завершение создания драйвера
      phoenix gui 08 dark
      Драйвер добавлен в общий список
      phoenix gui 08 light
      Драйвер добавлен в общий список

Новый драйвер готов к применению.

Шаг 2. Добавление соединения

  1. Откройте пункт меню FileNew. В открывшемся окне выберите пункт в выпадающем меню DBeaverDatabase Connection и кликните Next.

    phoenix gui 09 dark
    Переключение на добавление нового соединения в главном меню
    phoenix gui 09 light
    Переключение на добавление нового соединения в главном меню

    Вы можете добиться того же, кликнув на соответствующую иконку в главном окне.

    phoenix gui 10 dark
    Использование иконки для переключения на добавление соединения
    phoenix gui 10 light
    Использование иконки для переключения на добавление соединения
  2. Выберите созданный ранее драйвер phoenix-thin и кликните Next.

    phoenix gui 11 dark
    Выбор драйвера
    phoenix gui 11 light
    Выбор драйвера
  3. В поле JDBC URL введите адрес соединения. Используйте следующий синтаксис: jdbc:phoenix:thin:url=http://<IP>:8765;serialization=PROTOBUF, где <IP> означает IP-адрес вашего сервера запросов (Phoenix Query Server).

    phoenix gui 12 dark
    Заполнение JDBC URL
    phoenix gui 12 light
    Заполнение JDBC URL
  4. Кликните Test Connection…​ для проверки установки соединения.

    phoenix gui 13 dark
    Проверка соединения
    phoenix gui 13 light
    Проверка соединения

    Пример вывода результата на экран:

    phoenix gui 14 dark
    Вывод на экран
    phoenix gui 14 light
    Вывод на экран
  5. Кликните Finish. Соединение добавлено.

    phoenix gui 15 dark
    Завершение добавления соединения
    phoenix gui 15 light
    Завершение добавления соединения

Шаг 3. Работа с таблицами Phoenix

После установки соединения соответствующая ему строка покажется в списке соединений слева от главного окна. Развернув пункт Tables, вы увидите все таблицы Phoenix.

phoenix gui 16 dark
Получение списка таблиц Phoenix
phoenix gui 16 light
Получение списка таблиц Phoenix

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

phoenix gui 18 dark
Изменение способа представления соединения
phoenix gui 18 light
Изменение способа представления соединения
ВНИМАНИЕ

Если в вашем кластере ADH отсутствует аутентификация Kerberos, соединение JDBC будет использовать по умолчанию имя пользователя phoenix. Этот пользователь должен обладать необходимыми правами в HBase. Например, если вам необходимо только читать данные с помощью DBeaver, обеспечьте право на чтение с помощью следующей команды в HBase shell:

grant 'phoenix', 'R'

Если этого не сделать, то возникнет ошибка при попытке DBeaver прочитать таблицу с выводом следующего сообщения:

Insufficient permissions for user 'phoenix' (table=SYSTEM.CATALOG, action=READ).

Более подробная информация об использованной выше команде приведена в описании grant.

Для получения содержимого таблицы выберите пункт View Data в контекстном меню.

phoenix gui 20 dark
Переключение на чтение данных из таблицы
phoenix gui 20 light
Переключение на чтение данных из таблицы
phoenix gui 17 dark
Чтение данных из таблицы
phoenix gui 17 light
Чтение данных из таблицы

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

phoenix gui 21 dark
Переключение на запуск запроса
phoenix gui 21 light
Переключение на запуск запроса
phoenix gui 19 dark
Запуск запроса
phoenix gui 19 light
Запуск запроса
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней