2016-09-27 10 views
10

Мы пытаемся использовать ThriftServer для запроса данных из искровых темповых таблиц в искровом 2.0.0.Избегайте запуска HiveThriftServer2 с созданным контекстом программно

Во-первых, мы создали sparkSession с поддержкой поддержки Hive. В настоящее время мы начинаем ThriftServer с sqlContext так:

HiveThriftServer2.startWithContext(spark.sqlContext()); 

У нас есть искровой поток с зарегистрированной временной таблицы «spark_temp_table»:

StreamingQuery streamingQuery = streamedData.writeStream() 
              .format("memory") 
              .queryName("spark_temp_table") 
              .start(); 

С Билайна мы можем видеть временные таблицы (работает SHOW TABLES);

Когда мы хотим запустить вторую работу (со второй вспышкой) с таким подходом, нам нужно запустить второй ThriftServer с другим портом.

У меня есть два вопроса:

  1. Есть ли способ, чтобы иметь один ThriftServer по одному порту, с доступом ко всем таблицам температурных в другой sparkSessions?

  2. HiveThriftServer2.startWithContext(spark.sqlContext()); аннотируется @DeveloperApi. Есть ли способ начать бережливый сервер с контекстом не в коде программно?
    Я видел, что конфигурация --conf spark.sql.hive.thriftServer.singleSession=true передана ThriftServer при запуске (sbin/start-thriftserver.sh), но я не понимаю, как определить это для задания. Я попытался установить это свойство конфигурации в конструкторе sparkSession, но beeline не отображал временные таблицы.

+2

Прежде чем ответить на ваш вопрос, я буду задавать вопрос :) действительно ли вы должны начать 'ThriftServer'«программно»? – user1314742

+0

@ user1314742 Нет, нам не нужно (и не хочу - старайтесь избегать «HiveThriftServer2.startWithContext (spark.sqlContext());'). мы на самом деле пытались запустить 'sbin/start-thriftserver.sh' с одной сессией, но без везения. В основном нам нужно получить доступ к таблицам «temp» через искровой JDBC-сервер и запросить таблицы «temp» (из разных приложений с подключением «JDBC») – VladoDemcak

+0

Возможно ли увидеть временные таблицы, когда мы используем 'master local' вообще ? – VladoDemcak

ответ

5

Есть ли способ, чтобы иметь один ThriftServer по одному порту, с доступом ко всем таблицам температурных в другой sparkSessions?

Номер ThriftServer использует определенные сеансовые и временные таблицы, к которым можно получить доступ только в течение этого сеанса. Вот почему:

beeline не отображал временные таблицы.

при запуске независимого сервера с sbin/start-thriftserver.sh.

spark.sql.hive.thriftServer.singleSession не означает, что вы получаете один сеанс для нескольких серверов. Он использует один и тот же сеанс для всех подключений к одному серверу Thrift . Возможный прецедент:

  • вы начинаете бережливый сервер.
  • client1 подключается к этому серверу и создает временную таблицу foo.
  • client2 подключается к этому серверу и читает foo
+0

Спасибо за ваш ответ, гораздо понятнее, я действительно ценю это! У меня есть еще один вопрос. Предположим, я хочу, чтобы 'client1' был как * искровым потоковым заданием *. Возможно ли получить «сеанс triftserver» или как я могу «подключиться» к потоковой работе для запуска бережливого сервера, начатого с 'sbin/start-thriftserver.sh'? – VladoDemcak

+0

Я не думаю, что это возможно, но я могу ошибаться. –

+0

@ VladoDemcak вы нашли какой-либо другой способ, чем запуск программы HiveThriftServer2? У меня очень похожий случай использования и, может быть, я просто собираю неправильный инструмент здесь. – Roman