Настройка PolyBase для доступа к внешним данным в Hadoop
Область применения:SQL Server — только для Windows
Управляемый экземпляр Azure SQL
В этой статье описывается использование PolyBase в экземпляре SQL Server для запроса внешних данных в Hadoop.
Примечание.
Начиная с SQL Server 2022 (16.x), Hadoop больше не поддерживается в PolyBase.
Требования
- Если вы не установили PolyBase, см. раздел Установка PolyBase. Необходимые условия описываются в статье, посвященной установке.
- Начиная с SQL Server 2019 (15.x), необходимо также включить функцию PolyBase.
- PolyBase поддерживает два поставщика Hadoop — Hortonworks Data Platform (HDP) и Cloudera Distributed Hadoop (CDH). В новых выпусках Hadoop соблюдается шаблон "Основной номер версии.дополнительный номер версии.версия". Также поддерживаются все версии в рамках поддерживаемых основного и дополнительного выпусков. Сведения о поддерживаемых версиях Hortonworks Data Platform (HDP) и Cloudera Distributed Hadoop (CDH) см. в статье Настройка подключения PolyBase.
Примечание.
PolyBase поддерживает зоны шифрования Hadoop начиная с SQL Server 2016 SP1 CU7 и SQL Server 2017 CU3. Если вы используете масштабируемые группы PolyBase, все вычислительные узлы также должны находиться в сборке, которая включает в себя поддержку зон шифрования Hadoop.
Настройка подключения к Hadoop
Сначала необходимо настроить SQL Server PolyBase для использования определенного поставщика Hadoop.
Запустите sp_configure с 'hadoop connectivity' и задайте соответствующее значение для вашего поставщика. Чтобы найти значение для поставщика, см. Конфигурация подключения PolyBase.
-- Values map to various external data sources. -- Example: value 7 stands for Hortonworks HDP 2.1 to 2.6 on Linux, -- 2.1 to 2.3 on Windows Server, and Azure Blob Storage sp_configure @configname = 'hadoop connectivity', @configvalue = 7; GO RECONFIGURE GO
Перезапустите SQL Server с помощью services.msc. При перезапуске SQL Server следующие службы также будут перезапущены:
- Служба перемещения данных SQL Server PolyBase
- Движок SQL Server PolyBase
Включение вычислений с оптимизацией вниз
Чтобы улучшить производительность при выполнении запроса, активируйте вычисление pushdown для кластера Hadoop.
Найдите файл yarn-site.xml в каталоге установки SQL Server. Как правило, путь выглядит следующим образом:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\
Найдите аналогичный файл на компьютере с Hadoop в каталоге конфигурации. Открыв его, найдите и скопируйте значение ключа конфигурации yarn.application.classpath.
На компьютере SQL Server в файле yarn-site.xml найдите свойство yarn.application.classpath. Вставьте значение, скопированное на компьютере с Hadoop, в качестве значения элемента.
Для всех версий CDH 5.X необходимо добавить параметры конфигурации mapreduce.application.classpath либо в конец файла yarn-site.xml, либо в файл mapred-site.xml. HortonWorks содержит эти настройки в конфигурациях yarn.application.classpath. Примеры см. в статье Конфигурация PolyBase.
Внимание
Чтобы использовать функцию передачи вычислений в Hadoop, в целевом кластере Hadoop должны быть базовые компоненты HDFS, YARN и MapReduce с включенным сервером журнала заданий. PolyBase отправляет запрос на выполнение через MapReduce и получает статус выполнения с сервера истории заданий. Без любого из этих компонентов запрос завершится сбоем.
Настройка внешней таблицы
Чтобы запросить данные из источника данных Hadoop, необходимо определить внешнюю таблицу для использования в запросах Transact-SQL. Далее указаны шаги по настройке внешней таблицы.
Создайте в базе данных главный ключ, если его нет. Это необходимо для шифрования секрета учетных данных.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
Аргументы
PASSWORD ="пароль"
Пароль, который использовался при шифровке главного ключа базы данных. Аргумент password должен соответствовать требованиям политики паролей Windows на компьютере, где размещается экземпляр SQL Server.
Создайте учетные данные с ограниченной областью действия базы данных для кластеров Hadoop, защищенных с помощью Kerberos.
-- IDENTITY: the Kerberos user name. -- SECRET: the Kerberos password CREATE DATABASE SCOPED CREDENTIAL HadoopUser1 WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';
Создайте внешний источник данных с помощью инструкции CREATE EXTERNAL DATA SOURCE.
-- LOCATION (Required) : Hadoop Name Node IP address and port. -- RESOURCE MANAGER LOCATION (Optional): Hadoop Resource Manager location to enable pushdown computation. -- CREDENTIAL (Optional): the database scoped credential, created above. CREATE EXTERNAL DATA SOURCE MyHadoopCluster WITH ( TYPE = HADOOP, LOCATION ='hdfs://10.xxx.xx.xxx:xxxx', RESOURCE_MANAGER_LOCATION = '10.xxx.xx.xxx:xxxx', CREDENTIAL = HadoopUser1 );
Создайте формат внешнего файла с помощью инструкции CREATE EXTERNAL FILE FORMAT.
-- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT, RCFILE, ORC, PARQUET). CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR ='|', USE_TYPE_DEFAULT = TRUE))
Создайте внешнюю таблицу, указывающую на данные, хранящиеся в Hadoop, с помощью инструкции CREATE EXTERNAL TABLE. В этом примере внешние данные представляют собой данные датчика автомобиля.
-- LOCATION: path to file or directory that contains the data (relative to HDFS root). CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] ( [SensorKey] int NOT NULL, [CustomerKey] int NOT NULL, [GeographyKey] int NULL, [Speed] float NOT NULL, [YearMeasured] int NOT NULL ) WITH (LOCATION='/Demo/', DATA_SOURCE = MyHadoopCluster, FILE_FORMAT = TextFileFormat );
Создайте статистику для внешней таблицы.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
Запросы PolyBase
Есть три функции, которые выполняет PolyBase:
- Нерегламентированные запросы к внешним таблицам.
- импорт данных;
- экспорт данных.
Следующие запросы предоставляют пример с вымышленными данными датчика автомобиля.
Нерегламентированные запросы
Следующий нерегламентированный запрос объединяет реляционные данные с данными Hadoop. Он выбирает клиентов, которые ездят быстрее 35 миль/ч, объединяя структурированные данные клиента, хранящиеся в SQL Server, с данными автомобильного датчика, хранящимися в Hadoop.
SELECT DISTINCT Insured_Customers.FirstName,Insured_Customers.LastName,
Insured_Customers. YearlyIncome, CarSensor_Data.Speed
FROM Insured_Customers, CarSensor_Data
WHERE Insured_Customers.CustomerKey = CarSensor_Data.CustomerKey and CarSensor_Data.Speed > 35
ORDER BY CarSensor_Data.Speed DESC
OPTION (FORCE EXTERNALPUSHDOWN); -- or OPTION (DISABLE EXTERNALPUSHDOWN)
Импорт данных
Следующий запрос позволяет импортировать внешние данные в SQL Server. В этом примере импортируются данные быстрых водителей в SQL Server для выполнения углубленного анализа. Для повышения производительности в примере используется индекс columnstore.
SELECT DISTINCT
Insured_Customers.FirstName, Insured_Customers.LastName,
Insured_Customers.YearlyIncome, Insured_Customers.MaritalStatus
INTO Fast_Customers from Insured_Customers INNER JOIN
(
SELECT * FROM CarSensor_Data where Speed > 35
) AS SensorD
ON Insured_Customers.CustomerKey = SensorD.CustomerKey
ORDER BY YearlyIncome
CREATE CLUSTERED COLUMNSTORE INDEX CCI_FastCustomers ON Fast_Customers;
Экспорт данных
Следующий запрос позволяет экспортировать данные из SQL Server в Hadoop. Чтобы сделать это, необходимо сначала включить экспорт PolyBase. Затем создайте внешнюю целевую таблицу, прежде чем экспортировать в нее данные.
-- Enable INSERT into external table
sp_configure 'allow polybase export', 1;
reconfigure
-- Create an external table.
CREATE EXTERNAL TABLE [dbo].[FastCustomers2009] (
[FirstName] char(25) NOT NULL,
[LastName] char(25) NOT NULL,
[YearlyIncome] float NULL,
[MaritalStatus] char(1) NOT NULL
)
WITH (
LOCATION='/old_data/2009/customerdata',
DATA_SOURCE = HadoopHDP2,
FILE_FORMAT = TextFileFormat,
REJECT_TYPE = VALUE,
REJECT_VALUE = 0
);
-- Export data: Move old data to Hadoop while keeping it query-able via an external table.
INSERT INTO dbo.FastCustomer2009
SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2
ON (T1.CustomerKey = T2.CustomerKey)
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;
Просмотр объектов PolyBase в SSMS
В SSMS внешние таблицы отображаются в отдельной папке Внешние таблицы. Внешние источники данных и форматы внешних файлов находятся в папках, вложенных в папку Внешние ресурсы.
Следующие шаги
Дополнительные руководства по созданию внешних источников данных и внешних таблиц в различных источниках данных смотрите в справочнике по PolyBase Transact-SQL.
В следующих статьях приведены дополнительные сведения о способах использования и мониторинга PolyBase.