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]
Query 20200912_072348_00009_qqx96 failed: The provided token is malformed or otherwise invalid.(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 and Trino (Presto と Trino)