Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server unter Windows
Azure SQL Verwaltete Instanz
Dieser Artikel erklärt, wie man PolyBase auf einer SQL Server-Instanz verwendet, um externe Daten in Hadoop abzufragen.
Hinweis
Ab SQL Server 2022 (16.x) wird Hadoop in PolyBase nicht mehr unterstützt.
Voraussetzungen
- Wenn PolyBase nicht installiert ist, siehe PolyBase unter Windows installieren. Die Voraussetzungen für die Installation werden im entsprechenden Artikel erläutert.
- Ab SQL Server 2019 (15.x) müssen Sie auch das PolyBase-Feature aktivieren.
- PolyBase unterstützt zwei Hadoop-Anbieter: Hortonworks Data Platform (HDP) und Cloudera Distributed Hadoop (CDH). Hadoop folgt dem Muster "Major.Minor.Version" für seine neuen Veröffentlichungen, und alle Versionen innerhalb einer unterstützten Haupt- und Minor-Version werden unterstützt. Informationen zu unterstützten Versionen der Hortonworks Data Platform (HDP) und Cloudera Distributed Hadoop (CDH) finden Sie unter PolyBase-Konnektivitätskonfiguration.
Hinweis
PolyBase unterstützt Hadoop-Verschlüsselungszonen ab SQL Server 2016 SP1 CU7 und SQL Server 2017 CU3. Wenn Sie PolyBase-Skalierungsgruppen verwenden, müssen alle Rechenknoten ebenfalls auf einem Build sein, der Unterstützung für Hadoop-Verschlüsselungszonen bietet.
Konfigurieren der Hadoop-Konnektivität
Zunächst konfigurieren Sie SQL Server PolyBase für die Verwendung Ihres Hadoop-Anbieters.
Führen Sie sp_configure mit
hadoop connectivityaus und legen Sie einen Wert für Ihren Anbieter fest. Um den Wert für Ihren Anbieter zu ermitteln, siehe PolyBase-Konnektivitätskonfiguration.-- 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; GONeustart von SQL Server mit services.msc. Der Neustart von SQL Server startet diese Dienste ebenfalls neu:
- SQL Server PolyBase-Datenverschiebungsdienst
- SQL Server PolyBase-Engine
Aktivieren der PushDown-Berechnung
Um die Abfrageleistung zu verbessern, aktivieren Sie die Weitergabeberechnung für Ihren Hadoop-Cluster:
Suchen Sie die Datei yarn-site.xml im Installationspfad von SQL Server. In der Regel lautet der Pfad:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\Suchen Sie auf dem Hadoop-Computer die analoge Datei im Hadoop-Konfigurationsverzeichnis. Suchen und kopieren Sie in der Datei den Wert des Konfigurationsschlüssels
yarn.application.classpath.Suchen Sie auf dem SQL Server-Computer in der Datei yarn-site.xml die Eigenschaft yarn.application.classpath. Fügen Sie den Wert vom Hadoop-Computer in das Element „Value“ ein.
Für alle CDH 5.x-Versionen fügen Sie die Konfigurationsparameter
mapreduce.application.classpathentweder am Ende Ihreryarn-site.xmlDatei oder in die Dateimapred-site.xmlein. HortonWorks enthält diese Konfigurationen innerhalb deryarn.application.classpathKonfigurationen. Beispiele finden sich unter PolyBase-Konfiguration und Sicherheit für Hadoop.
Wichtig
Wenn Sie die Pushdownberechnungsfunktion für Hadoop verwenden möchten, muss der Hadoop-Zielcluster über die Kernkomponenten von HDFS (Hadoop Distributed File System), YARN und MapReduce verfügen. Dabei muss der Auftragsverlaufserver aktiviert sein. PolyBase übermittelt die Pushdown-Abfrage über MapReduce und ruft den Status vom Jobverlaufsserver ab. Wenn keine dieser Komponenten vorhanden ist, tritt bei der Abfrage ein Fehler auf.
Konfigurieren einer externen Tabelle
Um die Daten in Ihrer Hadoop-Datenquelle abzufragen, müssen Sie eine externe Tabelle definieren, die in Transact-SQL-Abfragen verwendet werden soll. Die folgenden Schritte beschreiben, wie Sie die externe Tabelle konfigurieren.
Erstelle einen Masterschlüssel in der Datenbank, falls es noch keinen gibt. Du brauchst diesen Schlüssel, um das Geheimnis der Zugangsdaten zu verschlüsseln.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';PASSWORT = <Passwort>
Das Kennwort, das zum Verschlüsseln des Hauptschlüssels in der Datenbank verwendet wird. Das Passwort muss die Windows-Passwortrichtlinien des Computers erfüllen, der die SQL Server-Instanz hostet.
Erstellen Sie datenbankweite Anmeldeinformationen für Hadoop-Cluster, die mit Kerberos gesichert sind.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1 WITH IDENTITY = '<kerberos_user_name>', SECRET = '<kerberos_password>';Erstellen Sie eine externe Datenquelle mit CREATE EXTERNAL DATA SOURCE.
-
LOCATION(Erforderlich): die IP-Adresse und den Port des Hadoop-NameNode. -
RESOURCE_MANAGER_LOCATION(Optional): Hadoop Resource Manager Standort, um Pushdown-Berechnung zu ermöglichen. -
CREDENTIAL(Optional): Die zuvor erstellte Datenbank-Scoped 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 );-
Erstellen Sie ein externes Dateiformat mit CREATE EXTERNAL FILE FORMAT.
-
FORMAT_TYPE: Formattyp in Hadoop (DELIMITEDTEXT,RCFILE,ORC, oderPARQUET).
CREATE EXTERNAL FILE FORMAT TextFileFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE) );-
Erstellen Sie eine externe Tabelle, die auf Daten zeigt, die in Hadoop CREATE EXTERNAL TABLEgespeichert sind. In diesem Beispiel handelt es sich bei den externen Daten um Kfz-Sensordaten.
-
LOCATION: Der Pfad zur Datei oder zum Verzeichnis, das die Daten enthält (relativ zur HDFS-Wurzel).
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 );-
Erstellen Sie Statistiken für eine externe Tabelle.
CREATE STATISTICS StatsForSensors ON CarSensor_Data(CustomerKey, Speed);
PolyBase-Abfragen
PolyBase ist für die folgenden Szenarien geeignet:
- Ad-hoc-Abfragen für externe Tabellen
- Importieren von Daten
- Exportieren von Daten
Die folgenden Abfragen liefern ein Beispiel mit fiktiven Fahrzeugsensordaten.
Ad-hoc-Abfragen
Die folgende Ad-hoc-Abfrage verbindet relationale Daten mit Hadoop-Daten. Sie wählt Kunden aus, die schneller als 35 Meilen pro Stunde fahren, und verknüpft in SQL Server gespeicherte strukturierte Daten mit in Hadoop gespeicherten Daten aus KFZ-Sensoren.
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)
Daten importieren
Die folgende Abfrage importiert externe Daten in SQL Server. Dieses Beispiel importiert Daten zu schnellen Fahrern in SQL Server zur genaueren Analyse. Zur Verbesserung der Leistung wird in diesem Beispiel ein Columnstore-Index verwendet.
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;
Daten exportieren
Die folgende Abfrage exportiert Daten aus SQL Server nach Hadoop. Erstens: Aktivieren Sie den PolyBase-Export. Erstellen Sie dann eine externe Tabelle für das Ziel, bevor Sie mit dem Datenexport beginnen.
-- 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;
Anzeigen von PolyBase-Objekten in SSMS
In SSMS werden externe Tabellen in einem separaten Ordner Externe Tabellenangezeigt. Externe Datenquellen und externe Dateiformate befinden sich in Unterordnern unter Externe Ressourcen.