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.