Notas de estudio de Big Data (4)

Uno, colmena

1.1 Almacén de datos

1.1.1 Base de datos y almacén de datos

1) La base de datos está orientada a las transacciones y el almacén de datos está orientado al tema;
2) La base de datos generalmente almacena datos comerciales y el almacén de datos generalmente almacena datos históricos;
3) El diseño de la base de datos debe evitar la redundancia tanto como sea posible, generalmente para Diseño de una determinada aplicación comercial; el almacén de datos introduce deliberadamente redundancia al diseñar y diseñar de acuerdo con los requisitos de análisis, las dimensiones del análisis y los indicadores de análisis;
4) La base de datos está diseñada para capturar datos y el almacén de datos está diseñado para analizar datos;

El almacén de datos se genera para extraer más recursos de datos para que los usuarios de datos tomen decisiones cuando ya hay una gran cantidad de bases de datos.

1.1.2 La arquitectura en capas del almacén de datos

Inserte la descripción de la imagen aquí
Se puede ver en el diagrama de arquitectura que la capa inferior es la fuente de datos. Los datos en el almacén de datos generalmente provienen de diferentes fuentes de datos. Puede ser un archivo de documento o una base de datos. La capa intermedia es nuestro almacén de datos y la capa superior es la capa de aplicación de datos. Se puede ver que después de que los datos fluyen hacia el almacén de datos de abajo hacia arriba, proporciona soporte de datos para aplicaciones de nivel superior. Se puede entender que el almacén de datos es solo una plataforma intermedia de gestión de datos integrada.

El almacén de datos obtiene datos de varias fuentes de datos, así como la conversión de datos y el flujo en el almacén de datos puede considerarse como el proceso de ETL (Extraer extra, convertir transferencia, cargar carga). ETL es la tubería del almacén de datos y también se puede considerar como la sangre del almacén de datos. Mantiene el metabolismo de los datos en el almacén de datos y la mayor parte de la energía en la gestión y el mantenimiento diarios del almacén de datos. es mantener el ETL normal y estable.

1.1.3 Gestión de metadatos del almacén de datos

Los metadatos registran principalmente la definición del modelo en el almacén de datos, la relación de mapeo entre varios niveles, el estado de los datos del almacén de datos de monitoreo y el estado de ejecución de la tarea de ETL. Generalmente, se almacenará y administrará de manera uniforme a través de una base de datos de metadatos.

Los metadatos son una parte importante del sistema de gestión del almacén de datos. La gestión de metadatos recorre todo el proceso de construcción del almacén de datos y afecta directamente la construcción, el uso y el mantenimiento del almacén de datos.

Su función principal:

  • Define el mapeo del sistema de datos de origen al almacén de datos, las reglas de conversión de datos, la estructura lógica del almacén de datos, las reglas de actualización de datos, el historial de importación de datos y el ciclo de carga y otro contenido relacionado;
  • Al utilizar el almacén de datos, los usuarios acceden a los datos a través de metadatos, aclaran el significado de los elementos de datos y personalizan los informes;
  • La escala y la complejidad del almacén de datos son inseparables de la gestión correcta de metadatos, incluida la adición o eliminación de fuentes de datos externas, el cambio de métodos de limpieza de datos, el control de consultas de errores y la organización de copias de seguridad; los
    Inserte la descripción de la imagen aquí
    metadatos se pueden dividir en metadatos técnicos y metadatos comerciales. Los metadatos técnicos son utilizados por el personal de TI que desarrolla y administra los almacenes de datos. Describe los datos relacionados con el desarrollo, la administración y el mantenimiento del almacén de datos, incluida la información de la fuente de datos, la descripción de conversión de datos, el modelo del almacén de datos, las reglas de limpieza y actualización de datos y el mapeo de datos. derechos de acceso, etc. Los metadatos comerciales sirven a los analistas comerciales y de administración. Describen los datos desde una perspectiva comercial, incluidos los términos comerciales, qué datos hay en el almacén de datos, la ubicación de los datos y la disponibilidad de los datos, etc., lo que ayuda a los usuarios de datos a comprender mejor qué está en el almacén de datos Los datos están disponibles y cómo utilizarlos.

Puede verse que los metadatos no solo definen el modo, la fuente, las reglas de extracción y conversión de los datos en el almacén de datos, sino que también son la base para el funcionamiento de todo el sistema de almacenamiento de datos. Los metadatos conectan los componentes sueltos en el almacén de datos sistema para formar un todo orgánico.

