2017-08-30 4 views
1

J'ai créé un cluster presto en utilisant AWS EMR. J'utilise toutes les configurations par défaut. Je voudrais écrire un script python sur le nœud maître pour pousser les requêtes à presto et obtenir le résultat.Presto/Python: Comment me connecter à Presto sur AWS EMR en utilisant python?

Je trouve la bibliothèque PyHive mais je ne sais pas quoi mettre dans la chaîne de connexion:

from pyhive import presto # or import hive 
cursor = presto.connect('localhost').cursor() 
statement = 'SELECT * FROM my_awesome_data LIMIT 10' 
cursor.execute(statement) 
my_results = cur.fetchall() 

Je pense que le localhost est probablement juste parce que je suis en cours d'exécution du script sur le nœud maître le cluster presto, mais je me fais une erreur:

OperationalError: Unexpected status code 404 
b'<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.45 - Error report</title><style type="text/css">H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; border: none;}</style> </head><body><h1>HTTP Status 404 - /v1/statement</h1><div class="line"></div><p><b>type</b> Status report</p><p><b>message</b> <u>/v1/statement</u></p><p><b>description</b> <u>The requested resource is not available.</u></p><hr class="line"><h3>Apache Tomcat/8.0.45</h3></body></html>' 

Répondre

1

je me suis dit que le port DME met en place pour le connecteur Web de Presto est 8889, donc avec la connexion correcte:

from pyhive import presto 
cursor = presto.connect(host='localhost', port=8889).cursor() 
statement = 'SELECT * FROM my_awesome_data LIMIT 10' 
cursor.execute(statement) 
my_results = cur.fetchall() 

je reçois mes résultats:

print(my_results) 

[('tn', 44599263, 925636329.2440014), ('fp', 169984085, 3624296366.570987), ('fn', 6370, 488192.751), ('tp', 47909, 4036930.0270000002)]