2017-05-24 3 views
1

J'espère réellement utiliser Presto dans un pipeline ETL sur AWS EMR, mais je n'arrive pas à le configurer pour utiliser pleinement les ressources du cluster. Ce cluster existerait uniquement pour cette requête, et rien de plus, puis mourrait. Ainsi, je voudrais réclamer la mémoire disponible maximum pour chaque noeud et la requête en augmentant query.max-memory-per-node et query.max-memory. Je peux le faire lorsque je configure le cluster en ajoutant ces paramètres dans la zone «Modifier les paramètres du logiciel» de la vue de création de cluster dans la console AWS. Mais le serveur Presto ne démarre pas, signalant dans le fichier server.log une exception IllegalArgumentException, indiquant que max-memory-per-node dépasse l'espace de tas utilisable (qui, par défaut, est trop petit pour mon type d'instance et mon cas d'utilisation).Problème lors de la configuration de l'allocation de mémoire de Presto sur AWS EMR

J'ai essayé d'utiliser le paramètre de session set session resource_overcommit=true, mais cela semble seulement remplacer la mémoire query.max, pas query.max-memory-per-node, parce que dans l'interface utilisateur Presto, je vois que très peu de La mémoire disponible sur chaque nœud est utilisée pour la requête.

Grâce à Google, j'ai été amené à croire que je devais également augmenter la taille du tas JVM en changeant les propriétés -Xmx et -Xms dans /etc/presto/conf/jvm.config, mais cela est dit ici (http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto.html) qu'il n'est pas possible de modifier les paramètres JVM dans la phase de création de cluster. Pour modifier ces propriétés après que le cluster EMR est actif et que le serveur Presto a été démarré, dois-je vraiment ssh manuellement dans chaque nœud et modifier jvm.config et config.properties, et redémarrer le serveur Presto? Bien que je réalise qu'il serait possible d'installer manuellement Presto avec une configuration personnalisée sur un cluster EMR via un script bootstrap ou quelque chose, ce serait vraiment un gros problème.

Y a-t-il quelque chose qui me manque ici? N'y a-t-il pas un moyen plus simple de faire en sorte que Presto alloue la totalité d'un cluster à une requête?

Répondre

2

Comme annoncé, en augmentant query.max-memory-per-node, et aussi par nécessité la propriété -Xmx, en effet ne peut être atteint sur EMR qu'après Presto a déjà commencé avec les options par défaut. Pour les augmenter, les fichiers jvm.config et config.properties trouvés dans/etc/presto/conf/doivent être changés, et le serveur Presto redémarré sur chaque noeud (core et coordinator).

On peut le faire avec un script d'amorçage en utilisant des commandes comme

sudo sed -i "s/query.max-memory-per-node=.*GB/query.max-memory-per-node=20GB/g" /etc/presto/conf/config.properties 
sudo restart presto-server 

et de même pour /etc/presto/jvm.conf. Les seules mises en garde sont qu'il faut inclure la logique dans l'action bootstrap à exécuter uniquement après l'installation de Presto et que le serveur sur le nœud de coordination doit être redémarré en dernier (et éventuellement avec des paramètres différents si le type d'instance est différent des nœuds principaux).

Vous devrez peut-être également modifier resources.reserved-system-memory par défaut en lui indiquant une valeur dans config.properties. Par défaut, cette valeur est .4 * (valeur Xmx), qui correspond à la quantité de mémoire demandée par Presto pour le pool système. Dans mon cas, j'ai pu diminuer cette valeur en toute sécurité et donner plus de mémoire à chaque nœud pour l'exécution de la requête.