Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server в Windows
Управляемый экземпляр SQL Azure
В этой статье объясняется, как использовать PolyBase на экземпляре SQL Server для запроса внешних данных в Hadoop.
Примечание.
Начиная с SQL Server 2022 (16.x), Hadoop больше не поддерживается в PolyBase.
Требования
- Если PolyBase не установлен, см. раздел «Установить PolyBase на Windows». Необходимые условия описываются в статье, посвященной установке.
- Начиная с SQL Server 2019 (15.x), необходимо также включить функцию PolyBase.
- PolyBase поддерживает два поставщика Hadoop — Hortonworks Data Platform (HDP) и Cloudera Distributed Hadoop (CDH). Hadoop использует схему «Major.Minor.Version» для своих новых релизов, и поддерживаются все версии, входящие в поддерживаемые крупные и минорные версии. Для получения информации о поддерживаемых версиях 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 EXECUTE 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, целевой кластер Hadoop должен включать основные компоненты HDFS, YARN и MapReduce, при этом сервер истории заданий должен быть включен. PolyBase отправляет запрос на выполнение через MapReduce и получает статус выполнения с сервера истории заданий. Без любого из этих компонентов запрос завершится сбоем.
Настройка внешней таблицы
Чтобы запросить данные из источника данных Hadoop, необходимо определить внешнюю таблицу для использования в запросах Transact-SQL. Далее указаны шаги по настройке внешней таблицы.
Создайте мастер-ключ в базе данных, если он ещё не существует. Вам нужен этот ключ для шифрования секрета учетных данных.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';PASSWORD = <пароль>
Пароль, который используется при шифровании главного ключа в базе данных. Пароль должен соответствовать требованиям политики паролей Windows компьютера, на котором размещается экземпляр SQL Server.
Создайте учетные данные с ограниченной областью действия базы данных для кластеров Hadoop, защищенных с помощью Kerberos.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1 WITH IDENTITY = '<kerberos_user_name>', SECRET = '<kerberos_password>';Создайте внешний источник данных с помощью CREATE EXTERNAL DATA SOURCE.
-
LOCATION(Обязательно): IP-адрес и порт узла NameNode Hadoop. -
RESOURCE_MANAGER_LOCATION(Необязательно): местоположение диспетчера ресурсов Hadoop для включения pushdown-вычислений. -
CREDENTIAL(Необязательно): Учетные данные области базы данных, созданные ранее.
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: Тип формата в 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: Путь к файлу или каталогу, содержащему данные (относительно корня HDFS).
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 ( DATA_SOURCE = MyHadoopCluster, LOCATION = '/Demo/', FILE_FORMAT = TextFileFormat );-
Создайте статистику для внешней таблицы.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
Запросы PolyBase
PolyBase подходит для следующих сценариев:
- Нерегламентированные запросы к внешним таблицам.
- импорт данных;
- экспорт данных.
Следующие запросы приводят пример с вымышленными автомобильными сенсорными данными.
Нерегламентированные запросы
Следующий ad hoc запрос объединяет реляционные данные с данными 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
EXECUTE 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 (
DATA_SOURCE = HadoopHDP2,
LOCATION = '/old_data/2009/customerdata',
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 AS T1
INNER JOIN CarSensor_Data AS T2
ON (T1.CustomerKey = T2.CustomerKey)
WHERE T2.YearMeasured = 2009
AND T2.Speed > 40;
Просмотр объектов PolyBase в SSMS
В SSMS внешние таблицы отображаются в отдельной папке Внешние таблицы. Внешние источники данных и форматы внешних файлов находятся в папках, вложенных в папку Внешние ресурсы.