1.2 Introducción a Hive

1.2.1 Conceptos básicos de Hive

Hive es una herramienta de almacenamiento de datos basada en Hadoop, que se utiliza principalmente para la extracción, conversión y carga de datos. Hive puede mapear archivos de datos estructurados en una tabla de datos y proporcionar funciones de consulta SQL. Puede convertir declaraciones SQL en tareas de MapReduce para cálculos. La capa subyacente es HDFS para proporcionar almacenamiento de datos.

1.2.2 Arquitectura básica de Hive

Inserte la descripción de la imagen aquí

  • Interfaz de usuario : incluye CLI, JDBC / ODBC, WebGUI. Entre ellos, CLI es una línea de comandos de shell, JDBC / ODBC es la implementación JAVA de Hive y WebGUI es acceder a Hive a través de un navegador.
  • Almacenamiento de metadatos : generalmente se almacenan en bases de datos relacionales como mysql / derby. Hive almacena metadatos en la base de datos. Los metadatos en Hive incluyen información de la tabla, información de la columna, información de la partición y el directorio donde se encuentran los datos de la tabla.
  • Intérprete, compilador, optimizador, ejecutor : declaración de consulta HQL completa a partir del análisis léxico, análisis de sintaxis, compilación, optimización y generación de planes de consulta. El plan de consulta generado se almacena en HDFS y MapReduce lo invoca y ejecuta.

1.2.3 La relación entre Hive y las bases de datos tradicionales

Colmena RDBMS
Lenguaje de consulta HQL SQL
almacenamiento de datos HDFS Dispositivo sin procesar o FS local
llevado a cabo Mapa reducido Ejecutor
Retraso de datos elevado bajo
Tamaño de datos Grande pequeño
Escenarios de aplicación Análisis estadístico de datos Almacenamiento persistente de datos

1.3 Instalación de Hive

  • Paso 1: descargue el paquete comprimido y descomprímalo;
cd /export/softwares/
tar -zxvf apache-hive-3.1.0-bin.tar.gz -C ../servers/
  • Paso 2: modificar el archivo de configuración de la colmena;
cd /export/servers/apache-hive-3.1.0-bin/conf
cp hive-env.sh.template hive-env.sh

# 配置HADOOP_HOME
HADOOP_HOME=/export/servers/hadoop-3.1.1
# Hive配置文件路径
export HIVE_CONF_DIR=/export/servers/apache-hive-3.1.0-bin/conf

hive-site.xml:

cd /export/servers/apache-hive-3.1.0-bin/conf
vim hive-site.xml

Contenido del archivo de configuración:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>123456</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://node03:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
	</property>
	<property>
		<name>hive.metastore.schema.verification</name>
		<value>false</value>
	</property>
	<property>
		<name>datanucleus.schema.autoCreateAll</name>
		<value>true</value>
	</property>
	<property>
		<name>hive.server2.thrift.bind.host</name>
		<value>node03.hadoop.com</value>
	</property>
</configuration>
  • Paso 3: configurar las variables de entorno de la colmena;
# 修改配置文件
sudo vim /etc/profile

export HIVE_HOME=/export/servers/apache-hive-3.1.0-bin
export PATH=:$HIVE_HOME/bin:$PATH
  • Paso 4: Instale mysql en node03 e inicie el servicio mysql;
# 安装mysql相关包
 yum install mariadb mariadb-server
 
# 启动mysql服务
systemctl start mariadb

# 设置用户名和密码
mysql_secure_installation

# 给用户授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
  • Paso 5: agregue el paquete del controlador mysql al directorio lib de hive;

  • Paso 6: Inicie el servicio hadoop y luego ejecute el hivecomando. Si aparece un hive>mensaje, significa que la instalación se realizó correctamente (como se muestra a continuación);
    Inserte la descripción de la imagen aquí

1.4 Funcionamiento básico de Hive

1.4.1 Operaciones de la base de datos

  • Crear base de datos
create database [if not exists] 数据库名;
  • Cree una base de datos y especifique la ubicación de almacenamiento
create database 数据库名 location 存储路径;

例如:
create database myhive location '/myhive';

La ubicación de almacenamiento predeterminada de hive hive.metastore.warehouse.dirse especifica mediante los parámetros del archivo de configuración hive-site.xmlp .
Inserte la descripción de la imagen aquí

  • Modificar la base de datos

