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

Using Spark JobServer spark doesn't use the configured mysql connection on hive-site.xml

使用 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 db 与 read/save Hive metastore_db 建立任何连接,当然,它看不到默认 db 上的表。我在 $SPARK_HOME/jars 文件夹上有 mysql-connector-java-5.1.40-bin.jar。

如何连接到我的 MySQL 数据库中的 Hive metastore_db?

使用 Hive 上下文而不是基本上下文,因为我正在使用 java 我必须在上下文创建时使用 context-factory=spark.jobserver.context.JavaHiveContextFactory,并且我已经实现了一个 class,如下所示:

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 时,情况并非如此:-)