2016-12-01 55 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时并不如此:-)

相关问题