Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w usłudze Hadoop
Dotyczy:programu SQL Server — tylko dla systemu Windows
Azure SQL Managed Instance
W tym artykule wyjaśniono, jak używać technologii PolyBase w wystąpieniu programu SQL Server do wykonywania zapytań dotyczących danych zewnętrznych w usłudze Hadoop.
Notatka
Począwszy od programu SQL Server 2022 (16.x), platforma Hadoop nie jest już obsługiwana w programie PolyBase.
Warunki wstępne
- Jeśli nie zainstalowano programu PolyBase, zobacz instalacja programu PolyBase. W artykule dotyczącym instalacji wyjaśniono wymagania wstępne.
- Począwszy od programu SQL Server 2019 (15.x), należy również włączyć funkcję PolyBase.
- Technologia PolyBase obsługuje dwóch dostawców usług Hadoop, Hortonworks Data Platform (HDP) i Cloudera Distributed Hadoop (CDH). Hadoop jest zgodny ze wzorcem "Major.Minor.Version" dla nowych wydań, a wszystkie wersje w obsługiwanym głównym i pomniejszym wydaniu są obsługiwane. Aby uzyskać informacje na temat obsługiwanych wersji platformy Hortonworks Data Platform (HDP) i rozproszonej platformy Hadoop w chmurze (CDH), zobacz PolyBase Connectivity Configuration.
Notatka
Technologia PolyBase obsługuje strefy szyfrowania Hadoop począwszy od programu SQL Server 2016 SP1 CU7 i programu SQL Server 2017 CU3. Jeśli używasz grup skalowanych w poziomie programu PolyBase, wszystkie węzły obliczeniowe muszą również znajdować się w kompilacji obejmującej obsługę stref szyfrowania hadoop.
Konfigurowanie łączności z usługą Hadoop
Najpierw skonfiguruj program SQL Server PolyBase do korzystania z określonego dostawcy usługi Hadoop.
Uruchom sp_configure z ustawieniem 'hadoop connectivity' i ustaw odpowiednią wartość dla swojego dostawcy. Aby znaleźć wartość dla swojego dostawcy, zobacz Konfiguracja łączności programu 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
Należy ponownie uruchomić program SQL Server przy użyciu services.msc. Ponowne uruchomienie programu SQL Server powoduje ponowne uruchomienie tych usług:
- Usługa przenoszenia danych programu SQL Server PolyBase
- Aparat programu SQL Server PolyBase
Włączanie obliczeń wypychanych
Aby zwiększyć wydajność zapytań, włącz obliczenia wypychane do klastra Hadoop:
Znajdź plik yarn-site.xml w ścieżce instalacji programu SQL Server. Zazwyczaj ścieżka to:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\
Na maszynie hadoop znajdź analogiczny plik w katalogu konfiguracji usługi Hadoop. W pliku znajdź i skopiuj wartość klucza konfiguracji yarn.application.classpath.
Na serwerze SQL Server, w pliku yarn-site.xml znajdź właściwość yarn.application.classpath. Wklej wartość z maszyny hadoop do elementu value.
W przypadku wszystkich wersji CDH 5.X należy dodać parametry konfiguracji mapreduce.application.classpath na końcu pliku yarn-site.xml lub do pliku mapred-site.xml. HortonWorks obejmuje te konfiguracje w ustawieniach yarn.application.classpath. Zobacz konfigurację programu PolyBase dla przykładów.
Ważny
Aby korzystać z funkcji wypychania obliczeń w usłudze Hadoop, docelowy klaster Hadoop musi mieć podstawowe składniki systemu plików HDFS, YARN i MapReduce z włączonym serwerem historii zadań. Program PolyBase przesyła zapytanie wypychane za pośrednictwem usługi MapReduce i pobiera stan z serwera historii zadań. Bez któregokolwiek składnika zapytanie kończy się niepowodzeniem.
Konfigurowanie tabeli zewnętrznej
Aby wykonać zapytanie dotyczące danych w źródle danych usługi Hadoop, należy zdefiniować tabelę zewnętrzną do użycia w zapytaniach Transact-SQL. W poniższych krokach opisano sposób konfigurowania tabeli zewnętrznej.
Utwórz klucz główny w bazie danych, jeśli jeszcze nie istnieje. To jest wymagane do zaszyfrowania tajnego hasła poświadczeń.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
Argumenty
HASŁO ='password'
To hasło używane do szyfrowania klucza głównego w bazie danych. hasło musi spełniać wymagania zasad haseł systemu Windows komputera hostujące wystąpienie programu SQL Server.
Utwórz poświadczenie o zakresie bazy danych dla klastrów Hadoop zabezpieczonych przy użyciu protokołu Kerberos.
-- IDENTITY: the Kerberos user name. -- SECRET: the Kerberos password CREATE DATABASE SCOPED CREDENTIAL HadoopUser1 WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';
Utwórz zewnętrzne źródło danych za pomocą 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 );
Utwórz format pliku zewnętrznego za pomocą 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))
Utwórz tabelę zewnętrzną wskazującą dane przechowywane w usłudze Hadoop za pomocą CREATE EXTERNAL TABLE. W tym przykładzie dane zewnętrzne zawierają dane czujnika samochodu.
-- 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 );
Utwórz statystyki dotyczące tabeli zewnętrznej.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
Zapytania programu PolyBase
Istnieją trzy funkcje, dla których technologia PolyBase jest odpowiednia:
- Zapytania ad hoc względem tabel zewnętrznych.
- Importowanie danych.
- Eksportowanie danych.
Poniższe zapytania zawierają przykład fikcyjnych danych z czujników samochodów.
Zapytania ad hoc
Następujące zapytanie ad hoc łączy dane relacyjne z danymi Hadoop. Wybiera klientów, którzy jeżdżą szybciej niż 35 mph, łącząc ustrukturyzowane dane klientów przechowywane w programie SQL Server z danymi czujnika samochodu przechowywanymi w usłudze 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)
Importowanie danych
Poniższe zapytanie importuje dane zewnętrzne do programu SQL Server. W tym przykładzie importuje dane dla szybkich sterowników do programu SQL Server w celu przeprowadzenia bardziej szczegółowej analizy. Aby zwiększyć wydajność, w przykładzie użyto indeksu kolumnowego.
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;
Eksportowanie danych
Poniższe zapytanie eksportuje dane z programu SQL Server do usługi Hadoop. W tym celu należy najpierw włączyć eksportowanie technologii PolyBase. Następnie utwórz tabelę zewnętrzną dla miejsca docelowego przed wyeksportowaniem do niej danych.
-- 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;
Wyświetlanie obiektów PolyBase w programie SSMS
W programie SSMS tabele zewnętrzne są wyświetlane w osobnym folderze Tabele zewnętrzne. Zewnętrzne źródła danych i zewnętrzne formaty plików znajdują się w podfolderach w Zasoby Zewnętrzne.
Następne kroki
Aby uzyskać więcej samouczków dotyczących tworzenia zewnętrznych źródeł danych i tabel zewnętrznych w różnych źródłach danych, zobacz dokumentację referencyjną PolyBase Transact-SQL.
Zapoznaj się z dodatkowymi sposobami używania i monitorowania technologii PolyBase w następujących artykułach: