2016-12-01 1 views
0

Arbeiten mit Spark 2.0.2 Ich habe ein Glas, das mit Spark-submit funktioniert. Jetzt möchte ich es von Spark JobServer verwenden.Verwenden von Spark JobServer Spark verwendet nicht die konfigurierte mysql-Verbindung auf hive-site.xml

Das erste Problem war, dass die Methoden:

public SparkJobValidation validate(SparkContext sc, Config config) { 
    return SparkJobValid$.MODULE$; 
} 

@Override 
public Object runJob(SparkContext jsc, Config jobConfig) { 
//code 
} 

den veralteten SparkContext statt SparkSession als Parameter haben. Meine Lösung war Folgendes zu tun:

@Override 
public Object runJob(SparkContext jsc, Config jobConfig) { 
    SparkSession ss = SparkSession.builder() 
      .sparkContext(jsc) 
      .enableHiveSupport() 
      .getOrCreate(); 

return ss.table("purchases").showString(20, true); 
} 

Ich habe kein Hive installiert, ich bin mit HiveSupport nur die Spark kommt und ich legte den Stock-site.xml unter $ SPARK_HOME/conf und arbeitet mit Funken -einreichen.

hive-site.xml

<?xml version="1.0"?> 
     <configuration> 
     <property> 
      <name>javax.jdo.option.ConnectionURL</name> 
      <value>jdbc:mysql://localhost:3306/metastore_db?createDatabaseIfNotExist=true</value> 
      <description>JDBC connect string for a JDBC metastore</description> 
     </property> 

     <property> 
      <name>javax.jdo.option.ConnectionDriverName</name> 
      <value>com.mysql.jdbc.Driver</value> 
     <description>Driver class name for a JDBC metastore</description> 
    </property> 

    <property> 
     <name>javax.jdo.option.ConnectionUserName</name> 
     <value>user</value> 
     <description>username to use against metastore database</description> 
    </property> 

    <property> 
     <name>javax.jdo.option.ConnectionPassword</name> 
     <value>password</value> 
     <description>password to use against metastore database</description> 
    </property> 

    <property> 
     <name>hive.metastore.warehouse.dir</name> 
     <value>/spark-warehouse/</value> 
     <description>Warehouse Location</description> 
    </property> 
    </configuration> 

Aber wenn ich dieses Glas als Auftrag aus dem Spark-Jobserver aus dieser Konfigurationsdatei ausführen nimmt nur die hive.metastore.warehouse.dir. Keine Verbindung mit MySQL db zum Lesen/Speichern der Hive metastore_db, und natürlich kann es die Tabellen auf der Standard-db nicht sehen. Ich habe die mysql-connector-java-5.1.40-bin.jar im $ SPARK_HOME/jars Ordner.

Was kann ich tun, um eine Verbindung zum Hive metastore_db in meiner MySQL DB herzustellen?

+0

Willst du aus dem lokalen Dateisystem oder hdfs lesen? Soweit ich weiß, müssen Sie 'file: /// data/spark-warehouse /' für das lokale Dateisystem und 'hdfs: // host: port/data/spark-warehouse /' für hdfs schreiben. –

+0

@SimonSchiff Ich möchte von einer lokalen Datei lesen, ich nehme Ihren Vorschlag und scheitere immer noch. – Jose

Antwort

0

den Hive Kontext verwenden stattdessen die Grund Kontext, da ich java bin ich context-factory=spark.jobserver.context.JavaHiveContextFactory auf den Kontext Erstellung verwendet haben, und ich habe eine Klasse implementiert wie folgt:

public class My_SparkHIVEJob implements JHiveJob<String> { 


@Override 
    public String run(HiveContext c, JobEnvironment je, Config config) { 
     /* 
      JOB CODE... 
     */ 
    } 

    @Override 
    public Config verify(HiveContext c, JobEnvironment je, Config config) { 
     return config; 
    } 

Scheint ziemlich einfach, aber einige Monate Als ich mit Spark anfing - Spark Jobserver war es nicht so :-)

Verwandte Themen