A PolyBase konfigurálása külső adatok eléréséhez a Hadoopban

A következőkre vonatkozik:Windows rendszeren futó SQL ServerAzure SQL felügyelt példány

Ez a cikk elmagyarázza, hogyan lehet a PolyBase-et használni egy SQL Server példányon, hogy külső adatokat lekérdezzünk a Hadoopban.

Jegyzet

Az SQL Server 2022-től kezdve (16.x) a Hadoop már nem támogatott a PolyBase-ben.

Előfeltételek

  • A PolyBase két Hadoop-szolgáltatót támogat, a Hortonworks Data Platformot (HDP) és a Cloudera Distributed Hadoopot (CDH). A Hadoop az új kiadásainál a "Major.Minor.Version" mintát követi, és minden támogatott nagy és kisebb kiadásban lévő verzió támogatott. A Hortonworks Data Platform (HDP) és a Cloudera Distributed Hadoop (CDH) támogatott verzióiról információért lásd: PolyBase connectivity configuration.

Jegyzet

A PolyBase az SQL Server 2016 SP1 CU7 és az SQL Server 2017 CU3-tól kezdve támogatja a Hadoop-titkosítási zónákat. Ha PolyBase skálázható csoportokat használsz, minden számítási csomópontnak olyan builden kell lennie, amely támogatja a Hadoop titkosítási zónákat.

Hadoop-kapcsolat konfigurálása

Először konfigurálja az SQL Server PolyBase-t az adott Hadoop-szolgáltató használatára.

  1. Futtasd a sp_configure parancsot a(z) hadoop connectivity használatával, és állíts be egy értéket a szolgáltatód számára. A szolgáltatód értékének megtalálásához lásd a PolyBase csatlakozási konfigurációt.

    -- 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. Indítsd újra az SQL Server-t a services.msc használatával. Az SQL Server újraindítása ezeket a szolgáltatásokat is újraindítja:

    • SQL Server PolyBase adatáthelyezési szolgáltatás
    • SQL Server PolyBase-motor

    Képernyőkép, amely bemutatja, hogyan lehet megállítani és elindítani a PolyBase szolgáltatásokat a services.msc-ben.

Leküldéses számítások engedélyezése

A lekérdezési teljesítmény javítása érdekében engedélyezze a leküldéses számítást a Hadoop-fürtön:

  1. Keresse meg a yarn-site.xml fájlt az SQL Server telepítési útvonalán. Az elérési út általában a következő:

    C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\
    
  2. A Hadoop gépen keresse meg az analóg fájlt a Hadoop konfigurációs könyvtárában. A fájlban keresse meg és másolja ki a konfigurációs kulcs yarn.application.classpathértékét.

  3. Az SQL Server-gépen a yarn-site.xml fájlban keresse meg a yarn.application.classpath tulajdonságot. Illessze be a Hadoop gép értékét az érték eleme közé.

  4. Minden CDH 5.x verziónál add hozzá a mapreduce.application.classpath konfigurációs paramétereket a fájl végére yarn-site.xml , vagy a mapred-site.xml fájlba. A HortonWorks ezeket a konfigurációkat a yarn.application.classpath konfigurációkon belül tartalmazza. Példák: PolyBase konfiguráció és biztonság a Hadoop számára.

Fontos

Ha a számítási leküldéses funkciót a Hadooptal szeretné használni, a cél Hadoop-fürtnek rendelkeznie kell a HDFS, YARN és MapReduce alapvető összetevőivel, és engedélyezve van a feladatelőzmény-kiszolgáló. A PolyBase a MapReduce-on keresztül küldi el az átfuttatott lekérdezést, és lekéri az állapotot a feladattörténet-kiszolgálóról. Bármelyik összetevő nélkül a lekérdezés meghiúsul.

Külső tábla konfigurálása

A Hadoop-adatforrásban lévő adatok lekérdezéséhez meg kell adnia egy külső táblát, amelyet Transact-SQL lekérdezésekben kell használni. Az alábbi lépések a külső tábla konfigurálását ismertetik.

  1. Hozz létre egy mesterkulcsot az adatbázison, ha még nincs ilyen. Erre a kulcsra van szükséged a hitelesítés titkának titkosításához.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
    
    • JELSZÓ = <jelszó>

      Az adatbázis főkulcsának titkosításához használt jelszó. A jelszónak megfelelnie kell annak a Windows-jelszó-szabályzatnak követelményeinek, amelyen az SQL Server példányát üzemelteti.

  2. Hozzon létre egy adatbázis-hatókörű hitelesítő adatot a Kerberos által védett Hadoop-fürtökhöz.

    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH
        IDENTITY = '<kerberos_user_name>',
        SECRET = '<kerberos_password>';
    
  3. Hozzon létre egy külső adatforrást a .CREATE EXTERNAL DATA SOURCE

    • LOCATION (Szükséges): Hadoop név csomópont IP-címe és portja.
    • RESOURCE_MANAGER_LOCATION(Opcionális): Hadoop Resource Manager helye a pushdown számítás engedélyezéséhez.
    • CREDENTIAL (Opcionális): Az adatbázis által meghatározott képesítés, amelyet korábban hoztak létre.
    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. Hozzon létre egy külső fájlformátumot a(z) CREATE EXTERNAL FILE FORMAT használatával.

    • FORMAT_TYPE: A Hadoop formátum típusa (DELIMITEDTEXT, RCFILE, ORC, vagy PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE)
    );
    
  5. Hozzon létre egy külső táblát, amely a Hadoopban tárolt adatokra mutat a következővel CREATE EXTERNAL TABLE: . Ebben a példában a külső adatok autóérzékelő adatokat tartalmaznak.

    • LOCATION: Az út a fájlhoz vagy könyvtárhoz, amely tartalmazza az adatokat (a HDFS gyökérhez képest).
    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. Statisztikák létrehozása külső táblán.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    

PolyBase-lekérdezések

A PolyBase a következő helyzetekre alkalmas:

  • Alkalmi lekérdezések külső táblák ellen.
  • Adatok importálása.
  • Adatok exportálása.

Az alábbi lekérdezések példát adnak fiktív autószenzori adatokkal.

Alkalmi lekérdezések

A következő ad hoc lekérdezés összekapcsolja a relációs adatokat a Hadoop adatokkal. Kiválasztja azokat az ügyfeleket, akik 35 mph-nál gyorsabban hajtanak, és az SQL Serverben tárolt strukturált ügyféladatokat összekapcsolják a Hadoopban tárolt autóérzékelő adataival.

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)

Adatok importálása

Az alábbi lekérdezés külső adatokat importál az SQL Serverbe. Ez a példa a gyors illesztőprogramok adatait importálja az SQL Serverbe, hogy részletesebb elemzést végezhessenek. A teljesítmény javítása érdekében a minta egy oszlopcentrikus indexet használ.

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;

Adatexportálás

Az alábbi lekérdezés adatokat exportál az SQL Serverről a Hadoopba. Először is engedélyezd a PolyBase exportot. Ezután hozzon létre egy külső táblát a célhelyhez az adatok exportálása előtt.

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

PolyBase-objektumok megtekintése az SSMS-ben

Az SSMS-ben a külső táblák külön mappában jelennek meg, Külső táblák. A külső adatforrások és a külső fájlformátumok a külső erőforrások almappáiban találhatók.

Képernyőkép a PolyBase-objektumokról az SSMS-ben.