2017-12-02 3 views
0

Ich habe ein einfaches Programm geschrieben, um die Aufträge und Order_items Dateien, die in HDFS sind, zu verbinden.Zugriff auf HDFS durch Spark-Scala Programm

My-Code, die Daten zu lesen:

val orders = sc.textFile ("hdfs://quickstart.cloudera:8022/user/root/retail_db/orders/part-00000") 
val orderItems = sc.textFile ("hdfs://quickstart.cloudera:8022/user/root/retail_db/order_items/part-00000") 

ich die unten Ausnahme bekam:

**Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://quickstart.cloudera:8020/user/root/retail_db, expected: file:///** 

Können Sie mir hier das Problem wissen, lassen Sie es? Vielen Dank!!

+0

verwenden erwartet sie Speicherort der Datei, aber Sie haben den Dateipfad von URL zur Verfügung gestellt glaube, ich –

+0

Sie Funken im lokalen Modus laufen? – Afaq

+0

ja Afaq, ich bin im lokalen Modus Funke laufen. – skg

Antwort

2

Sie sind zur Zeit die Cloudera Quickstart VM, die höchstwahrscheinlich bedeutet, dass Sie laufen Spark-1.6 wie die Pakete sind, die direkt von Cloudera Manager installiert werden kann und die Standardversion für CDH 5.x

Wenn das Ist dies der Fall, zeigt Spark on Yarn standardmäßig HDFS an, sodass Sie hdfs nicht angeben müssen.

einfach dies zu tun:

val orderItems = sc.textFile ("/user/cloudera/retail_db/order_items/part-00000") 

Hinweis änderte ich auch/user/cloudera. Stellen Sie sicher, dass Ihr aktueller Benutzer über Berechtigungen verfügt.

Die hdfs: // ist nur, wenn Sie Funkenstandalone

+0

@ xmorera Ich kann den Code mit ** val orders = sc.textFile ("hdfs: //quickstart.cloudera: 8022/benutzer/root/retail_db/orders/part-00000") ** im Terminal ausführen. Aber es funktioniert nicht durch Intellij. Gibt es etwas, das entfernt/hinzugefügt werden muss, wenn ich durch Intellij laufe? – skg

+0

Erstellen Sie den Kontext? Wenn Sie das Terminal öffnen, wird der Kontext für Sie erstellt, aber außerhalb der Shell müssen Sie die Initialisierung selbst vornehmen. – xmorera

Verwandte Themen