2016-12-01 94 views
0

使用Spark 2.0.2我有一個可以在spark-submit下正常工作的jar。現在我想從Spark JobServer中使用它。使用Spark JobServer spark不使用hive-site.xml上配置的mysql連接

的第一個問題是,這些方法:

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

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

有過時SparkContext代替SparkSession作爲參數。我的解決辦法是做到以下幾點:

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

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

我沒有安裝蜂巢,我只是用HiveSupport誰自帶Spark和我把蜂房的site.xml在$ SPARK_HOME/conf目錄和的工作有火花-提交。

蜂房的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> 

但是,當我執行這個罐子是從這個配置文件中的星火JobServer工作只需要在hive.metastore.warehouse.dir。不與MySQL數據庫建立任何連接來讀取/保存Hive metastore_db,當然,它不能在默認數據庫中看到表。我在$ SPARK_HOME/jars文件夾中有mysql-connector-java-5.1.40-bin.jar。

我能做些什麼才能連接到位於MySQL數據庫中的Hive metastore_db?

+0

你想從本地文件系統或hdfs中讀取嗎?據我所知,您必須爲本地文件系統編寫'file:/// data/spark-warehouse /',爲hdfs編寫'hdfs:// host:port/data/spark-warehouse /'。 –

+0

@SimonSchiff我想從本地文件中讀取,我已經採納了您的建議,但仍然失敗。 – Jose

回答

0

使用蜂巢語境,而不是基本的背景下,作爲我用java我必須對上下文創建使用context-factory=spark.jobserver.context.JavaHiveContextFactory和我實現了一個類像如下:

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; 
    } 

似乎很容易,但幾個月以前當我從Spark開始 - Spark Jobserver時並不如此:-)

相關問題