
# Spark on Paimon最佳实践
#### 概述
Apache Paimon是一个流式数据湖存储技术，它提供高吞吐、低延迟的数据摄入、流式订阅和实时查询。采用开放的ORC、Parquet、Avro文件格式，与Flink、Spark等计算引擎兼容。
#### 前提条件
- 完成Hadoop部署并对接OBS，详情参考[Hadoop对接OBS](https://support.huaweicloud.com/bestpractice-obs/obs_05_1507.html)。
- 完成Spark部署。 如果数据目录Catalog选择Hive，Spark请使用预构建的包含Hive的Spark版本，可以使用spark-xxx-bin-hadoop3.tgz或者使用以下命令构建：
  ```
  mvn -DskipTests clean package -Phive -Phive-thriftserver
  ```
  注意，spark-xxx-bin-without-hadoop.tgz预构建没有包含Hive，请避免使用。
  
 
#### 配置Spark on Paimon环境
进入[Apache Paimon官方文档](https://paimon.apache.org/docs/)，选择需要使用Paimon版本，参考对应版本文档的Engine Spark\>Quick Start章节，完成Spark与Paimon的对接。
#### 创建spark catalog
您可以根据自身业务环境选择Catalog type使用filesystem或者hive。
**选项1：** **配置Paimon对接OBS，Catalog type使用filesystem**
1. 启动spark-sql执行Paimon Catalog配置。 
   ```
   spark-sql \
     --conf "spark.driver.extraJavaOptions=-Dspark.sql.catalogImplementation=in-memory" 
     --conf "spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog" \
     --conf "spark.sql.catalog.paimon.metastore=filesystem" \
     --conf "spark.sql.catalog.paimon.warehouse=obs://xxx/xxx" \
     --conf "spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions"
   ```
   或者您也可以在spark-default.conf 中配置，执行以下命令，进入配置文件编辑页面：
   ```
   vim ${SPARK_HOME}/conf/spark-defaults.conf
   ```
   在配置文件中写入以下配置项：
   ```
   spark.sql.catalogImplementation=in-memory
   spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog
   spark.sql.catalog.paimon.metastore=filesystem
   spark.sql.catalog.paimon.warehouse=obs://xxx/xxx
   spark.sql.extensions=org.apache.paimon.spark.extensions.PaimonSparkSessionExtensions
   ```
   修改完成后，按"Esc"，输入**:wq**保存并退出文件编辑。
   
   
2. 切换到指定Catalog，命令如下： 
   ```
   USE paimon;
   ```
   
   
3. 创建数据库和表，命令如下： 
   ```
   CREATE DATABASE db_xxx;
   use db_xxx;
   CREATE TABLE tbl_xxx(...);
   ```
   
   
**选项2：** **配置Paimon对接OBS，Catalog type使用hive**
1. 启动spark-sql执行Paimon Catalog配置，命令如下： 
   ```
   spark-sql \
       --conf "spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog" \
       --conf "spark.sql.catalog.paimon.warehouse=obs://xxx/xxx" \
       --conf "spark.sql.catalog.paimon.metastore=hive"
   ```
   或者您也可以在spark-default.conf 中配置，执行以下命令，进入配置文件编辑页面：
   ```
   vim ${SPARK_HOME}/conf/spark-defaults.conf
   ```
   在配置文件中写入以下配置项：
   ```
   spark.sql.catalog.paimon=org.apache.paimon.spark.SparkCatalog
   spark.sql.catalog.paimon.metastore=hive
   spark.sql.catalog.paimon.warehouse=obs://xxx/xxx
   ```
   修改完成后，按"Esc"，输入**:wq**保存并退出文件编辑。
   
   
2. 切换到指定catalog，命令如下： 
   ```
   use paimon;
   ```
   
   
3. 创建数据库和表，命令如下： 
   ```
   CREATE DATABASE db_xxx;
     use db_xxx;
     CREATE TABLE tbl_xxx(...);
   ```
   
   
 
