Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w usłudze Hadoop

Dotyczy:SQL Server w systemie Windows Azure SQL Managed Instance

Ten artykuł wyjaśnia, jak używać PolyBase na instancji SQL Server do zapytań zewnętrznych danych w 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 PolyBase nie jest zainstalowany, zobacz Install PolyBase na Windows. W artykule dotyczącym instalacji wyjaśniono wymagania wstępne.
  • Technologia PolyBase obsługuje dwóch dostawców usług Hadoop, Hortonworks Data Platform (HDP) i Cloudera Distributed Hadoop (CDH). Hadoop stosuje wzorzec "Major.Minor.Version" dla swoich nowych wydań, a wszystkie wersje w ramach obsługiwanego wydania głównego i pobocznego są obsługiwane. Aby uzyskać informacje o obsługiwanych wersjach Hortonworks Data Platform (HDP) i Cloudera Distributed Hadoop (CDH), zobacz konfigurację łączności PolyBase.

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 skalowania PolyBase, wszystkie węzły obliczeniowe muszą być również na kompilacji obsługującej strefy szyfrowania Hadoop.

Konfigurowanie łączności z usługą Hadoop

Najpierw skonfiguruj program SQL Server PolyBase do korzystania z określonego dostawcy usługi Hadoop.

  1. Uruchom sp_configure za pomocą hadoop connectivity i ustaw wartość dla swojego dostawcy. Aby znaleźć wartość dla swojego dostawcy, zobacz konfigurację łączności 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
    
  2. Zrestartuj SQL Server, używając services.msc. Restart SQL Server uruchamia także następujące usługi:

    • Usługa przenoszenia danych programu SQL Server PolyBase
    • Aparat programu SQL Server PolyBase

    Zrzut ekranu pokazujący, jak zatrzymać i uruchomić usługi PolyBase w services.msc.

Włączanie obliczeń wypychanych

Aby zwiększyć wydajność zapytań, włącz obliczenia wypychane do klastra Hadoop:

  1. 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\
    
  2. Na maszynie hadoop znajdź analogiczny plik w katalogu konfiguracji usługi Hadoop. W pliku znajdź i skopiuj wartość klucza yarn.application.classpathkonfiguracji .

  3. Na serwerze SQL Server, w pliku yarn-site.xml znajdź właściwość yarn.application.classpath. Wklej wartość z maszyny hadoop do elementu value.

  4. Dla wszystkich wersji CDH 5.x dodaj parametry konfiguracyjne mapreduce.application.classpath albo na końcu pliku yarn-site.xml, albo w pliku mapred-site.xml. HortonWorks obejmuje te konfiguracje w konfiguracji yarn.application.classpath. Przykłady można znaleźć w PolyBase configuration and security for Hadoop.

Ważny

Aby korzystać z funkcji wypychania obliczeń w Hadoop, docelowy klaster Hadoop musi mieć podstawowe składniki HDFS, YARN i MapReduce oraz włączony serwer 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.

  1. Stwórz klucz główny w bazie danych, jeśli jeszcze taki nie istnieje. Potrzebujesz tego klucza, żeby zaszyfrować sekret poświadczenia.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
    
    • PASSWORD = <hasło>

      Hasło używane do szyfrowania klucza głównego w bazie danych. Hasło musi spełniać wymagania polityki haseł Windows komputera, który hostuje instancję SQL Server.

  2. Utwórz poświadczenie o zakresie bazy danych dla klastrów Hadoop zabezpieczonych przy użyciu protokołu Kerberos.

    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH
        IDENTITY = '<kerberos_user_name>',
        SECRET = '<kerberos_password>';
    
  3. Utwórz zewnętrzne źródło danych za pomocą polecenia CREATE EXTERNAL DATA SOURCE.

    • LOCATION (Wymagane): Nazwa Hadoop Node, adres IP i port.
    • RESOURCE_MANAGER_LOCATION (Opcjonalnie): Lokalizacja menedżera zasobów Hadoop umożliwiająca wykonywanie obliczeń typu pushdown.
    • CREDENTIAL (Opcjonalnie): Poświadczenie o zakresie bazy danych, utworzone wcześniej.
    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. Utwórz format pliku zewnętrznego za pomocą polecenia CREATE EXTERNAL FILE FORMAT.

    • FORMAT_TYPE: Typ formatu w Hadoop (DELIMITEDTEXT, RCFILE, ORC, lub PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE)
    );
    
  5. Utwórz tabelę zewnętrzną wskazującą dane przechowywane w usłudze Hadoop za pomocą polecenia CREATE EXTERNAL TABLE. W tym przykładzie dane zewnętrzne zawierają dane czujnika samochodu.

    • LOCATION: Ścieżka do pliku lub katalogu, który zawiera dane (względem rootu 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
    );
    
  6. Utwórz statystyki dotyczące tabeli zewnętrznej.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    

Zapytania programu PolyBase

PolyBase nadaje się do następujących scenariuszy:

  • Zapytania ad hoc względem tabel zewnętrznych.
  • Importowanie danych.
  • Eksportowanie danych.

Poniższe zapytania stanowią przykład z fikcyjnych danych z czujników samochodowych.

Zapytania ad hoc

Poniższe 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. Po pierwsze, włącz eksport PolyBase. Następnie utwórz tabelę zewnętrzną dla miejsca docelowego przed wyeksportowaniem do niej danych.

-- 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;

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 pod Zasoby Zewnętrzne.

Zrzut ekranu przedstawiający obiekty PolyBase w programie SSMS.