La plataforma de lago de datos de transmisión Apache Paimon (5) integra el motor Spark

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;

Supongo que te gusta

Origin blog.csdn.net/xianyu120/article/details/132130910
Recomendado
Clasificación