
# 配置Hudi通过IAM委托访问OBS
参考[配置MRS集群通过IAM委托对接OBS](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0768.html)完成存算分离集群配置后，即可在spark-shell中创建Hudi COW表存储到OBS中。
#### Hudi对接OBS
1. 使用安装客户端用户登录客户端安装节点。
2. 配置环境变量。 
   加载环境变量：
   ```
   source 客户端安装目录/bigdata_env
   ```
   加载组件环境变量：
   ```
   source 客户端安装目录/Hudi/component_env
   ```
   
   
3. 修改配置文件： 
   ```
   vim 客户端安装目录/Hudi/hudi/conf/hdfs-site.xml
   ```
   修改如下内容，"dfs.namenode.acls.enabled"参数用于设置是否启用HDFS ACL功能：
   ```
   <property>
   <name>dfs.namenode.acls.enabled</name>
   <value>false</value>
   </property>
   ```
   
   
4. 如果集群启用了Kerberos认证，使用以下命令用户进行用户认证，如果当前集群未启用Kerberos认证，则无需执行此命令。 
   ```
   kinit 用户名
   ```
   
   
5. 启动spark-shell，执行下面的命令创建COW表存储到OBS中： 
   ```
   import org.apache.hudi.QuickstartUtils._
   import scala.collection.JavaConversions._
   import org.apache.spark.sql.SaveMode._
   import org.apache.hudi.DataSourceReadOptions._
   import org.apache.hudi.DataSourceWriteOptions._
   import org.apache.hudi.config.HoodieWriteConfig._
   val tableName = "hudi_cow_table"
   val basePath = "obs://testhudi/cow_table/"
   val dataGen = new DataGenerator
   val inserts = convertToStringList(dataGen.generateInserts(10))
   val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))
   df.write.format("org.apache.hudi").
   options(getQuickstartWriteConfigs).
   option(PRECOMBINE_FIELD_OPT_KEY, "ts").
   option(RECORDKEY_FIELD_OPT_KEY, "uuid").
   option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").
   option(TABLE_NAME, tableName).
   mode(Overwrite).
   save(basePath);
   ```
   其中，"obs://testhudi/cow_table/"是OBS路径，"testhudi"是并行文件系统名称，请根据实际情况修改。
   
   
6. 使用datasource API命令查看表建立成功，数据正常。 
   ```
   val roViewDF = spark.
   read.
   format("org.apache.hudi").
   load(basePath + "/*/*/*/*")
   roViewDF.createOrReplaceTempView("hudi_ro_table")
   spark.sql("select * from  hudi_ro_table").show()
   ```
   图1查看表数据   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001983490297.png "点击放大")
   
   
7. 执行以下命令退出spark-shell命令行： 
   ```
   :q
   ```
   
   
 