Hive solo puede modificar algunas propiedades básicas de la base de datos, pero no puede modificar la información de metadatos (como el nombre de la base de datos, la ubicación de la base de datos, etc.).

alter database 数据库名 set dbproperties('参数名'='属性值');
  • Ver los detalles de la base de datos
desc database [extended] 数据库名;

Si se especifica el parámetro extendido, se mostrará la información detallada de la base de datos.

  • Eliminar base de datos
drop database 数据库名 [cascade];

Si la base de datos no está vacía, debe especificar el parámetro de cascada.

1.4.2 Operaciones de tabla

1.4.2.1 La sintaxis básica de la creación de una tabla

La sintaxis básica para crear una tabla:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
  • EXTERNO: Representa la creación de una tabla externa. Al crear una tabla externa, debe especificar la ruta de almacenamiento real de los datos a través de UBICACIÓN. Por lo tanto, al eliminar una tabla externa, solo se eliminan los metadatos de la tabla, no los datos. Si no se especifica EXTERNAL, el valor predeterminado es la tabla interna. Cuando se elimina una tabla interna, los metadatos y los datos de la tabla interna se eliminarán juntos.
  • FORMATO FILA: establece el formato de datos. El usuario puede personalizar el SerDe o utilizar el SerDe incorporado al construir la mesa. Si no se especifica ROW FORMAT o ROW FORMAT DELIMITED, se utilizará el SerDe incorporado. Al crear la tabla, el usuario también necesita especificar la columna para la tabla. Al especificar la columna, el usuario también puede personalizar la SerDe. Hive determina los datos de la columna a través de la SerDe;

SerDe es la abreviatura en inglés de Serialize y Deserilize. Hive completa las operaciones de lectura y escritura de tablas mediante la serialización y deserialización. La operación de serialización consiste en convertir el objeto java utilizado por hive en una secuencia de bytes que se puede escribir en hdfs o en un archivo continuo que otros sistemas pueden reconocer. La operación de deserialización consiste en convertir una cadena o secuencia binaria en un objeto java que Hive pueda reconocer. Por ejemplo: la instrucción select usará el objeto Serialize para analizar los datos hdfs; la instrucción insert usará Deserilize, los datos se escriben en el sistema hdfs y los datos deben serializarse.

  • ALMACENADO COMO: El formato de almacenamiento del archivo. Si es texto sin formato, puede utilizarlo STORED AS TEXTFILE; si es necesario comprimir los datos, úselo STORED AS SEQUENCEFILE. formato de almacenamiento de archivos de colmena por defecto TEXTFILE, la configuración se hive.default.fileformatpuede modificar;
  • AGRUPADO POR: Organización de depósitos para una determinada columna. Los depósitos son una división de rango de datos más detallada. Hive usa el hash del valor de la columna, luego divide por el número de depósitos y luego calcula el resto para determinar en qué depósito se almacena el registro;
  • PARTICIONADO POR: Crea una tabla particionada. El nombre del campo de partición especificado no puede ser el mismo que el nombre del campo de la tabla; de lo contrario, se informará un error;

1.4.2.2 Tipo de campo

Tipos de descripción Ejemplo Restricciones de versión
Booleano verdadero Falso 1 año
TINYINT Entero de 1 byte con signo, -128 ~ 127 1S
PEQUEÑO Entero de 2 bytes con signo, -32768 ~ 32767 1S
EN T Entero de 4 bytes con signo 1
EMPEZANDO Entero de 8 bytes con signo 1 litro
FLOTADOR Número de coma flotante de precisión simple de 4 bytes 1.0
DOBLE Número de coma flotante de precisión doble de 8 bytes 1.0 Hive 2.2.0+
DECIMAL Decimal con signo de precisión arbitraria 1.0 Hive 0.11.0+ comienza a introducir 38 lugares decimales, y Hive 0.13.0+ comienza a personalizar lugares decimales
Numérico Decimal con signo de precisión arbitraria 1.0 Hive 3.0.0+
CUERDA Cadena de longitud variable "a" 或 'a'
VARCHAR Cadena de longitud variable "a" 或 'a' Colmena 0.12.0+
CARBONIZARSE Cuerda de longitud fija "a" 或 'a' Colmena 0.13.0+
BINARIO Matriz de bytes Colmena 0.8.0+
TIMESTAMP Marca de tiempo, en milisegundos 1287897987312 Colmena 0.8.0+
FECHA fecha '2020-06-06' Colmena 0.12.0+
INTERVALO Intervalo de frecuencia de tiempo Hive 1.2.0+
FORMACIÓN Matriz, solo puede almacenar el mismo tipo de datos matriz (1,2,3,4,5) Colmena 0.14+
MAPA Almacene una colección de pares clave-valor mapa ('a', 1, 'b', 2) Colmena 0.14+
ESTRUCTURA Estructura, puede almacenar diferentes tipos de datos. person_struct (1, 'Xiaobai', 18)
UNIÓN Un valor en un rango limitado colmena 0.7.0+

