
# Spark Jar任务使用LakeFormation元数据时报错
#### 问题描述
通过Spark Jar作业读写LakeFormation元数据时，作业启动时提示以下错误：
field 'location' must match '\^(obs\|har)://.+/.+$'
作业无法继续，表或库创建失败。
详细错误提示信息如下：
```
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创建数据库   
     ![](https://support.huaweicloud.com/dli_faq/zh-cn_image_0000002410726536.png "点击放大") 
  
  3. 数据库名称填写default，"位置"填写符合规则的OBS路径，例如：obs://your-bucket/path/to/default/
     图2创建default数据库并配置正确的OBS路径   
     ![](https://support.huaweicloud.com/dli_faq/zh-cn_image_0000002410727608.png "点击放大") 
  
  4. 确认创建后，重新提交 Spark Jar 作业。
   
 
