在 AWS 中国(北京)区域中使用 Hive 和 Presto 启动 Amazon EMR 集群时,为什么我会收到“The provided token is malformed or otherwise invalid”(提供的令牌格式错误或无效)错误?

1 分钟阅读
0

我在 AWS 中国(北京)区域 (cn-north-1) 启动了一个 Amazon EMR 集群。我使用 Presto 和 Apache Hive 从 Amazon Simple Storage Service (Amazon S3) 存储桶创建外部表。当我使用 Hive 和 Presto 查询表时,我收到了与以下类似的错误消息: presto:default> select * from mydata; Query 20200912_072348_00009_qqx96, FAILED, 1 node Splits: 1 total, 0 done (0.00%) 0:03 [0 rows, 0B] [0 rows/s, 0B/s] 查询 20200912_072348_00009_qqx96 失败:提供的令牌格式错误或者无效。(Service: Amazon S3; Status Code: 400; Error Code: InvalidToken; Request ID: 811359ED1D9F8250)

简短描述

在较早的 Amazon EMR 发行版中,Presto 不会自动使用 S3 存储桶所在的区域。请使用下面的任意一种方法解决此问题:

  • 升级到 Amazon EMR 发行版 5.12.0 或更高版本。
  • 要使用 Amazon EMR 发行版 5.11.x 或更早的版本,请将 hive.s3.pin-client-to-current-region 属性设置为 true

解决方法

升级到 Amazon EMR 发行版 5.12.0 或更高版本

启动一个新的集群,然后选择 Amazon EMR 发行版 5.12.0 或更高版本。有关更多信息,请参阅关于 Amazon EMR 发行版

将 hive.s3.pin-client-to-current-region 属性设置为 true(版本 5.11.x 或更早版本)

1.    在每个节点上,打开 hive.properties 文件,然后将 hive.s3.pin-client-to-current-region 属性设置为 true。示例:

sudo vim /etc/presto/conf/catalog/hive.properties
hive.s3.connect-timeout=2m
hive.s3.max-backoff-time=10m
...
hive.s3.pin-client-to-current-region=true

2.    每个节点上重启 Presto:

sudo restart presto-server

3.    要确认新配置是否正常工作,请在中国(北京)区域使用 Hive 和 Presto 查询表。


相关信息

Apache Hive

Presto 和 Trino

AWS 官方
AWS 官方已更新 2 年前