2016-03-31 20 views
0

Ich fange mit Funken an und habe nie mit Hadoop gearbeitet. Ich habe 10 iMacs, auf denen ich Spark 1.6.1 mit Hadoop 2.6 installiert habe. Ich habe die vorkompilierte Version heruntergeladen und den extrahierten Inhalt einfach in /usr/local/spark/ kopiert. Ich habe alle Umgebungsvariablen Setup mit SCALA_HOME, Änderungen an PATH und andere Funken Conf. Ich kann sowohl spark-shell als auch pyspark (mit Anacondas Python) ausführen.Spark RDD Probleme

Ich habe den Standalone-Cluster eingerichtet; Alle Knoten werden auf meiner Webbenutzeroberfläche angezeigt. Nun, indem ich die Python-Shell benutzte (lief auf dem Cluster nicht lokal), folgte ich this link's python interpreter word count example.

Dies ist der Code, den ich

from operator import add 

def tokenize(text): 
    return text.split() 

text = sc.textFile("Testing/shakespeare.txt") 
words = text.flatMap(tokenize) 
wc = words.map(lambda x: (x,1)) 
counts = wc.reduceByKey(add) 

counts.saveAsTextFile("wc") 

Es gibt mir Fehler verwendet haben, dass die Datei shakespeare.txt nicht auf einem Slave-Knoten gefunden wurde. Bei der Suche habe ich verstanden, dass, wenn ich nicht HDFS verwende, die Datei auf jedem Slave-Knoten auf demselben Pfad vorhanden sein sollte. Hier ist der Stack-Trace - github gist

Nun, ich habe ein paar Fragen-

  • nicht zugelassen RDD verteilt werden? Das heißt, es sollte (wenn die Aktion auf RDD ausgeführt wurde) die Datei auf allen Knoten verteilt haben, anstatt dass ich sie verteilen musste.

  • Ich habe den Funke mit Hadoop 2.6 heruntergeladen, aber die Hadoop-Befehle sind nicht verfügbar, um ein HDFS zu erstellen. Ich extrahierte die Hadoop-JAR-Datei, die in der spark/lib gefunden wurde, in der Hoffnung, etwas ausführbares zu finden, aber es gab nichts. Welche Hadoop-Dateien wurden im Spark-Download bereitgestellt?

  • Schließlich, wie kann ich eine verteilte Anwendung (Spark-Submit) oder eine verteilte Analyse (mit Pyspark) auf dem Cluster ausführen? Wenn ich ein HDFS erstellen muss, welche zusätzlichen Schritte sind erforderlich? Wie kann ich hier ein HDFS erstellen?

+0

Können Sie uns Ihren Code zeigen? –

+0

Ich habe den Code und Stack-Trace hinzugefügt. – TrigonaMinima

+0

Die RDD wird Ihre Datei nicht für Sie verteilen, deshalb würden Sie normalerweise ein verteiltes Dateisystem wie HDFS verwenden. – femibyte

Antwort

0

Wenn Sie die Spark Programming Guide lesen, werden Sie die Antwort auf Ihre erste Frage finden:

RDD Grundlagen zu veranschaulichen, betrachten das einfache Programm unter:

val lines = sc.textFile("data.txt") 
val lineLengths = lines.map(s => s.length) 
val totalLength = lineLengths.reduce((a, b) => a + b) 

Die erste Zeile Definiert eine Basis-RDD aus einer externen Datei. Dieser Datensatz ist nicht im Speicher geladen oder anderweitig bearbeitet: Zeilen ist nur ein Zeiger auf die Datei. Die zweite Zeile definiert lineLengths als Ergebnis einer Map-Transformation. Auch hier wird lineLengths nicht sofort berechnet, wegen Faulheit. Schließlich laufen wir reduzieren, was eine Aktion ist. An diesem Punkt unterbricht Spark die Berechnung in Aufgaben, die auf separaten Maschinen ausgeführt werden, und jede Maschine führt sowohl ihren Teil der Karte als auch eine lokale Reduktion aus und gibt nur ihre Antwort an das Treiberprogramm zurück.

Denken Sie daran, dass Transformationen auf dem Spark-Arbeiter ausgeführt werden (siehe link, Rutsche n.21).

In Bezug auf Ihre zweite Frage enthält Spark nur die libs, wie Sie sehen können, um die Hadoop-Infrastruktur zu verwenden.Sie müssen den Hadoop-Cluster zuerst einrichten (Hdfs usw.), um ihn zu verwenden (mit den Bibliotheken in Spark): werfen Sie einen Blick auf Hadoop Cluster Setup.

Um Ihre letzte Frage zu beantworten, hoffe ich, dass die official documentation hilft, insbesondere Spark Standalone.

+0

Aah! Vielen Dank. Ich bin der gleichen offiziellen Dokumentation gefolgt, auf die Sie hingewiesen haben, aber es wird nicht erwähnt, dass ein Hadoop-Cluster eingerichtet wird. Also, eine Follow-up-Frage- – TrigonaMinima

+0

Hadoop ist nicht Spark, das ist der Grund, dass Sie nichts in dem Link finden, den ich gepostet habe. Ich habe meine Antwort mit dem Hadoop-Cluster-Setup-Link aktualisiert. – Markon

+0

Nachdem ich den Hadoop-Cluster eingerichtet habe, muss ich den namenode starten und spark verwendet ihn automatisch? – TrigonaMinima