Para tipos específicos, consulte: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

1.4.2.3 Operación de creación de tabla

use myhive;

# 创建简单表
create table company(id int, name string);

# 创建表并指定分隔符
create table if not exists company (id, name) 
row format delimited fields terminated by '\t';

# 根据查询结果创建表
create table t2 as select * from t1; # 复制表结构和数据
create table t2 like t1; # 复制表结构

1.4.4.4 Tabla de particiones

Cuando la cantidad de datos en la tabla es muy grande, podemos particionar los datos de una tabla, por ejemplo: fecha. Esto puede mejorar la eficiencia de la consulta de datos.

  • Crea una tabla de particiones:
# 创建分区表
create table score(s_id string,c_id string, s_score int) partitioned by (year string, month string) row format delimited fields terminated by '\t' location '/score';

Arriba creamos una puntuación de tabla de particiones, que se particiona de acuerdo con los campos año y mes. Los datos con el mismo valor de mes se almacenarán en la misma partición.

Lo que debe enfatizarse aquí es que las columnas de partición año y mes no existen realmente en la tabla de la base de datos, son solo nuestras provisiones artificiales. Hive no admite determinadas columnas de la tabla como columnas de partición.

  • Ver el directorio de la tabla de particiones:
hdfs dfs -ls /score/year=2020&month=6/
  • Ver partición:
show partitions score;
  • Cargue datos en la tabla de particiones:
load data local inpath '/export/data/score.csv' into table score partition (year='2020',month='6');
    • Ver datos de la partición:
select * from score where year = '2020' and month = '6';

El método de consulta de datos de partición especifica el campo de partición como condición de consulta. Una vez que se especifica el nombre de la partición, ya no se realiza el escaneo completo de la tabla y la consulta se realiza directamente desde la partición especificada, lo que mejora la eficiencia de la consulta de datos.

  • Añadir partición:
alter table score add partition(year='2020', month='5');
  • Eliminar partición:
alter table score drop partition(year='2020', month='5');

1.4.4.5 Mesa de cangilones

La diferencia con el particionamiento es que el particionamiento no se basa en las columnas reales de la tabla, sino que el agrupamiento se basa en las columnas reales de la tabla y los datos se dividen en diferentes grupos de acuerdo con los campos especificados.

  • ¿Cómo determina Hive a qué depósito se asignan los datos?

Hive determina en qué depósito se almacenan los datos mediante el módulo del número de depósitos del hash de un determinado valor de columna. Por ejemplo, si el atributo de nombre se divide en 3 depósitos, entonces el hash del valor del atributo de nombre es módulo 3 y, a continuación, los datos se dividen en depósitos de acuerdo con el resultado del módulo. Si el resultado es 0, se registra en el primer archivo, el resultado es 1 se registra en el segundo archivo, el resultado es 2 se registra en el tercer archivo, y así sucesivamente.

Si desea utilizar la función de agrupamiento, primero debe habilitar el agrupamiento:

set hive.enforce.bucketing=true;

Luego, establezca el número de Reducir:

set mapreduce.job.reduces = 3;

Al crear una tabla, especifique la cantidad de depósitos:

# 创建表时指定按照c_id列进行分桶,并且将数据放入到3个分桶中
create table ... clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';

Inserte datos en la tabla de cubos:

insert overwrite table course select * from course_two cluster by (c_id);

Ver datos del depósito:

# 查看第一个分桶的数据
select * from course tablesample(bucket 1 out of 3 on c_id);

1.4.4.5 Otras operaciones modificadas

  • Modificar la tabla:
# 重命名
alter table old_table_name rename to new_table_name;

# 查询表结构
desc tablename;

# 添加列
alter table tablename add columns (column_name column_type, ...);

# 删除表
drop table tablename;

Supongo que te gusta

Origin blog.csdn.net/zhongliwen1981/article/details/106515900
Recomendado
Clasificación