Spark 2.0.2の使用spark-submitで正常に動作するjarファイルがあります。今はSpark JobServerから使いたいと思っています。Spark JobServer sparkを使用すると、hive-site.xmlに設定されたmysql接続が使用されません。
public SparkJobValidation validate(SparkContext sc, Config config) {
return SparkJobValid$.MODULE$;
}
@Override
public Object runJob(SparkContext jsc, Config jobConfig) {
//code
}
パラメータとしてSparkSession代わりに非推奨SparkContextを持っている:。
最初の問題は、方法があることでした私のソリューションは、次の操作を行うことだった。
@Override
public Object runJob(SparkContext jsc, Config jobConfig) {
SparkSession ss = SparkSession.builder()
.sparkContext(jsc)
.enableHiveSupport()
.getOrCreate();
return ss.table("purchases").showString(20, true);
}
私はハイブは、私はちょうどスパークが付属していますHiveSupportを使用していますインストールされていないと私は$ SPARK_HOME/confの下のハイブ-site.xmlのを入れて、それがスパークして働いている必要があり - 提出する。
ハイブ-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>
しかし、私は、この設定ファイルからスパークジョブサーバからジョブとしてこのjarファイルを実行したときにのみhive.metastore.warehouse.dirをとります。 Hive metastore_dbを読み書きするためにMySQLデータベースと接続することはありません。もちろん、デフォルトのdbのテーブルは表示されません。 $ SPARK_HOME/jarsフォルダにmysql-connector-java-5.1.40-bin.jarがあります。
私のMySQL DBにあるHive metastore_dbに接続するにはどうすればよいですか?
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;
}
はとても簡単に思えますが、いくつかのヶ月:私は、コンテキストの作成にcontext-factory=spark.jobserver.context.JavaHiveContextFactory
を使用する必要がJavaを使用していますし、次のように私はクラスを実装しているとして、代わりに基本的なコンテキストをハイブコンテキストを使用して
ローカルファイルシステムまたはhdfsから読み込みますか?私の知る限り、ローカルファイルシステムには 'file:/// data/spark-warehouse /'、hdfsには 'hdfs:// host:port/data/spark-warehouse /'と書かなければなりません。 –
@SimonSchiffローカルファイルから読みたい、私はあなたの提案を取って、まだ失敗しています。 – Jose