
# 使用Spark执行Hudi样例程序开发思路
#### 场景说明
本章节介绍如何使用Spark操作Hudi执行插入数据、查询数据、更新数据、增量查询、特定时间点查询、删除数据等操作。
详细代码请参考样例代码。
#### 打包项目
1. 将user.keytab、krb5.conf 两个文件上传客户端所在服务器上。

2. 通过IDEA自带的Maven工具，打包项目，生成jar包。具体操作请参考[在Linux环境中编包并运行Spark程序](https://support.huaweicloud.com/devg3-mrs/mrs_07_200130.html)。
   ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 编译打包前，样例代码中的user.keytab、krb5.conf文件路径需要修改为该文件所在客户端服务器的实际路径。
   
   - 运行Python样例代码无需通过Maven打包，只需要上传user.keytab、krb5.conf 文件到客户端所在服务器上。
     
3. 将打包生成的jar包上传到Spark客户端所在服务器的任意目录（例如" /opt/example/" ）下。
 
#### 运行任务
1. 登录Spark客户端节点，执行如下命令： **source** *客户端安装目录* **/bigdata_env**
   **source** *客户端安装目录* **/Hudi/component_env**
   **kinit** *Hudi开发用户*
   
2. 编译构建样例代码后可以使用**spark-submit** 提交命令，执行命令后会依次执行写入、更新、查询、删除等操作：
   - 运行Java样例程序： **spark-submit --keytab** **\<user_keytab_path\>** **--principal=\<principal_name\> --class com.huawei.bigdata.hudi.examples.HoodieWriteClientExample** **/opt/example/hudi-java-security-examples-1.0.jar** **hdfs://hacluster/tmp/example/hoodie_java hoodie_java**
     其中："\<user_keytab_path\>"为认证文件路径，"\<principal_name\>"为认证用户名，"/opt/example/hudi-java-examples-1.0.jar"为jar包路径，"hdfs://hacluster/tmp/example/hoodie_java"为Hudi表的存储路径，" hoodie_java"为Hudi表的表名。
     
   
   - 运行Scala样例程序： **spark-submit --keytab** **\<user_keytab_path\>** **--principal=\<principal_name\> --class com.huawei.bigdata.hudi.examples.HoodieDataSourceExample** **/opt/example/hudi-scala-security-examples-1.0.jar** **hdfs://hacluster/tmp/example/hoodie_scala hoodie_scala**
     其中："/opt/example/hudi-scala-examples-1.0.jar"为jar包路径，"\<user_keytab_path\>"为认证文件路径，"\<principal_name\>"为认证用户名，"hdfs://hacluster/tmp/example/hoodie_scala"为Hudi表的存储路径，" hoodie_Scala"为Hudi表的表名。
     
   
   - 运行Python样例程序： **spark-submit /opt/example/HudiPythonExample.py hdfs://hacluster/tmp/huditest/example/python hudi_trips_cow**
     其中："hdfs://hacluster/tmp/huditest/example/python"为Hudi表的存储路径，" hudi_trips_cow"为Hudi表的表名。
     
    
 
