Directorio de artículos
Capítulo 4 Integración del motor Spark
4.1 Preparación del entorno
Paimon actualmente es compatible con Spark 3.4, 3.3, 3.2 y 3.1. La versión de Spark utilizada en el curso es la 3.3.1.
1) Cargue y descomprima el paquete de instalación de Spark
tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/module/
mv /opt/module/spark-3.3.1-bin-hadoop3 /opt/module/spark-3.3.1
2) Configurar variables de entorno
sudo vim /etc/profile.d/my_env.sh
export SPARK_HOME=/opt/module/spark-3.3.1
export PATH=$PATH:$SPARK_HOME/bin
fuente /etc/profile.d/my_env.sh
3) Copie el paquete jar de paimon en el directorio jars de Spark
Copie el jar en el directorio jars de spark (también puede ejecutar --jars)
Dirección de descarga: https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-3.3/0.5-SNAPSHOT/
cp paimon-spark-3.3-0.5-20230703.002437-65.jar /opt/module/spark/jars
4.2 Catálogo
Al iniciar spark-sql, especifique Catalog. Después de cambiar al catálogo, no se puede acceder directamente a las tablas existentes de Spark, puede usar spark_catalog.databasename .{database_name}.datos _ _ _ _ _nam e . {table_name} para acceder a la tabla de Spark.
El catálogo de registro puede especificarse al inicio o configurarse en spark-defaults.conf
4.2.1 Sistema de archivos
chispa-sql \
–conf spark.sql.catalog.fs=org.apache.paimon.spark.SparkCatalog \
–conf chispa.sql.catalog.fs.warehouse=hdfs://hadoop102:8020/spark/paimon/fs
Entre ellos, el prefijo del parámetro es: spark.sql.catalog.<nombre del catálogo>
UTILIZAR fs.default;
4.2.2 Colmena
1) Inicie el servicio metastore de Hive
colmena nohup --servicio metastore &
2) Registrar catálogo al inicio
spark-sql \
--conf spark.sql.catalog.hive=org.apache.paimon.spark.SparkCatalog \
--conf spark.sql.catalog.hive.warehouse=hdfs://hadoop102:8020/spark/paimon/hive \
--conf spark.sql.catalog.hive.metastore=hive \
--conf spark.sql.catalog.hive.uri=thrift://hadoop102:9083
Cambie a la base de datos predeterminada en el catálogo:
USE hive.default;
3) Desactivar Hive ACID (Hive3)
hive.strict.managed.tables=false
hive.create.as.insert.only=false
metastore.create.as.acid=false
Consulte HIVE-17832 cuando use Hive Catalog para cambiar los tipos de columnas incompatibles mediante la modificación de la tabla. Necesidad de configurar
hive.metastore.disallow.inknown.col.type.changes=false
4.3 DDL
4.3.1 Crear tabla
4.3.1.1 Cuadro de gestión
La tabla creada en Paimon Catalog es la tabla de administración de Paimon, que es administrada por Catalog. Cuando se elimina una tabla del Catálogo, su archivo de tabla también se eliminará, de forma similar a las tablas internas de Hive.
1) crear tabla
CREATE TABLE tests (
user_id BIGINT,
item_id BIGINT,
behavior STRING,
dt STRING,
hh STRING
) TBLPROPERTIES (
'primary-key' = 'dt,hh,user_id'
);
2) Crear una tabla de particiones
CREATE TABLE tests_p (
user_id BIGINT,
item_id BIGINT,
behavior STRING,
dt STRING,
hh STRING
) PARTITIONED BY (dt, hh)
TBLPROPERTIES (
'primary-key' = 'dt,hh,user_id'
);
Al configurar la partición.tiempo de caducidad, las particiones caducadas se pueden eliminar automáticamente.
Si se define una clave principal, el campo de partición debe ser un subconjunto de la clave principal.
Los siguientes tres tipos de campos se pueden definir como campos de partición:
Tiempo de creación (recomendado): el tiempo de creación suele ser inmutable, por lo que puede tratarlo con seguridad como un campo de partición y agregarlo a su clave principal.
Hora del evento: La hora del evento es un campo en la tabla original. Para los datos de CDC, como las tablas sincronizadas desde MySQL CDC o los registros de cambios generados por Paimon, todos son datos de CDC completos, incluidos los registros UPDATE_BEFORE, incluso si declara una clave principal que contiene campos de partición, también puede lograr efectos únicos.
CDC op_ts: no se puede definir como un campo de partición y no se puede conocer la marca de tiempo del registro anterior.
3)Crear tabla como
Las tablas se pueden crear y completar con los resultados de la consulta, por ejemplo, tenemos un sql como este: CREATE TABLE table_b AS SELECT id, name FORM table_a, la tabla generada table_b será equivalente a la siguiente declaración para crear una tabla e insertar datos: CREAR TABLA table_b (id INT, nombre STRING); INSERTAR EN table_b SELECCIONAR id, nombre DE table_a;
Al usar CREATE TABLE AS SELECT, podemos especificar la clave principal o la partición.
CREATE TABLE tests1(
user_id BIGINT,
item_id BIGINT
);
CREATE TABLE tests2 AS SELECT * FROM tests1;
-- 指定分区
CREATE TABLE tests2_p PARTITIONED BY (dt) AS SELECT * FROM tests_p;
-- 指定配置
CREATE TABLE tests3(
user_id BIGINT,
item_id BIGINT
) TBLPROPERTIES ('file.format' = 'orc');
CREATE TABLE tests3_op TBLPROPERTIES ('file.format' = 'parquet') AS SELECT * FROM tests3;
-- 指定主键
CREATE TABLE tests_pk TBLPROPERTIES ('primary-key' = 'dt') AS SELECT * FROM tests;
-- 指定主键和分区
CREATE TABLE tests_all PARTITIONED BY (dt) TBLPROPERTIES ('primary-key' = 'dt,hh') AS SELECT * FROM tests_p;
4) Propiedades de la tabla
Los usuarios pueden especificar las propiedades de la tabla para habilitar la funcionalidad de Paimon o para mejorar el rendimiento de Paimon. Consulte Configuraciones https://paimon.apache.org/docs/master/maintenance/configurations/ para obtener una lista completa de dichas propiedades.
CREATE TABLE tbl(
user_id BIGINT,
item_id BIGINT,
behavior STRING,
dt STRING,
hh STRING
) PARTITIONED BY (dt, hh)
TBLPROPERTIES (
'primary-key' = 'dt,hh,user_id',
'bucket' = '2',
'bucket-key' = 'user_id'
);
4.3.1.2 Mesas Externas
Las tablas externas son registradas pero no administradas por el Catálogo. Si elimina una tabla externa, su archivo de tabla no se eliminará, de forma similar a la tabla externa de Hive.
Las tablas externas de Paimon se pueden utilizar en cualquier catálogo. Si no desea crear un catálogo de Paimon y solo desea leer/escribir tablas, puede considerar las tablas externas.
Spark3 solo admite la creación de tablas externas a través de la API de Scala. El siguiente código de Scala carga una tabla ubicada en hdfs:///path/to/table en un DataSet.
val dataset = chispa.read.format(“paimon”).load(“hdfs:///ruta/a/tabla”)
4.3.2 Modificar tabla
4.3.2.1 Modificar tabla
1) Cambiar/agregar propiedades de la tabla
ALTER TABLE tests SET TBLPROPERTIES (
'write-buffer-size' = '256 MB'
);
2) Cambiar el nombre de la tabla
ALTER TABLE tests1 RENAME TO tests_new;
3) Eliminar el atributo de la tabla
ALTER TABLE tests UNSET TBLPROPERTIES ('write-buffer-size');
4.3.2.2 Modificación de columnas
1) Agregar nueva columna
ALTER TABLE tests ADD COLUMNS (c1 INT, c2 STRING);
2) Cambiar el nombre de las columnas
ALTER TABLE tests RENAME COLUMN c1 TO c0;
3) Eliminar la columna
ALTER TABLE my_table DROP COLUMNS(c0, c2);
4) Cambiar la nulabilidad de la columna
CREATE TABLE tests_null(
id INT,
coupon_info FLOAT NOT NULL
);
-- Spark只支持将not null改为 nullable
ALTER TABLE tests_null ALTER COLUMN coupon_info DROP NOT NULL;
5) Cambiar la anotación de la columna
ALTER TABLE tests ALTER COLUMN user_id COMMENT 'user id'
6) Agregar posición de columna
ALTER TABLE tests ADD COLUMN a INT FIRST;
ALTER TABLE tests ADD COLUMN b INT AFTER a;
Nota: Este tipo de operación no está permitida en Hive. No se puede realizar usando el catálogo de Hive. Debe cerrar el límite de parámetros de Hive:
vim /opt/module/hive/conf/hive-sitio.xml;
<property>
<name>hive.metastore.disallow.incompatible.col.type.changes</name>
<value>false</value>
</property>
Reinicie el servicio de metastore de Hive.
7) Cambiar la posición de la columna
ALTER TABLE tests ALTER COLUMN b FIRST;
ALTER TABLE tests ALTER COLUMN a AFTER user_id;
8) Cambiar el tipo de columna
ALTER TABLE tests ALTER COLUMN a TYPE DOUBLE;