Создание внешней таблицы в кирпичах данных Azure - PullRequest
2 голосов
/ 27 июня 2019

Я новичок в лазурных блоках данных и пытаюсь создать внешнюю таблицу, указывающую на местоположение Gen-2 хранилища озера данных Azure (ADLS).

В записной книжке блоков данных я попытался настроить конфигурацию искры для ADLSдоступ.Тем не менее, я не могу выполнить созданный DDL.

Примечание : Одно из решений, которое мне подходит, - это подключение учетной записи ADLS к кластеру, а затем использование местоположения подключения в DDL внешней таблицы.Но мне нужно было проверить, возможно ли создать внешнюю таблицу DDL с путем ADLS без места монтирования.

# Using Principal credentials
spark.conf.set("dfs.azure.account.auth.type", "OAuth")
spark.conf.set("dfs.azure.account.oauth.provider.type", "ClientCredential")
spark.conf.set("dfs.azure.account.oauth2.client.id", "client_id")
spark.conf.set("dfs.azure.account.oauth2.client.secret", "client_secret")
spark.conf.set("dfs.azure.account.oauth2.client.endpoint", 
"https://login.microsoftonline.com/tenant_id/oauth2/token")

DDL

create external table test(
id string,
name string
)
partitioned by (pt_batch_id bigint, pt_file_id integer)
STORED as parquet
location 'abfss://container@account_name.dfs.core.windows.net/dev/data/employee

Получено сообщение об ошибке

Error in SQL statement: AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Got exception: shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.contracts.exceptions.ConfigurationPropertyNotFoundException Configuration property account_name.dfs.core.windows.net not found.);

Мне нужна помощь, чтобы узнать, можно ли напрямую ссылаться на местоположение ADLS в DDL?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

В некотором роде, если вы можете использовать Python (или Scala).

Начните с установления соединения:

TenantID = "blah"

def connectLake():
  spark.conf.set("fs.azure.account.auth.type", "OAuth")
  spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
  spark.conf.set("fs.azure.account.oauth2.client.id", dbutils.secrets.get(scope = "LIQUIX", key = "lake-sp"))
  spark.conf.set("fs.azure.account.oauth2.client.secret", dbutils.secrets.get(scope = "LIQUIX", key = "lake-key"))
  spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/"+TenantID+"/oauth2/token")

connectLake()
lakePath = "abfss://liquix@mystorageaccount.dfs.core.windows.net/"

Используя Python, вы можете зарегистрировать таблицу, используя:

spark.sql("CREATE TABLE DimDate USING PARQUET LOCATION '"+lakePath+"/PRESENTED/DIMDATE/V1'")

Теперь вы можете запросить эту таблицу, если вы выполнили функцию connectLake (), что хорошо в вашей текущей сессии / записной книжке.

Проблема теперь в том, что если приходит новый сеанс и они пытаются выбрать * из этой таблицы, произойдет сбой, если они сначала не запустят функцию connectLake (). Обойти это ограничение невозможно, так как для доступа к озеру необходимо подтвердить полномочия.

Возможно, вы захотите рассмотреть возможность прохода через ADLS Gen2: https://docs.azuredatabricks.net/spark/latest/data-sources/azure/adls-passthrough.html

Обратите внимание, что для этого необходимо использовать кластер с высоким параллелизмом.

2 голосов
/ 01 июля 2019

Вы можете выполнить эту операцию после подтверждения хранилища озера данных Azure.

Необходимо создать точку монтирования, используя метод, описанный ниже, если вы хотите, чтобы все пользователи в рабочей области Databricks имели доступ ксмонтированная учетная запись Azure Data Lake Storage Gen2.Клиенту службы, который вы используете для доступа к учетной записи Azure Data Lake Storage Gen2, должен быть предоставлен доступ только к этой учетной записи Azure Data Lake Storage Gen2;ему не следует предоставлять доступ к другим ресурсам в Azure.

После создания точки подключения через кластер пользователи этого кластера могут сразу получить доступ к точке подключения.Чтобы использовать точку монтирования в другом работающем кластере, пользователи должны запустить dbutils.fs.refreshMounts () в этом работающем кластере, чтобы сделать вновь созданную точку монтирования доступной для использования.

Существует три основных способа доступа к данным Azure.Lake Storage Gen2 из кластера Databricks:

  1. Монтирование файловой системы Azure Data Lake Gen2 в DBFS с использованием субъекта службы с делегированными разрешениями и OAuth 2.0.
  2. Использование субъекта службы напрямую.
  3. Непосредственное использование ключа доступа к учетной записи хранилища озера данных Azure Gen2.

Для получения дополнительной информации см. « Хранилище озера данных Azure Gen2 ».

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...