Konfigurieren von PolyBase für den Zugriff auf externe Daten in Hadoop

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

  • 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.

  1. Führen Sie sp_configure mit hadoop connectivity aus 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;
    GO
    
  2. Neustart von SQL Server mit services.msc. Der Neustart von SQL Server startet diese Dienste ebenfalls neu:

    • SQL Server PolyBase-Datenverschiebungsdienst
    • SQL Server PolyBase-Engine

    Screenshot, der zeigt, wie man PolyBase-Dienste in services.msc stoppt und startet.

Aktivieren der PushDown-Berechnung

Um die Abfrageleistung zu verbessern, aktivieren Sie die Weitergabeberechnung für Ihren Hadoop-Cluster:

  1. 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\
    
  2. 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.

  3. 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.

  4. Für alle CDH 5.x-Versionen fügen Sie die Konfigurationsparameter mapreduce.application.classpath entweder am Ende Ihrer yarn-site.xml Datei oder in die Datei mapred-site.xml ein. HortonWorks enthält diese Konfigurationen innerhalb der yarn.application.classpath Konfigurationen. 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.

  1. 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.

  2. 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>';
    
  3. 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
    );
    
  4. Erstellen Sie ein externes Dateiformat mit CREATE EXTERNAL FILE FORMAT.

    • FORMAT_TYPE: Formattyp in Hadoop (DELIMITEDTEXT, RCFILE, ORC, oder PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE)
    );
    
  5. 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
    );
    
  6. 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.

Screenshot von PolyBase-Objekten in SSMS.