更新时间:2024-12-18 GMT+08:00

配置Spark对接LakeFormation

使用pyspark时,需要将以下配置中“spark.hadoop”开头的参数去掉“spark.hadoop”后配置到hive-site.xml配置文件中。

对接通用配置

在“spark/conf/spark-defaults.conf”中添加以下配置:

# 项目ID,必选参数,此处配置值仅作为参考
spark.hadoop.lakeformation.project.id=项目ID
# LakeFormation实例ID,可选参数,通过LakeFormation实例界面获取,如不填写则连接到默认实例,此处配置值仅作为参考
spark.hadoop.lakeformation.instance.id=LakeFormation实例ID
#访问lakeformation IAM认证AK信息,可选参数,如果为自定义认证信息获取类可忽略
spark.hadoop.lakeformation.authentication.access.key=AK信息
#访问lakeformation IAM认证SK信息,可选参数,如果为自定义认证信息获取类可忽略
spark.hadoop.lakeformation.authentication.secret.key=SK信息
#访问lakeformation IAM认证信息securitytoken,可选参数,搭配临时AK/SK使用,如果使用永久AK/SK或自定义认证信息获取类可忽略
spark.hadoop.lakeformation.authentication.security.token=securitytoken信息

其中项目ID为必选配置,其他为可选配置,根据实际情况进行填写。

将上述配置添加到hive-site.xml或core-site.xml中亦可生效,添加时需要去除“spark.hadoop”前缀。

对接OBS

在“spark/conf/spark-defaults.conf”中添加以下配置:

# 对接OBS固定配置,Endpoint需要根据区域进行配置
spark.hadoop.fs.obs.impl=org.apache.hadoop.fs.obs.OBSFileSystem
spark.hadoop.fs.AbstractFileSystem.obs.impl=org.apache.hadoop.fs.obs.OBS
spark.hadoop.fs.obs.endpoint=obs.xxx.huawei.com

# 指定访问OBS凭证获取类为LakeFormationObsCredentialProvider
spark.hadoop.fs.obs.credentials.provider=com.huawei.cloud.dalf.lakecat.client.obs.LakeFormationObsCredentialProvider

# 可选参数,关闭OBS文件系统缓存,长任务需要增加该配置,避免缓存中的临时AKSK失效
spark.hadoop.fs.obs.impl.disable.cache=true

Endpoint:不同服务不同区域的Endpoint不同。您可以从地区和终端节点中获取。

将上述配置添加到core-site.xml文件中亦可生效,添加时需要去除“spark.hadoop”前缀。

对接LakeFormation元数据

Spark对接LakeFormation有以下两种对接方式,建议根据需要选择其中一种方式进行对接。

  • 使用SparkCatalogPlugin方式对接:SparkCatalogPlugin方式对接基于Spark SessionCatalogV2,支持对接多个Catalog,社区仍在持续开发当中,存在部分不支持的SQL语句。
  • 使用MetastoreClient方式对接:MetastoreClient方式对接基于Spark HiveExternalCatalog机制与Hive MetastoreClient机制,支持Hive大部分SQL语句,但无法同时对接多个Catalog。
使用SparkCatalogPlugin方式对接
  1. 在“spark/conf/spark-defaults.conf”配置文件中补充以下配置,如需对接多个catalog,以下配置需要配置多行:
    # 指定catalog实现类,必选配置(spark_catalog_name为spark中的catalog名称。根据实际需要替换,下同)
    spark.sql.catalog.${spark_catalog_name}=com.huawei.cloud.dalf.lakecat.client.spark.LakeFormationSparkCatalog
    # 需要对接的Catalog名称(lakeformation_catalog_name为lakeFormation中的catalog),可选配置,如果不配置则对接到hive catalog中,此处配置值仅作为参考
    spark.sql.catalog.${spark_catalog_name}.lakecat.catalogname.default=${lakeformation_catalog_name}
  2. 对接后验证。

    对接后可通过spark-shell、spark-submit或spark-sql访问LakeFormation,以下以spark-sql为例:

    • 切换数据库(切换时需要指定catalog名称,database_name对应数据库需要在LakeFormation中存在):

      use spark_catalog_name.database_name;

    • 查看表信息:

      show tables;

    • 创建数据库(无法直接创建与catalog同名的数据库,需要指定catalog)

      create database catalog_name.test;

使用MetastoreClient方式对接
  1. 在spark-defaults.conf中补充如下配置:
    spark.sql.catalogImplementation=hive
  2. 在“spark/conf/”文件夹下新增文件hive-site.xml(如果已有该文件则编辑此文件),并在hive-site.xml中补充以下配置:
    <configuration>
    <!--固定配置,开启自定义metastore客户端-->
    <property>
    <name>hive.metastore.session.client.class</name>
    <value>com.huawei.cloud.dalf.lakecat.client.hiveclient.LakeCatMetaStoreClient</value>
    </property>
    <!--需要对接的lakeformationCatalog名称,可选配置,如果不配置则对接到hive catalog中,此处配置值仅作为参考-->
    <property>
    <name>lakecat.catalogname.default</name>
    <value>hive</value>
    </property>
    <!--hive执行路径,可选配置,未对接HDFS时默认为本地路径/tmp/hive,此处配置值仅作为参考-->
    <property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    </property>
    </configuration>

    除在hive-site.xml中添加配置外,也可通过在spark-defaults.conf配置文件中以“spark.hadoop”开头添加配置,如添加“spark.hadoop.hive.metastore.session.client.class=com.huawei.cloud.dalf.lakecat.client.hiveclient.LakeCatMetaStoreClient”。

    • “hive.exec.scratchdir”路径权限需要修改为777,否则会导致Hive客户端初始化异常。
    • 需要在“lakecat.catalogname.default”对应的catalog中创建名称为“default”的数据库(已创建可忽略),否则会导致spark-sql初始化异常或spark-shell无法对接。
  3. 对接后验证。

    对接后可通过spark-shell或执行SQL访问LakeFormation,以下spark-sql为例。

    • 切换数据库(切换时无需指定catalog名称):

      use database_name;

    • 查看表信息:

      show tables;

集成SQL鉴权插件

  1. 使用鉴权插件必须实现并指定自定义用户信息获取类,详细操作请参考自定义用户信息获取类
  2. 在spark-default.conf配置文件中添加如下配置:

    com.huawei.cloud.dalf.lakecat.client.spark.v31.authorizer.LakeFormationSparkSQLExtension
    spark.sql.extensions=com.huawei.cloud.dalf.lakecat.client.spark.authorizer.LakeFormationSparkSQLExtension

  • 集成权限插件后,如果当前用户(通过自定义用户信息获取类指定)无对应元数据权限,在执行SQL时将抛出异常。
  • 当前用户如果拥有IAM LakeFormation:policy:create权限,且当前用户(可通过自定义用户信息获取类指定)和认证信息(可通过自定义认证信息获取类指定)为统一用户,将跳过SQL鉴权。
  • 当前,过滤相关功能暂未支持,包括库、表、行过滤,列掩码等。

日志打印

通过在log4j.properties中添加配置“log4j.logger.org.apache=WARN”,可关闭LakeFormation客户端httpclient请求日志。