2016-08-18 5 views
0

Ich habe einen Cluster mit 15 Knoten, den ich für die Verarbeitung von Daten im Bereich von 90 Millionen Zeilen (Hive-Tabelle)/pro Tag verwenden möchte. Die Daten sind in einen des Knoten als hive Tisch und ich so etwas wie der folgenden Befehl verwenden,Wie man mehrere Knoten in einem Cluster verwendet, um riesige Datenmengen zu verarbeiten - Python

with hive.connect(host = 'hostname of that node', port= 10000, authMechanism='LDAP', user='username', password='pass') as conn: 
    with conn.cursor() as cur: 
     cur.execute('select * from tablename') 
     do_not_touch_this_data = pd.DataFrame(cur.fetch()) 

Das Problem hier ist die Abfrage für mehr als 8 Stunden ausgeführt wird, alle Daten in Python zu laden . Dies liegt daran, dass das Paket alle Daten aufnimmt und in den Speicher dieses bestimmten Knotens lädt. Auch nach dem Laden kann ich selbst grundlegende Befehle wie count/EDA nicht ausführen. Es dauert eine Menge Zeit für jeden Befehl. Dies liegt daran, dass 128 GB RAM dieses bestimmten Knotens im 15-Knoten-Cluster überlastet sind.

Ich möchte auch andere Knoten Speicher verwenden, um EDA mit den Daten zu lesen/zu verarbeiten/zu tun. Kann jemand vorschlagen, diese Knoten in Python zu verwenden, so dass die Befehle viel schneller ausgeführt würden und ich alle Knoten verwenden könnte? Ich bin ein Anfänger für verteiltes Rechnen und ich vermute, dass es einen Weg geben sollte, alle Knoten zu nutzen. Auch, ob das Lesen aller Daten in Python-Speicher eine gute Übung ist?

Danke für die Hilfe

Antwort

1

Verteilte Systeme ist ein großes und komplexes Thema, das von Experten am besten noch übrig ist. Du benutzt Pyhon, Pandas und Hive. Sie sollten nur zu Spark wechseln, der seine eigene DataFrame Abstraktion ähnlich wie Pandas hat und das Lesen von Hive-Tabellen unterstützt, aber die Verteilung der Daten auf Ihre Server für Sie übernimmt. Sie sollten in der Lage sein, alle Operationen, die Sie in Pandas machen, einfach direkt in Spark zu übersetzen.

Verwandte Themen