文档首页/ 数据湖探索 DLI/ 常见问题/ Spark作业类/ Spark作业开发类/ Spark Jar任务使用LakeFormation元数据时报错
更新时间:2025-09-01 GMT+08:00
分享

Spark Jar任务使用LakeFormation元数据时报错

问题描述

通过Spark Jar作业读写LakeFormation元数据时,作业启动时提示以下错误:

field 'location' must match '^(obs|har)://.+/.+$'

作业无法继续,表或库创建失败。

详细错误提示信息如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
2025-07-25 09:47:55,782 | INFO  | [main] | Send request, http method: GET, url: 
https://172.16.xxx/v1/02f6e35xxxxx/instances/default/catalogs/lgl/databases/default, request Id: 75d0ee10-xxxx| com.huawei.cloud.dalf.lakecat.client.ApiClient.getResponse(ApiClient.java:392)
2025-07-25 09:47:56,259 | INFO  | [main] | Send request, http method: GET, url: 
https://172.16.xxx/v1/02f6e35xxxxx/instances/default/catalogs/lgl/databases/default, request Id: eef1c48f-xxx| com.huawei.cloud.dalf.lakecat.client.ApiClient.getResponse(ApiClient.java:392)
2025-07-25 09:47:56,433 | INFO  | [main] | Send request, http method: POST, url: 
https://172.16.xxx/v1/02f6e35xxxxx/instances/default/catalogs/lgl/databases, request Id: e6b4e588-xxx | com.huawei.cloud.dalf.lakecat.client.ApiClient.getResponse(ApiClient.java:392)
2025-07-25 09:47:56,495 | ERROR | [main] | field 'location' must match '^(obs|har)://.+/.+$' | com.huawei.cloud.dalf.lakecat.client.hiveclient.impl.HiveExceptionHandler.printLog(HiveExceptionHandler.java:51)
com.huawei.cloud.dalf.lakecat.client.exception.LakeFormationLakeCatClientException: 
400 Bad Request: "{"error_code":"common.00000400","error_msg":"field 'location' must match '^(obs|har)://.+/.+$'"}"
	at com.huawei.cloud.dalf.lakecat.client.exception.LakeFormationExceptionHandler.exceptionHandler(LakeFormationExceptionHandler.java:57) ~

根因分析

该异常表明某个数据库或表的location字段未通过LakeFormation的正则校验。

default数据库缺失,Spark自行创建default库提示错误。

  • Spark Catalog启动时会检查当前Catalog下是否存在default数据库:
    • 存在,读取default 数据库数据。
    • 不存在,Spark 会自动创建。

      但Spark默认生成的location不满足LakeFormation规则,导致后续引用default库的操作报错。

  • 创建数据库语句中指定的location需要以obs:// 开头,否则不符合LakeFormation校验规则。

解决方案

在正式使用新Catalog前,请先手动创建default数据库并指定合法OBS路径,可避免Spark自动创建带来的隐藏风险。

  • 检查已有自建库/表报错
    • 检查并修改对应库/表的location,确保以 obs://开头。
    • 如无法修改,可删除后重建,并在建表/库语句中指定正确的OBS路径。
  • 手动创建并初始化default数据库
    1. 登录LakeFormation控制台,选择“元数据 > 数据库”。
    2. 选择待使用的Catalog,点击 “创建数据库”。
      图1 创建数据库
    3. 数据库名称填写default,“位置”填写符合规则的OBS路径,例如:obs://your-bucket/path/to/default/
      图2 创建fefault数据库并配置正确的OBS路径
    4. 确认创建后,重新提交 Spark Jar 作业。

相关文档