使用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,我该怎么办?
答案 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时,它并非如此: - )