更新时间:2025-07-25 GMT+08:00
分享

配置Hudi通过Guardian访问OBS

参考配置Guardian服务不启用Ranger OBS路径鉴权配置Guardian服务启用Ranger OBS路径鉴权完成Guardian对接OBS后,即可在spark-shell中创建Hudi COW表存储到OBS中。

前提条件

如果参考配置Guardian服务启用Ranger OBS路径鉴权完成Guardian对接OBS,还需参考Ranger权限配置在Ranger中为组件操作用户赋予OBS路径的“Read”和“Write”权限。

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认证(安全模式),执行以下命令使用具有相应OBS路径“Read”和“Write”权限的用户进行认证,如果集群未启用Kerberos认证(普通模式),则无需执行此命令。

    kinit 用户名

  5. 启动spark-shell,执行下面的命令创建COW表存储到OBS中:

    spark-shell --master yarn
    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”是OBS并行系统文件名称,请根据实际情况修改。

  6. 使用datasource查看表建立成功,数据正常。

    val roViewDF = spark.
    read.
    format("org.apache.hudi").
    load(basePath + "/*/*/*/*")
    roViewDF.createOrReplaceTempView("hudi_ro_table")
    spark.sql("select * from  hudi_ro_table").show()

  7. 执行以下命令退出spark-shell命令行。

    :q

Ranger权限配置

  1. 登录MRS集群Manager界面,选择“系统 > 权限 > 用户组 > 添加用户组”。

    登录集群Manager界面请参考访问MRS集群Manager

  2. 创建一个空角色的用户组,例如,名称为“obs_hudi”,并将该用户组绑定给对应用户。
  3. 使用rangeradmin用户登录Ranger管理页面。
  4. 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
  5. 单击“Add New Policy”,为步骤 2新建的用户组添加相应OBS路径的“Read”和“Write”权限,OBS目录若不存在则需要提前创建,且不允许带通配符*

    图1 为Hudi用户组赋予OBS路径读和写权限

    对接OBS后,如需通过Ranger配置组件关于OBS相关路径的权限策略,需确保OBS服务已开启AccessLabel功能,若未开启,需手动开启,详细操作请联系OBS服务运维人员。

相关文档