2016-09-30 5 views
0

Ich möchte eine Hive-Tabelle durch Sparksql fallen lassen.sparksql Drop Hive-Tabelle

In einem Cluster mit Hadoop 2.6, Hive 2.0, Spark 1.6 und Funke 2.0 installiert. Ich habe den folgenden Code in pyspark shell und spark-submit-Job mit beiden Versionen versucht.

sqlContext.sql('drop table test') //spark 1.6 
spark.sql('drop table test')  //spark 2.0 

Beiden Code funktionieren gut in pyspak-Schale, kann ich aus dem Bienenstock cli sehen, dass die Test Tabelle nicht mehr existieren.

Wenn der Code jedoch in einer Python-Datei enthalten war und später mithilfe von Spark-submit dem Cluster übergeben wurde, wurde der Code nie wirksam.

Funke 2.0 gab sogar Fehler zu

pyspark.sql.utils.AnalysisException: u"Table to drop '`try`' does not exist;" 

I hive-site.xml in das Verzeichnis conf in Funken kopiert haben.

Was wäre der richtige Weg, um eine Hive-Tabelle durch sparksql fallen zu lassen?

Update:

Ich habe versucht, verglich die Funken Umgebung zwischen dem Funkenschale und der Arbeit, die ich

spark-submit --master yarn --deploy-mode cluster try_spark_sql.py 

In der Funken Shell-Umgebung mit dem folgenden Code submiited, kann ich Funken sehen. sql.catalogImplementation ist auf Bienenstock

IN den Auftrag mit dem obigen Code eingereicht festgelegt. Die Umgebung enthält keine spark.sql.catalogImplementation Ich versuchte es Einstellung mit dem folgenden Code:

spark = SparkSession.builder.appName("PythonSQL").config("spark.sql.catalogImplementation","hive"). 

Aber es hat keine Auswirkungen auf die Umwelt.

Eine Abhilfe Ich fand einreicht den Job Client Modus statt Cluster mit Modus. Dann kann die Hive-Tabelle erfolgreich gelöscht werden.

+0

Frage, verwenden Sie sqlContext-Kontext in Ihrem Spark-Submit-Skript? –

+0

natürlich habe ich diesen Teil des Codes nicht hinzugefügt. Der Befehl sparkcontx wird wie üblich initialisiert und mit sqllContxt.sql kann erfolgreich aus der .orc-Datei gelesen werden. –

Antwort

1

Wenn Sie PySpark-Shell verwenden, hat Spark eingebaute Hive-Unterstützung, die Standard-SQLContext-Implementierung (die als sqlContext verfügbare) ist HiveContext.

In Ihrer Anwendung, wenn Sie einfachen SQLContext verwenden, der keine Hive-Funktionen bietet.

Bitte tun Sie wie folgt, es sollte funktionieren.

from pyspark.sql import HiveContext 
sqlContext = HiveContext(sc) 
sqlContext.sql('drop table test') 
+0

Sorry für die späte Antwort, da ich im Urlaub war. Ich überprüfte meinen Code und fand 'sqlContext = HiveContext (sc)' bereits dort, obwohl ich 'frompyspark.sql import HiveContext' nicht hatte. Nach dem Hinzufügen der Codezeile beschweren sich funke noch 'pyspark.sql.utils.AnalysisException: u "Table to drop '' try'' existiert nicht; "'. Vielleicht liegt es daran, dass der Cluster mit Spark 2.0 konfiguriert wurde. –

+0

Aber ich habe eine Waffe gefunden, die jetzt funktioniert. Übergeben Sie den Job mit '--mode client' anstelle von '--mode cluster' kann die Tabelle erfolgreich gelöscht werden. –