3 votes

Force HiveServer2 à exécuter le travail MapReduce

J'utilise hive-1.1.0. En soumettant des requêtes à HiveServer2 via Beeline qui sont en lecture seule et ne contiennent pas de prédicats, HiveServer2 essaiera de lire les données à partir de HDFS lui-même sans générer un travail MapReduce :

SELECT * FROM my_table LIMIT 100;

Pour les très grands ensembles de données, cela peut amener HiveServer2 à conserver beaucoup de mémoire, ce qui entraîne de longues pauses de collecte des déchets. L'ajout d'un "faux" prédicat permettra à HiveServer2 d'exécuter le travail MapReduce comme il le souhaite, par exemple

SELECT * FROM my_table WHERE (my_id > 0 OR my_id <= 0) LIMIT 100;

Par "faux", j'entends un prédicat qui n'a pas d'importance ; le prédicat de l'exemple ci-dessus sera toujours vrai. Existe-t-il un paramètre permettant de forcer HiveServer2 à toujours exécuter la tâche MapReduce sans avoir à ajouter de faux prédicats ?

Je ne parle pas du moment où HiveServer2 détermine qu'il peut exécuter un travail MapReduce localement ; j'ai entièrement désactivé cette fonction :

> SET hive.exec.mode.local.auto;
+----------------------------------+--+
|               set                |
+----------------------------------+--+
| hive.exec.mode.local.auto=false  |
+----------------------------------+--+

mais les requêtes sans prédicats sont toujours lues entièrement par HiveServer2, ce qui cause des problèmes.

Tout conseil est le bienvenu. Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X