Статьи серии Data Warehouse
- История развития архитектуры хранилища данных
- Методология моделирования хранилища данных
- Иерархическая теория моделирования хранилища данных
- Моделирование хранилища данных - дизайн широкой таблицы
- Моделирование хранилища данных - система индикаторов
- Разберитесь в разнице между ETL и ELT в одной статье
- Очки знаний по озеру данных
- Выбор технологии | Какая технология больших данных OLAP сильнее?
- Вопросы интервью, связанные с хранилищем данных
- Изучите Presto от 0 до 1, этого достаточно!
- Практическое применение управления метаданными в хранилище данных
- Проработав в Zhongtai более 2 лет, что такое Zhongtai? Давайте поговорим о Чжунтае в длинном тексте из 40 символов.
- Застежка-молния таблицы хранилища данных
- Импорт и экспорт данных MySQL и Hive об использовании sqoop
Позвольте мне сначала объяснить несколько терминов:
- metadata : метаданные куста, то есть имя таблицы, имя поля, тип, раздел и пользовательские данные, определенные кустом. В реляционной библиотеке общего хранилища mysql вы также можете использовать встроенную базу данных Derby в кусте на этапе тестирования.
- хранилище метаданных: сервер хранилища кустов. В основном он обеспечивает преобразование DDL, DML и других операторов в MapReduce и отправку их в hdfs.
- hiveserver2: сервер куста. Обеспечьте обслуживание улья. Клиент может линковаться на hive через билайн, jdbc (то есть линк с java-кодом) и многими другими способами.
- beeline: инструмент для подключения клиента hive к hive. Его можно понимать как клиент mysql. Такие как: навите кот и так далее.
Доступ на других языкахhive
В основном через службу hiveserver2, HiveServer2 (HS2) — это служба, которая позволяет клиентам выполнять запросы Hive. HiveServer2 может поддерживать встроенный и удаленный доступ к HiveServer2, многоклиентский параллелизм и аутентификацию. Разработан для обеспечения лучшей поддержки клиентов с открытым API, таких как JDBC и ODBC.
Будет запущен сервер улья Порт по умолчанию: 10000, который можно подключить к улью через beeline, jdbc и odbc. При запуске hiveserver2 сначала проверяет, настроен ли hive.metastore.uris, если нет, то сначала запускается служба хранилища метаданных, а затем hiveserver2. Если настроен hive.metastore.uris. Будет подключаться к удаленной службе хранилища метаданных. Этот метод является наиболее часто используемым. Развертывание выглядит следующим образом:
Python подключается к Hive
Python3
Зависимости, которые необходимо установить для доступа к кусту:
- pip3 install thrift
- pip3 install PyHive
- pip3 install sasl
- pip3 install thrift_sasl
вот одинPython
доступHive
Класс инструмента:
# -*- coding:utf-8 -*-
from pyhive import hive
class HiveClient(object):
"""docstring for HiveClient"""
def __init__(self, host='hadoop-master',port=10000,username='hadoop',password='hadoop',database='hadoop',auth='LDAP'):
"""
create connection to hive server2
"""
self.conn = hive.Connection(host=host,
port=port,
username=username,
password=password,
database=database,
auth=auth)
def query(self, sql):
"""
query
"""
with self.conn.cursor() as cursor:
cursor.execute(sql)
return cursor.fetchall()
def insert(self, sql):
"""
insert action
"""
with self.conn.cursor() as cursor:
cursor.execute(sql)
# self.conn.commit()
# self.conn.rollback()
def close(self):
"""
close connection
"""
self.conn.close()
При использовании просто импортируйте, а затем создайте экземпляр объекта, передайтеsql
перечислитьquery
способ завершения запроса.
# 拿一个连接
hclient = hive.HiveClient()
# 执行查询操作
...
# 关闭连接
hclient.close()
Уведомление:существуетinsert
в методе вставки я будуself.conn.commit()
иself.conn.rollback()
То есть комментарий откатывается, что является операцией транзакции, доступной только в традиционных реляционных базах данных.Hive
не поддерживается.
Java подключается к Hive
Java
Как основной язык больших данных, подключение hive, естественно, очень хорошо поддерживается.Вот два метода подключения hive через jdbc и mybatis.
1. JDBC-соединение
Java подключается к hiveserver через jdbc, что аналогично традиционному подключению jdbc к mysql.
Требуются зависимости hive-jdbc:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
код и ссылкаmysql
Используется та же процедураDriverManager.getConnection(url, username, password)
:
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString
public class HiveConfigModel {
private String url = "jdbc:hive2://localhost:10000";
private String username = "hadoop";
private String password = "hadoop";
}
@Test
public void test(){
// 初始化配置
HiveConfigModel hiveConfigModel = ConfigureContext.getInstance("hive-config.properties")
.addClass(HiveConfigModel.class)
.getModelProperties(HiveConfigModel.class);
try {
Connection conn = DriverManager.getConnection(hiveConfigModel.getUrl(),
hiveConfigModel.getUsername(), hiveConfigModel.getPassword());
String sql = "show tables";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
ResultSet rs = preparedStatement.executeQuery();
List<String> tables = new ArrayList<>();
while (rs.next()){
tables.add(rs.getString(1));
}
System.out.println(tables);
} catch (SQLException e) {
e.printStackTrace();
}
}
существуетhive-jdbc-1.2.1.jar
изMETA-INF
следующийservices
каталог, естьjava.sql.Driver
файл, содержание:
org.apache.hive.jdbc.HiveDriver
java.sql.DriverManager
Использование spi для разделения интерфейса службы и реализации службы для достижения разделения, здесьjdbc
реализацияorg.apache.hive.jdbc.HiveDriver
в соответствии сjava.sql.Driver
Обеспечивает унифицированную логику реализации спецификации. Клиенту не нужно изменять код при использовании jdbc, и он может напрямую вводить различные службы интерфейса spi.
DriverManager.getConnection(url, username, password)
Таким образом, соединение может быть получено при условии, что конкретная реализация должна следовать соответствующей спецификации spi.
2. Интегрируйте mybatis
обычно используютmybatis
сделатьdao
База данных уровня доступа, доступhive
Тоже похоже.
конфигурационный файлsqlConfig.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="production">
<environment id="production">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.apache.hive.jdbc.HiveDriver"/>
<property name="url" value="jdbc:hive2://master:10000/default"/>
<property name="username" value="hadoop"/>
<property name="password" value="hadoop"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/hive/test/test.xml"/>
</mappers>
</configuration>
Код преобразователя опущен, а код реализации:
public classTestMapperImpl implements TestMapper {
private static SqlSessionFactory sqlSessionFactory = HiveSqlSessionFactory.getInstance().getSqlSessionFactory();
@Override
public int getTestCount(String dateTime) {
SqlSession sqlSession = sqlSessionFactory.openSession();
TestMapper testMapper = sqlSession.getMapper(TestMapper.class);
int count = testMapper.getTestCount(dateTime);
sqlSession.close();
return count;
}
}