使用 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 一起使用。
蜂巢站点.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 建立任何连接来读取/保存 Hive metastore_db,当然,它看不到默认 db 上的表。我在 $SPARK_HOME/jars 文件夹中有 mysql-connector-java-5.1.40-bin.jar。
为了连接到位于我的 MySQL 数据库中的 Hive metastore_db,我该怎么做?