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