PolyBase configureren voor toegang tot externe gegevens in Hadoop
van toepassing op:SQL Server- - alleen Windows
Azure SQL Managed Instance
In het artikel wordt uitgelegd hoe u PolyBase op een SQL Server-exemplaar gebruikt om een query uit te voeren op externe gegevens in Hadoop.
Notitie
Vanaf SQL Server 2022 (16.x) wordt Hadoop niet meer ondersteund in PolyBase.
Voorwaarden
- Als u PolyBase nog niet hebt geïnstalleerd, raadpleegt u PolyBase-installatie. In het installatieartikel worden de vereisten uitgelegd.
- Vanaf SQL Server 2019 (15.x) moet u ook de PolyBase-functie inschakelen.
- PolyBase ondersteunt twee Hadoop-providers, Hortonworks Data Platform (HDP) en Cloudera Distributed Hadoop (CDH). Hadoop volgt het patroon Major.Minor.Version voor de nieuwe releases en alle versies binnen een ondersteunde Major- en Minor-release worden ondersteund. Zie PolyBase Connectivity Configurationvoor informatie over ondersteunde VERSIES van Hortonworks Data Platform (HDP) en Cloudera Distributed Hadoop (CDH).
Notitie
PolyBase ondersteunt Hadoop-versleutelingszones vanaf SQL Server 2016 SP1 CU7 en SQL Server 2017 CU3. Als u uitschaalgroepen van PolyBase gebruikt, moeten alle rekenknooppunten zich ook in een build bevinden met ondersteuning voor Hadoop-versleutelingszones.
Hadoop-connectiviteit configureren
Configureer eerst SQL Server PolyBase om uw specifieke Hadoop-provider te gebruiken.
Voer sp_configure uit met 'hadoop-connectiviteit' en stel een geschikte waarde in voor uw provider. Zie PolyBase-connectiviteitsconfiguratieom de waarde voor uw provider te vinden.
-- 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
U moet SQL Server opnieuw starten met behulp van services.msc. Als u SQL Server opnieuw start, worden deze services opnieuw opgestart:
- SQL Server PolyBase Data Movement Service
- SQL Server PolyBase Engine
Pushdownberekening inschakelen
Als u de queryprestaties wilt verbeteren, schakelt u pushdownberekeningen in voor uw Hadoop-cluster:
Zoek het bestand yarn-site.xml in het installatiepad van SQL Server. Normaal gesproken is het pad:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\
Zoek op de Hadoop-machine het analoge bestand in de Hadoop-configuratiemap. Zoek en kopieer in het bestand de waarde van de configuratiesleutel yarn.application.classpath.
Zoek op de SQL Server-machine in het bestand yarn-site.xml de eigenschap yarn.application.classpath. Plak de waarde van de Hadoop-machine in het waardeelement.
Voor alle CDH 5.X-versies moet u de configuratieparameters mapreduce.application.classpath toevoegen aan het einde van uw yarn-site.xml-bestand of in het mapred-site.xml-bestand. HortonWorks bevat deze configuraties in de yarn.application.classpath-configuraties. Zie PolyBase-configuratie voor voorbeelden.
Belangrijk
Als u de pushdown-functionaliteit voor berekeningen met Hadoop wilt gebruiken, moet het Hadoop-doelcluster de kernonderdelen van HDFS, YARN en MapReduce hebben, waarbij de taakgeschiedenisserver is ingeschakeld. PolyBase verzendt de pushdownquery via MapReduce en haalt de status op van de taakgeschiedenisserver. Zonder een van beide onderdelen mislukt de query.
Een externe tabel configureren
Als u een query wilt uitvoeren op de gegevens in uw Hadoop-gegevensbron, moet u een externe tabel definiëren die moet worden gebruikt in Transact-SQL query's. In de volgende stappen wordt beschreven hoe u de externe tabel configureert.
Maak een hoofdsleutel in de database als deze nog niet bestaat. Dit is vereist om het referentiegeheim te versleutelen.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
Argumenten
PASSWORD ='wachtwoord'
Is het wachtwoord dat wordt gebruikt om de hoofdsleutel in de database te versleutelen. het wachtwoord moet voldoen aan de windows-wachtwoordbeleidsvereisten van de computer waarop het exemplaar van SQL Server wordt gehost.
Maak een database-gebonden referentie voor met-Kerberos-beveiligde Hadoop-clusters.
-- IDENTITY: the Kerberos user name. -- SECRET: the Kerberos password CREATE DATABASE SCOPED CREDENTIAL HadoopUser1 WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';
Maak een externe gegevensbron met 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 );
Maak een externe bestandsindeling met 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))
Maak een externe tabel die verwijst naar gegevens die zijn opgeslagen in Hadoop met CREATE EXTERNAL TABLE. In dit voorbeeld bevatten de externe gegevens autosensorgegevens.
-- 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 );
Statistieken maken voor een externe tabel.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
PolyBase-query's
Er zijn drie functies waarvoor PolyBase geschikt is:
- Ad-hocquery's voor externe tabellen.
- Gegevens importeren.
- Gegevens exporteren.
De volgende query's bevatten voorbeeldgegevens van fictieve autosensorgegevens.
Ad-hocvragen
Met de volgende ad-hocquery worden relationele gegevens samengevoegd met Hadoop-gegevens. Het selecteert klanten die sneller rijden dan 35 mph, waarbij gestructureerde klantgegevens worden toegevoegd die zijn opgeslagen in SQL Server met autosensorgegevens die zijn opgeslagen in 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)
Gegevens importeren
Met de volgende query worden externe gegevens geïmporteerd in SQL Server. In dit voorbeeld worden gegevens geïmporteerd voor snelle stuurprogramma's in SQL Server om uitgebreidere analyses uit te voeren. Ter verbetering van de prestaties gebruikt het voorbeeld een columnstore-index.
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;
Gegevens exporteren
Met de volgende query worden gegevens geëxporteerd van SQL Server naar Hadoop. Hiervoor moet u eerst PolyBase-export inschakelen. Maak vervolgens een externe tabel voor de bestemming voordat u er gegevens naar exporteert.
-- 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-objecten weergeven in SSMS
In SSMS worden externe tabellen weergegeven in een afzonderlijke map Externe tabellen. Externe gegevensbronnen en externe bestandsindelingen bevinden zich in submappen onder Externe resources.
Volgende stappen
Zie PolyBase Transact-SQL referentievoor meer zelfstudies over het maken van externe gegevensbronnen en externe tabellen voor verschillende gegevensbronnen.
Bekijk meer manieren om PolyBase te gebruiken en te bewaken in de volgende artikelen: