В прошлый раз мы говорили про особенности работы с основными join-операциями в Hive. Сегодня поговорим про использование JDBC-драйвера при работе в распределенной Big Data платформе Apache Hive. Читайте далее про особенности использования этого драйвера при работе в распределенной среде Hive.
Использование драйвера JDBC в распределенной СУБД Apache Hive
Драйвер JDBC (Java Data Base Connectivity) — это кроссплатформенный (независящий от платформы) стандарт взаимодействия Java-приложений с различными СУБД (в том числе и реляционными). JDBC-драйвер играет роль моста между СУБД и Java-приложением (в том числе написанным с помощью Java-модулей в различных языках программирования. Например, существует Java-модуль для Python, именуемый Jyton). При работе с базой данных Hive драйвер JDBC используется для соединения с ней и отправления SQL-запросов (диалект HiveQL также учитывается драйвером) из Java-приложения в эту СУБД. Этот драйвер позволяет получать соединение со средой Hive по специальному URL (Uniform Resource Locator). В качестве URL коннектор JDBC принимает адрес сервера и порт (обычно 4 цифры), по которому он принимает все запросы.
Особенности использования драйвера JDBC при работе с Hive: несколько практических примеров
Для того, чтобы начать настройку работы Java-приложения с Apache Hive, необходимо объявить переменную с названием JDBC-драйвера Hive (для разных СУБД JDBC-драйвера отличаются) и зарегистрировать этот драйвер. За регистрацию драйвера в Java-приложении отвечает метод Class.forName()
. Следующий код на языке Java отвечает за регистрацию JDBC-драйвера Hive в Java-приложении [1]:
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { //Регистрация драйвера Class.forName(driverName); }
После регистрации драйвера в Java-приложении необходимо настроить соединение приложения с сервером Hive. Для этого необходимо создать экземпляр класса Connection
и вызвать метод getConnection()
у класса DriverManager
, который в качестве параметра принимает URL-адрес сервера (а также порт, по которому он работает) и базы данных Hive [1]:
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
После установления соединения с Hive приложение может отправлять запросы на Hive-сервер. Для этого необходимо создать экземпляр класса Statement для создания среды отправления SQL-запросов из приложения на сервер, а затем с помощью результирующей коллекции ResultSet
получать данные с помощью метода executeQuery()
, который в качестве параметра принимает необходимый SQL-запрос [1]:
//Создание среды отправления SQL-запросов Statement stmt = con.createStatement(); //Получение коллекции с данными Resultset res = stmt.executeQuery(" SELECT * FROM employee WHERE salary>30000; ");
Для того, чтобы вывести все результаты на экран, используется цикл while
c условием передвижения курсора по результирующей коллекции (за это отвечает метод next()
класса ResultSet
) [1]:
//Передвижение курсора после каждой итерации while (res.next()){ System.out.println(res.getInt(1) + " " + res.getString(2) + " " + res.getDouble(3) + " " + res.getString(4) + " " + res.getString(5)); }
Таким образом, благодаря поддержке механизма JDBC, Hive имеет возможность работы с Java-приложениями в реальном времени, что может существенно упрощать задачу при разработке корпоративных и web-приложений для анализа данных в распределенной среде. Например, в рамках ETL-конвейера Apache NiFi, что мы рассматриваем здесь.
Больше подробностей про применение Apache Hive в проектах анализа больших данных вы узнаете на практических курсах по NoSQL в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
Источники