Доступ к неуправляемой (внешней) таблице Hive Azure Databricks через JDBC

Я использую Azure Databricks с Databricks Runtime 5.2 и Spark 2.4.0. Я настроил внешние таблицы Hive двумя разными способами: - Таблица Databricks Delta, в которой данные хранятся в Azure Data Lake Storage (ADLS) Gen 2, таблица была создана с использованием параметра местоположения, который указывает на подключенный каталог в ADLS Gen 2. - обычный DataFrame, сохраненный в виде таблицы в ADLS Gen 2, на этот раз не использующий монтирование, а вместо этого учетные данные OAuth2, которые я установил на уровне кластера с помощью spark.sparkContext.hadoopConfiguration

И точка подключения, и прямой доступ (hadoopConfiguration) были настроены с использованием учетных данных OAuth2 и субъекта-службы Azure AD, который имеет необходимые права доступа к Data Lake.

Обе таблицы правильно отображаются в пользовательском интерфейсе Databricks и могут быть запрошены.

Обе таблицы также видны в инструменте бизнес-аналитики (Looker), где я успешно настроил соединение JDBC с моим экземпляром Databricks. После этого начинаются отличия:

1) таблица, настроенная с использованием точки монтирования, не позволяет мне запускать операцию DESCRIBE в инструменте BI, не говоря уже о запросе. Все терпит неудачу с ошибкой "com.databricks.backend.daemon.data.common.InvalidMountException: Ошибка при использовании пути / mnt / xxx / yyy / zzz для разрешения пути '/ yyy / zzz' внутри монтирования в '/ mnt / xxx'. "

2) таблица, настроенная с использованием без точки монтирования, позволяет мне запустить операцию DESCRIBE, но запрос завершается с ошибкой «java.util.concurrent.ExecutionException: java.io.IOException: нет основной группы для UGI (базовый токен) (auth :ПРОСТО)".

Соединение JDBC и запросы от инструмента BI к управляемой таблице в Databricks работают нормально.

Насколько мне известно, нет ничего, что я мог бы настроить иначе при создании внешних таблиц, настройке точки подключения или учетных данных OAuth2. Мне кажется, что при использовании JDBC монтирование вообще не видно, поэтому запрос к базовому источнику данных (ADLS Gen 2) не может быть успешным. С другой стороны, второй сценарий (номер 2 выше) немного более загадочен и, на мой взгляд, кажется чем-то где-то под капотом, глубоко, и я понятия не имею, что с этим делать.

Еще одна особенность - это мое имя пользователя, которое отображается в сценарии 2. Я не знаю, откуда оно взялось, поскольку оно не используется при настройке доступа ADLS Gen 2 с использованием субъекта-службы.


person mikkark    schedule 07.03.2019    source источник
comment
вы нашли решение для этого? у меня такая же проблема   -  person chathux    schedule 23.03.2019
comment
У меня пока нет решения. Я пытаюсь попросить кого-нибудь из группы продуктов Microsoft поделиться некоторыми соображениями, и я сообщу о любых результатах здесь. Это очень важно и для нашего клиентского проекта. А пока я собирался опробовать последнюю версию кластера Databricks (5.3 Beta), чтобы увидеть, имеет ли это значение.   -  person mikkark    schedule 25.03.2019
comment
Пробовал с новым кластером 5.3 Beta, разницы нет, не работает.   -  person mikkark    schedule 25.03.2019
comment
Кстати, это работает из HDInsight. При настройке кластера HDInsight можно указать, что его основным хранилищем является ADLS Gen 2. Вы также указываете SP (= идентификатор), который будет использоваться для подключения к хранилищу. После этого любая внешняя таблица с данными в ADLS Gen 2 будет доступна через JDBC. Однако, поскольку HDInsight довольно дорогой, я бы оставил его только как второй вариант.   -  person mikkark    schedule 27.03.2019


Ответы (1)


У меня была аналогичная проблема, и я решил ее, добавив этот параметр в свой кластер Databricks:

spark.hadoop.hive.server2.enable.doAs false

См .: https://docs.databricks.com/user-guide/faq/access-blobstore-odbc.html

RB

person user11268793    schedule 27.03.2019
comment
Да, это ответ, который я получил от нашей службы поддержки Microsoft, у меня тоже это сработало :) - person mikkark; 28.03.2019
comment
Интересно, однако, что мне сказали, что ошибка «Нет основной группы ...» могла быть вызвана какой-то ошибкой (я предполагаю, что во время выполнения Databricks?), И эта ошибка была исправлена ​​в конце прошлого года. Кроме того, настройка сервера doAs Hive будет иметь лишь обходной путь, чтобы обойти эту ошибку, прежде чем она будет исправлена. Это не было моим опытом, так как мне также пришлось установить для этого параметра значение false, чтобы это работало. - person mikkark; 29.03.2019