在 AWS 中国(北京)区域中使用 Hive 和 Presto 启动 Amazon EMR 群集时,收到“The provided token is malformed or otherwise invalid”错误

上次更新时间:2019 年 4 月 22 日

在 AWS 中国(北京)区域 (cn-north-1) 中启动 Amazon EMR 群集。我使用 Presto 和 Apache Hive 从 Amazon Simple Storage Service (Amazon S3) 存储桶创建外部表。当我使用 Hive 和 Presto 查询表时,我收到类似下述内容的错误消息:

presto:default> select * from mydata;
Query 20160712_072348_00009_qqx96, FAILED, 1 node
Splits: 1 total, 0 done (0.00%)
0:03 [0 rows, 0B] [0 rows/s, 0B/s]
Query 20160712_072348_00009_qqx96 failed: The provided token is malformed or otherwise invalid. (Service: Amazon S3; Status Code: 400; Error Code: InvalidToken; Request ID: 841753ED1D9E8250)

简短描述

发生此错误是因为 Presto 不会自动使用 S3 存储桶所在的区域。要解决此错误,在运行的群集上或启动新群集时将 hive.s3.pin-client-to-current-region 属性设置为 true

解决方法

要在运行的群集上解决此错误:

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

要在启动新群集时解决此错误,使用 AWS 管理控制台或 AWS 命令行界面 (AWS CLI)。

AWS 管理控制台:

1.    打开 Amazon EMR 控制台

2.    选择创建群集,然后选择转到高级选项

3.    在软件配置页面中的编辑软件设置部分,选择输入配置

4.    在配置框中输入以下命令:

classification=presto-connector-hive,properties=[hive.s3.pin-client-to-current-region=True]

5.    完成群集创建。

AWS 命令行界面 (CLI):

使用 create-cluster 命令。在您为 --configurations 参数指定的 JSON 文件中包含以下 JSON 文本。有关详细信息,请参阅创建群集时使用 AWS CLI 提供配置

[
    {
        "Classification":"presto-connector-hive",
        "Properties":{"hive.s3.pin-client-to-current-region":"true"}
    }
]

您现在应当能够在中国(北京)区域中使用 Hive 和 Presto 查询表。


这篇文章对您有帮助吗?

您觉得我们哪些地方需要改进?


需要更多帮助?