La plateforme de streaming data lake Apache Paimon (5) intègre le moteur Spark

Chapitre 4 Intégration du moteur Spark

4.1 Préparation de l'environnement

Paimon prend actuellement en charge Spark 3.4, 3.3, 3.2 et 3.1. La version de Spark utilisée dans le cours est la 3.3.1.

1) Téléchargez et décompressez le package d'installation 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) Configurer les variables d'environnement

sudo vim /etc/profile.d/my_env.sh

export SPARK_HOME=/opt/module/spark-3.3.1

export PATH=$PATH:$SPARK_HOME/bin

source /etc/profile.d/my_env.sh

3) Copiez le package jar de paimon dans le répertoire jars de Spark

Copiez le jar dans le répertoire jars de spark (vous pouvez également exécuter --jars)

Adresse de téléchargement : 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 Catalogue

Lors du démarrage de spark-sql, spécifiez Catalog. Après être passé au catalogue, les tables existantes de Spark ne sont pas directement accessibles, vous pouvez utiliser spark_catalog. databasename . {database_name}.d a t aba s ensuis . {table_name} pour accéder à la table Spark .

Le catalogue de registre peut être spécifié au démarrage ou configuré dans spark-defaults.conf

4.2.1 Système de fichiers

spark-sql \

–conf spark.sql.catalog.fs=org.apache.paimon.spark.SparkCatalog \

–conf spark.sql.catalog.fs.warehouse=hdfs://hadoop102:8020/spark/paimon/fs

Parmi eux, le préfixe du paramètre est : spark.sql.catalog.<catalog name>

USE fs.default;

4.2.2 Ruche

1) Démarrer le service metastore de hive

nohup ruche --service metastore &

2) Enregistrez le catalogue au démarrage

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

Passez à la base de données par défaut sous le catalogue :

USE hive.default;

3) Désactiver Hive ACID (Hive3)

hive.strict.managed.tables=false

hive.create.as.insert.only=false

metastore.create.as.acid=false

Voir HIVE-17832 lors de l'utilisation du catalogue Hive pour modifier les types de colonnes incompatibles via alter table. Besoin de configurer

hive.metastore.disallow.inknown.col.type.changes=false

4.3 LDD

4.3.1 Créer un tableau

4.3.1.1 Tableau de gestion

La table créée dans Paimon Catalog est la table de gestion de Paimon, qui est gérée par Catalog. Lorsqu'une table est supprimée du catalogue, son fichier de table sera également supprimé, comme les tables internes de Hive.

1) créer un tableau

CREATE TABLE tests (

  user_id BIGINT,

  item_id BIGINT,

  behavior STRING,

  dt STRING,

  hh STRING

) TBLPROPERTIES (

  'primary-key' = 'dt,hh,user_id'

);

2) Créer une table de partition

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'

);

En configurant partition.expiration-time, les partitions expirées peuvent être automatiquement supprimées.

Si une clé primaire est définie, le champ de partition doit être un sous-ensemble de la clé primaire.

Les trois types de champs suivants peuvent être définis comme champs de partition :

Heure de création (recommandé) : l'heure de création est généralement immuable, vous pouvez donc la traiter en toute sécurité comme un champ de partition et l'ajouter à votre clé primaire.

Heure de l'événement : l'heure de l'événement est un champ de la table d'origine. Pour les données CDC, telles que les tables synchronisées à partir de MySQL CDC ou les Changelogs générés par Paimon, ce sont toutes des données CDC complètes, y compris les enregistrements UPDATE_BEFORE, même si vous déclarez une clé primaire qui contient des champs de partition, elle peut également obtenir des effets uniques.

CDC op_ts : ne peut pas être défini comme un champ de partition et l'horodatage de l'enregistrement précédent ne peut pas être connu.

3)Créer un tableau en tant que

Les tables peuvent être créées et remplies par les résultats de la requête, par exemple, nous avons un sql comme celui-ci : CREATE TABLE table_b AS SELECT id, name FORM table_a, la table générée table_b sera équivalente à l'instruction suivante pour créer une table et insérer des données : CREATE TABLE table_b(id INT, nom STRING); INSERT INTO table_b SELECT id, nom FROM table_a;

Lors de l'utilisation de CREATE TABLE AS SELECT, nous pouvons spécifier la clé primaire ou la partition.

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) Attributs du tableau

Les utilisateurs peuvent spécifier des propriétés de table pour activer la fonctionnalité de Paimon ou pour améliorer les performances de Paimon. Voir Configurations https://paimon.apache.org/docs/master/maintenance/configurations/ pour une liste complète de ces propriétés.

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 Tableaux externes

Les tables externes sont enregistrées mais ne sont pas gérées par le Catalogue. Si vous supprimez une table externe, son fichier de table ne sera pas supprimé, comme pour la table externe de Hive.

Les tables externes Paimon peuvent être utilisées dans n'importe quel catalogue. Si vous ne souhaitez pas créer de catalogue Paimon et souhaitez simplement lire/écrire des tables, vous pouvez envisager des tables externes.

Spark3 prend uniquement en charge la création de tables externes via l'API Scala. Le code Scala suivant charge une table située à hdfs:///path/to/table dans un DataSet.

val dataset = spark.read.format("paimon").load("hdfs:///path/to/table")

4.3.2 Modifier le tableau

4.3.2.1 Modifier le tableau

1) Modifier/ajouter des propriétés de table

ALTER TABLE tests SET TBLPROPERTIES (

  'write-buffer-size' = '256 MB'

);

2) Renommez le nom de la table

ALTER TABLE tests1 RENAME TO tests_new;

3) Supprimer l'attribut table

ALTER TABLE tests UNSET TBLPROPERTIES ('write-buffer-size');

4.3.2.2 Modification des colonnes

1) Ajouter une nouvelle colonne

ALTER TABLE tests ADD COLUMNS (c1 INT, c2 STRING);

2) Renommer les noms de colonnes

ALTER TABLE tests RENAME COLUMN c1 TO c0;

3) Supprimer la colonne

ALTER TABLE my_table DROP COLUMNS(c0, c2);

4) Modifier la nullabilité de la colonne

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) Modifier l'annotation de la colonne

ALTER TABLE tests ALTER COLUMN user_id COMMENT 'user id'

6) Ajouter la position de la colonne

ALTER TABLE tests ADD COLUMN a INT FIRST;

ALTER TABLE tests ADD COLUMN b INT AFTER a;

Remarque : ce type d'opération n'est pas autorisé dans Hive. Il ne peut pas être effectué à l'aide du catalogue Hive. Vous devez fermer la limite de paramètre de Hive :

vim /opt/module/hive/conf/hive-site.xml ;

  <property>

​    <name>hive.metastore.disallow.incompatible.col.type.changes</name>

​    <value>false</value>

  </property>

Redémarrez le service Hive Metastore.

7) Changer la position de la colonne

ALTER TABLE tests ALTER COLUMN b FIRST;

ALTER TABLE tests ALTER COLUMN a AFTER user_id;

8) Changer le type de colonne

ALTER TABLE tests ALTER COLUMN a TYPE DOUBLE;

Guess you like

Origin blog.csdn.net/xianyu120/article/details/132130910