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库提示错误。
解决方案
在正式使用新Catalog前,请先手动创建default数据库并指定合法OBS路径,可避免Spark自动创建带来的隐藏风险。
- 检查已有自建库/表报错
- 检查并修改对应库/表的location,确保以 obs://开头。
- 如无法修改,可删除后重建,并在建表/库语句中指定正确的OBS路径。
- 手动创建并初始化default数据库
- 登录LakeFormation控制台,选择“元数据 > 数据库”。
- 选择待使用的Catalog,点击 “创建数据库”。
图1 创建数据库
- 数据库名称填写default,“位置”填写符合规则的OBS路径,例如:obs://your-bucket/path/to/default/
图2 创建fefault数据库并配置正确的OBS路径
- 确认创建后,重新提交 Spark Jar 作业。