0

Ich habe folgende Scala-Programm in Eclipse zum Lesen einer CSV-Datei von einem Speicherort in HDFS geschrieben und dann diese Daten in eine Hive-Tabelle [Ich verwende HDP2.4 Sandbox läuft auf meinem VMWare vorhanden auf meinem lokalen Rechner]:Hive Tabelle Erstellung in HDP mit Apache Spark Job

import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.apache.spark.sql.SQLContext 
import org.apache.spark.sql.hive.HiveContext 

object HDFS2HiveFileRead { 
    def main(args:Array[String]){ 
    val conf = new SparkConf() 
        .setAppName("HDFS2HiveFileRead") 
        .setMaster("local") 

    val sc = new SparkContext(conf) 

    val hiveContext = new HiveContext(sc) 

    println("loading data") 
    val loadDF = hiveContext.read 
          .format("com.databricks.spark.csv") 
          .option("header","true") 
          .option("delimiter",",") 
          .load("hdfs://192.168.159.129:8020/employee.csv") 
    println("data loaded") 
    loadDF.printSchema() 

    println("creating table") 
    loadDF.write.saveAsTable("%s.%s".format("default" , "tblEmployee2")) 
    println("table created") 

    val selectQuery = "SELECT * FROM default.tblEmployee2" 

    println("selecting data") 
    val result = hiveContext.sql(selectQuery) 

    result.show()}} 

Wenn ich dieses Programm von meiner Eclipse-laufen; mit

Run As -> Scala Anwendung

Option: Es zeigt mir folgende Ergebnisse auf Eclipse-Konsole:

Laden von Daten

Daten geladen

Wurzel

0 | - empid: string (nullable = true)

| - empname: string (nullable = true)

| - empage: string (nullable = true)

Tabelle erstellen

17/06/29 13:27:08 INFO CatalystWriteSupport: Initialized Parkett WriteSupport mit Katalysator Schema: { "type": "Struktur", "Felder": [{ "name": "empid", "type": "string", "Nullwert": true, "Metadaten": {}}, { "name": "empname", "type": "string", "nullable": true, "Metadaten": {}}, { "name": "empage", "type": "string", "nullable": true, "metadata": {}}]} und der entsprechende Parkett Nachrichtentyp: message spark_schema {optional binary empid (UTF8); optional binärer empname (UTF8); optionales binäres Modul (UTF8); }

Tabelle erstellt

Auswahldaten

+ ----- + -------- + ------ +

| empid | empname | empage |

+ ----- + -------- + ------ +

| 1201 | sättigen | 25 |

| 1202 | krishna | 28 |

| 1203 | amith | 39 |

| 1204 | javiert | 23 |

| 1205 | prudvi | 23 |

+ ----- + -------- + ------ +

17/06/29 13:27:14 ERROR ShutdownHookManager: Ausnahme beim Spark-Temp Löschen dir: C: \ Benutzer \ cb \ AppData \ Lokale \ Temp \ spark-c65aa16b-6448-434f-89dc-c318f0797e10 java.io.IOException: Fehler löschen: C: \ Benutzer \ cb \ AppData \ Local \ Temp \ funken c65aa16b-6448-434f-89dc-c318f0797e10

Dies zeigt, dass CSV-Daten vom gewünschten HDFS Speicherort geladen worden ist [in HDP vorhanden] und eine Tabelle mit dem Namen tblEmployee2 wurde ebenfalls in der Hive erstellt, da ich die Ergebnisse in der Konsole lesen und sehen konnte. Ich konnte diese Tabelle sogar wieder und wieder lesen, indem ich irgendeinen Funkenjob lies, um Daten von dieser Tabelle zu lesen

ABER, das Problem ist, sobald ich zu meinem HDP2.4 durch Kitty gehe und versuche, diese Tabelle im Bienenstock zu sehen ,

1) Ich konnte diese Tabelle dort nicht sehen.

2) Ich denke, dass dieser Code eine verwaltete/interne Tabelle in Hive erstellen wird. Daher sollte die CSV-Datei, die an einem bestimmten Ort in HDFS vorhanden ist, auch vom Basisstandort in den Hive-Metastore verschoben werden.

3) Ich könnte auch metastore_db Ordner in meinem Eclipse erstellt sehen, bedeutet dies, dass diese tblEmployee2 in meinem lokalen/Windows-Rechner erstellt wird?

4) Wie kann ich dieses Problem beheben und meinen Code bitten, eine Hive-Tabelle in hdp zu erstellen? Gibt es irgendeine Konfiguration, die mir hier fehlt?

5) Warum erhalte ich den letzten Fehler in meiner Ausführung? Jede schnelle Antwort/Zeiger würde geschätzt werden.

UPDATE Nach viel zu denken, wenn ich hiveContext.setConf("hive.metastore.uris","thrift://192.168.159.129:9083")

hinzugefügt bewegt-Code ein wenig, aber mit einigen Fragen im Zusammenhang Erlaubnis gestartet erscheinen. Ich konnte nun diese Tabelle sehen [tblEmployee2] in meinem Bienenstock Standard-Datenbank in meinem VMWare, aber es tut, mit SparkSQL von selbst:

17/06/29 22:43:21 WARN HiveContext$$anon$2: Could not persist `default`.`tblEmployee2` in a Hive compatible way. Persisting it into Hive metastore in Spark SQL specific format. 

Daher ist ich noch verwenden HiveContext nicht in der Lage, und meine oben genannten Probleme 2-5 besteht immer noch.

Grüße, Bhupesh

Antwort

0

Sie die Funken im lokalen Modus ausgeführt wird.

Wenn Sie im lokalen Modus saveAsTable angeben, wird versucht, die Tabelle auf dem lokalen Computer zu erstellen. Ändern Sie Ihre Konfiguration so, dass sie im Garnmodus ausgeführt wird.

können Sie auf die unten URL verweisen, für Details: http://www.coding-daddy.xyz/node/7

+0

Vielen Dank für Ihre Antwort @Lakshman Battini aber das sage ich meine Funken nur gefragt auf lokalen Modus ausgeführt werden. Ich konnte jetzt bemerken, dass ich die Bereitstellung von ip und Port des Hive-Spar-Servers vermisst habe. Was, wenn ich in meinem Code aktualisiert habe, begann es zu einem gewissen Grad zu arbeiten, aber ich begann, Erlaubnis Probleme danach zu bekommen. Ich aktualisiere/bearbeite meine Frage mit meinen letzten Änderungen. –

Verwandte Themen