Hudi组件对接OBS
对接OBS
- 使用客户端安装用户登录客户端安装节点。
- 配置环境变量。
source 客户端安装目录/bigdata_env
source 客户端安装目录/Hudi/component_env
- 修改配置文件:
vim 客户端安装目录/Hudi/hudi/conf/hdfs-site.xml
<property> <name>dfs.namenode.acls.enabled</name> <value>false</value> </property>
- 如果集群已启用Kerberos认证(安全模式),执行以下命令使用具有相应OBS路径“Read”和“Write”权限的用户进行认证,如果集群未启用Kerberos认证(普通模式),则无需执行此命令。
kinit 用户名
- 启动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并行系统文件名称,请根据实际情况修改。
- 使用datasource查看表建立成功,数据正常。
val roViewDF = spark.
read.
format("org.apache.hudi").
load(basePath + "/*/*/*/*")
roViewDF.createOrReplaceTempView("hudi_ro_table")
spark.sql("select * from hudi_ro_table").show()
- 执行:q退出spark-shell命令行。
Ranger权限配置
- 登录FusionInsight Manager,选择“系统 > 权限 > 用户组 > 添加用户组”。
- 创建一个空角色的用户组,例如,名称为“obs_hudi”,并将该用户组绑定给对应用户。
- 使用rangeradmin用户登录Ranger管理页面。
- 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
- 单击“Add New Policy”,为2新建的用户组添加相应OBS路径的“Read”和“Write”权限,OBS目录若不存在则需要提前创建,且不允许带通配符*。