2016-12-01 8 views
0

Работа с Spark 2.0.2 У меня есть банка, которая отлично работает с spark-submit. Теперь я хочу использовать его с Spark JobServer.Использование Spark JobServer искры не использует настроенное соединение mysql на hive-site.xml

Первая проблема заключалась в том, что методы:

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); 
} 

У меня не установлен улей, я только с помощью HiveSupport, который приходит с искрой, и я поставил улей-site.xml под $ SPARK_HOME/конф и что работает с искрой -Отправить.

улья 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> 

Но когда я исполняю эту баночку, как работа с Спарк JobServer из этого конфигурационного файла только принимает hive.metastore.warehouse.dir. Не делает никакой связи с MySQL db для чтения/сохранения Hive metastore_db, и, конечно же, он не может видеть таблицы по умолчанию db. У меня есть mysql-connector-java-5.1.40-bin.jar в папке SPARK_HOME/jars.

Что я могу сделать, чтобы подключиться к Hive metastore_db, расположенному в моей базе данных MySQL?

+0

Вы хотите прочитать из локальной файловой системы или hdfs? Насколько я знаю, вам нужно написать 'файл: /// data/spark-warehouse /' для локальной файловой системы и 'hdfs: // host: port/data/spark-warehouse /' для hdfs. –

+0

@SimonSchiff Я хочу прочитать из локального файла, я беру ваше предложение и все еще терпеть неудачу. – Jose

ответ

0

Использование контекста улей вместо основного контекста, так как я с помощью 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, это было не так :-)