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

    Добавление JAR-файла в путь сборки
    Добавление JAR-файла в путь сборки
    Добавление JAR-файла в путь сборки
    Добавление 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.

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

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

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

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

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

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

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

      Завершение создания драйвера
      Завершение создания драйвера
      Завершение создания драйвера
      Завершение создания драйвера
      Драйвер добавлен в общий список
      Драйвер добавлен в общий список
      Драйвер добавлен в общий список
      Драйвер добавлен в общий список

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

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

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

    Переключение на добавление нового соединения в главном меню
    Переключение на добавление нового соединения в главном меню
    Переключение на добавление нового соединения в главном меню
    Переключение на добавление нового соединения в главном меню

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

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

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

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

    Проверка соединения
    Проверка соединения
    Проверка соединения
    Проверка соединения

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

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

    Завершение добавления соединения
    Завершение добавления соединения
    Завершение добавления соединения
    Завершение добавления соединения

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

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

Получение списка таблиц Phoenix
Получение списка таблиц Phoenix
Получение списка таблиц Phoenix
Получение списка таблиц Phoenix

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

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

Если в вашем кластере 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 в контекстном меню.

Переключение на чтение данных из таблицы
Переключение на чтение данных из таблицы
Переключение на чтение данных из таблицы
Переключение на чтение данных из таблицы
Чтение данных из таблицы
Чтение данных из таблицы
Чтение данных из таблицы
Чтение данных из таблицы

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

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