使用Spark JobServer spark不会在hive-site.xml上使用已配置的mysql连接

时间:2016-12-01 14:12:27

标签: apache-spark hiveql spark-jobserver

使用Spark 2.0.2我有一个可以使用spark-submit工作的jar。现在我想从Spark JobServer中使用它。

第一个问题是方法:

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

我没有安装Hive,我只使用了Spark附带的HiveSupport,我将hive-site.xml放在$ SPARK_HOME / conf下,并且使用了spark-submit。

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

但是当我从此配置文件中从Spark JobServer执行此jar作为作业时,只需要 hive.metastore.warehouse.dir 。不与MySQL数据库建立任何连接以读取/保存Hive metastore_db,当然,它无法查看默认数据库中的表。我在$ SPARK_HOME / jars文件夹上有mysql-connector-java-5.1.40-bin.jar。

如何连接到MySQL数据库中的Hive metastore_db,我该怎么办?

1 个答案:

答案 0 :(得分:0)

使用Hive Context而不是基本上下文,因为我使用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时,它并非如此: - )