J'ai lancé un cluster Amazon EMR dans la région AWS Chine (Beijing) (cn-north-1). J'ai utilisé Presto et Apache Hive pour créer une table externe à partir d'un compartiment Amazon Simple Storage Service (Amazon S3). Quand j'interroge la table en utilisant Hive et Presto, j'obtiens une erreur similaire à celle-ci :
presto:default> sélectionner* depuis mes données ;
Requête 20200912_072348_00009_qqx96, ÉCHOUÉ, 1 nœud
Séparations : 1 au total, 0 effectuées (0,00 %)
0:03 [0 lignes, 0B] [0 lignes/s, 0B/s]
La requête 20200912_072348_00009_qqx96 a échoué : le jeton fourni est incorrect ou non valide. (Service : Amazon S3 ; code de statut : 400 ; code d'erreur : InvalidToken ; ID de demande : 811359ED1D9F8250)
Brève description
Dans les anciennes versions d'Amazon EMR, Presto n'utilise pas automatiquement la région dans laquelle se trouve le compartiment S3. Utilisez l'une des options suivantes pour résoudre l'erreur :
- Effectuez une mise à niveau vers Amazon EMR version 5.12.0 ou ultérieure.
- Quant à l'utilisation d'Amazon EMR version 5.11.x ou antérieure, définissez la propriété hive.s3.pin-client-to-current-region sur true.
Solution
Mise à niveau vers Amazon EMR version 5.12.0 ou ultérieure
Lancez un nouveau cluster et choisissez Amazon EMR version 5.12.0 ou ultérieure. Pour plus d'informations, consultez À propos des versions d'Amazon EMR.
Définissez la propriété hive.s3.pin-client-to-current-region sur true (version 5.11.x ou antérieure)
1. Sur chaque nœud, ouvrez le fichier hive.properties, puis affectez à la propriété hive.s3.pin-client-to-current-region la valeur true. Exemple :
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. Redémarrez Presto sur chaque nœud :
sudo restart presto-server
3. Pour confirmer que la nouvelle configuration fonctionne comme prévu, recherchez une table en utilisant Hive et Presto dans la région Chine (Beijing).
Informations connexes
Apache Hive
Presto et Trino