Hive Metastore+Trino+S3创建外部表报404错误求助
问题排查:Trino连接Hive Metastore创建S3外部表报404错误
已搭建v3.1.3版本的Hive Standalone Metastore(依赖v3.3.4的Hadoop jars),目标是通过Trino查询S3中的Parquet文件。目前在Trino CLI中能看到hive.<schema_name>,但执行创建外部表语句时触发404 FileNotFoundException,错误日志如下:
trino:<MY_SCHEMA>> CREATE TABLE IF NOT EXISTS hive.<MY_SCHEMA>.<MY_TABLE> ( -> column_one VARCHAR, -> column_two VARCHAR, -> column_three VARCHAR, -> column_four DOUBLE, -> column_five VARCHAR, -> column_six VARCHAR, -> query_start_time TIMESTAMP) -> WITH ( -> external_location = 's3a://<MY_S3_BUCKET_NAME>/dir_one/dir_two', -> format = 'PARQUET' -> ); CREATE TABLE Query 20220924_181001_00019_bvs42 failed: Got exception: java.io.FileNotFoundException PUT 0-byte object on dir_one/dir_two: com.amazonaws.services.s3.model.AmazonS3Exception: Not Found (Service: Amazon S3; Status Code: 404; Error Code: 404 Not Found; Request ID: IDNUM123; S3 Extended Request ID: soMeLongID123=; Proxy: null), S3 Extended Request ID: soMeLongID123:404 Not Found
已手动验证AWS凭证可访问目标桶,且桶内存在Parquet文件。当前Trino的hive.properties配置如下:
connector.name=hive hive.metastore.uri=thrift://$HIVE_IP_ADDR:9083 hive.s3.path-style-access=true hive.s3.endpoint=$AWS_S3_ENDPOINT hive.s3.aws-access-key=$AWS_ACCESS_ID hive.s3.aws-secret-key=$AWS_SECRET hive.s3.ssl.enabled=false
可能的问题及需检查的配置
- S3端点配置准确性:确认
hive.s3.endpoint的格式是否正确,若使用S3兼容存储,需确保端点包含完整协议(如http://xxx)和端口(若非默认),路径式访问开启后,端点需对应正确的存储节点地址。 - 桶名与路径拼写:检查
external_location中的桶名和路径是否完全匹配,注意S3桶名及路径的大小写敏感性,避免多余斜杠或拼写错误。 - Hive Metastore的S3访问配置:创建外部表时Hive Metastore可能需要写入临时元数据文件,需检查Metastore所在节点的
core-site.xml是否配置了正确的S3凭证(fs.s3a.access.key、fs.s3a.secret.key)及端点fs.s3a.endpoint,确保Metastore本身能访问目标S3路径。 - 协议一致性:确认Trino和Hive Metastore使用的S3协议一致,均为
s3a,避免出现s3/s3n与s3a混用导致的路径解析错误。 - IAM权限范围:验证AWS凭证是否拥有目标路径的读写权限,包括
s3:PutObject、s3:ListBucket等,创建表过程中可能需要写入临时文件,仅读权限不足以完成操作。 - 版本兼容性:检查Trino版本与Hive Metastore v3.1.3的兼容性,必要时在
hive.properties中添加hive.metastore.version=3.1.3指定Metastore版本,确保交互逻辑匹配。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

