Hadoop'ta dış verilere erişmek için PolyBase'i yapılandırma

Şunlar için geçerlidir:Windows üzerinde SQL ServerAzure SQL Yönetilen Örnek

Bu makale, Hadoop'ta harici verileri sorgulamak için SQL Server örneğinde PolyBase'in nasıl kullanılacağını açıklar.

Not

SQL Server 2022'den (16.x) başlayarak, Hadoop artık PolyBase'de desteklenmiyor.

Önkoşullar

  • SQL Server 2019'dan (15.x) başlayarak, PolyBase özelliğini de etkinleştirmeniz gerekir.
  • PolyBase iki Hadoop sağlayıcısını destekler: Hortonworks Veri Platformu (HDP) ve Cloudera Dağıtılmış Hadoop (CDH). Hadoop, yeni sürümleri için "Major.Minor.Version" modelini takip eder ve desteklenen majör ve minör sürümlerdeki tüm sürümler desteklenir. Hortonworks Veri Platformu (HDP) ve Cloudera Dağıtılmış Hadoop (CDH) desteklenen sürümleri hakkında bilgi için PolyBase bağlantı yapılandırmasına bakınız.

Not

PolyBase, SQL Server 2016 SP1 CU7 ve SQL Server 2017 CU3 ile başlayan Hadoop şifreleme bölgelerini destekler. PolyBase ölçeklendirme grupları kullanıyorsanız, tüm hesaplama düğümlerinin Hadoop şifreleme bölgelerini destekleyen bir yapıda olması gerekir.

Hadoop bağlantısını yapılandırma

İlk olarak, SQL Server PolyBase'i belirli Hadoop sağlayıcınızı kullanacak şekilde yapılandırın.

  1. sp_configure komutunu hadoop connectivity ile çalıştırın ve sağlayıcınız için bir değer ayarlayın. Sağlayıcınız için değeri bulmak için PolyBase bağlantı yapılandırmasına bakınız.

    -- 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. SQL Server'ı services.msc kullanarak yeniden başlatın. SQL Server'ı yeniden başlatmak şu hizmetleri de yeniden başlatır:

    • SQL Server PolyBase Veri Taşıma Hizmeti
    • SQL Server PolyBase Altyapısı

    services.msc'de PolyBase hizmetlerinin nasıl durdurulacağını ve başlatılacağını gösteren ekran görüntüsü.

İtme hesaplamasını etkinleştirme

Sorgu performansını geliştirmek için Hadoop kümenize anında iletme hesaplamasını etkinleştirin:

  1. SQL Server'ın yükleme yolunda yarn-site.xml dosyasını bulun. Genellikle yol şöyledir:

    C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\
    
  2. Hadoop makinesinde, Hadoop yapılandırma dizininde benzer dosyayı bulun. dosyasında, yapılandırma anahtarının yarn.application.classpathdeğerini bulun ve kopyalayın.

  3. SQL Server makinesindeki yarn-site.xml dosyasının içinde,yarn.application.classpath özelliğini bulun. Hadoop makinesindeki değeri değer öğesine yapıştırın.

  4. Tüm CDH 5.x sürümleri için, yarn-site.xml yapılandırma parametrelerini ya mapred-site.xml dosyanızın sonuna ya da mapreduce.application.classpath dosyasına ekleyin. HortonWorks, yarn.application.classpath yapılandırmaları içinde bu yapılandırmaları içerir. Örneğin, Hadoop için PolyBase yapılandırması ve güvenliği bölümünü inceleyebilirsiniz.

Önemli

Hadoop ile hesaplamalı iş yükü aktarımı işlevini kullanabilmek için, hedef Hadoop kümesinin HDFS, YARN ve MapReduce'un temel bileşenlerine ve etkin durumda bir iş geçmişi sunucusuna sahip olması gerekir. PolyBase, MapReduce aracılığıyla anında iletme sorgusunu gönderir ve durumu iş geçmişi sunucusundan çeker. Bileşenlerden biri olmadan sorgu başarısız olur.

Dış tabloyu yapılandır

Hadoop veri kaynağınızdaki verileri sorgulamak için, Transact-SQL sorgularda kullanılacak bir dış tablo tanımlamanız gerekir. Aşağıdaki adımlarda dış tablonun nasıl yapılandırıldığı açıklanmaktadır.

  1. Veritabanında bir ana anahtar oluşturun, eğer zaten yoksa. Bu anahtara kimlik bilgisi sırrını şifrelemek için ihtiyacınız var.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
    
    • PAROLA = <şifre>

      Veritabanındaki ana anahtarı şifrelemek için kullanılan parola. Şifre, SQL Server örneğini barındıran bilgisayarın Windows şifre politikası gereksinimlerini karşılamalıdır.

  2. Kerberos ile güvence altına alınmış Hadoop kümeleri için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH
        IDENTITY = '<kerberos_user_name>',
        SECRET = '<kerberos_password>';
    
  3. ile CREATE EXTERNAL DATA SOURCEbir dış veri kaynağı oluşturun.

    • LOCATION (Gerekli): Hadoop NameNode IP adresi ve bağlantı noktası.
    • RESOURCE_MANAGER_LOCATION(İsteğe bağlı): Hadoop Resource Manager konumu, pushdown hesaplamayı etkinleştirmek için.
    • CREDENTIAL (İsteğe bağlı): Önceden oluşturulmuş veritabanı kapsamlı kimlik bilgisi.
    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. ile CREATE EXTERNAL FILE FORMATbir dış dosya biçimi oluşturun.

    • FORMAT_TYPE: Hadoop'taki format türü (DELIMITEDTEXT, RCFILE, ORC, veya PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (FIELD_TERMINATOR = '|', USE_TYPE_DEFAULT = TRUE)
    );
    
  5. ile CREATE EXTERNAL TABLEHadoop'ta depolanan verilere işaret eden bir dış tablo oluşturun. Bu örnekte, dış veriler araba sensörü verilerini içerir.

    • LOCATION: Veriyi içeren dosya veya dizine giden yol (HDFS köküne göre).
    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. Dış tabloda istatistikler oluşturun.

    CREATE STATISTICS StatsForSensors
    ON CarSensor_Data(CustomerKey, Speed);
    

PolyBase sorguları

PolyBase aşağıdaki senaryolar için uygundur:

  • Dış tablolara yönelik ad hoc sorgular.
  • Veri içe aktarılıyor.
  • Veriler dışarı aktarıyor.

Aşağıdaki sorular, kurgusal araba sensörü verileriyle ilgili bir örnek sunar.

Geçici sorgular

Aşağıdaki ad hoc sorgu, ilişkisel verileri Hadoop verileriyle birleştirir. 35 mph'den daha hızlı sürüş yapan müşterileri seçerek SQL Server'da depolanan yapılandırılmış müşteri verilerini Hadoop'ta depolanan araç sensörü verileriyle birleştirir.

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)

Verileri içeri aktarma

Aşağıdaki sorgu dış verileri SQL Server'a aktarır. Bu örnek, daha ayrıntılı analiz yapmak için hızlı sürücülerin verilerini SQL Server'a aktarır. Performansı geliştirmek için örnek bir columnstore dizini kullanır.

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;

Verileri dışarı aktar

Aşağıdaki sorgu verileri SQL Server'dan Hadoop'a aktarır. Öncelikle, PolyBase dışa aktarmasını etkinleştirin. Ardından, verileri hedefe aktarmadan önce hedef için bir dış tablo oluşturun.

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

SSMS'de PolyBase nesnelerini görüntüleme

SSMS'de dış tablolar, Dış Tablolar ayrı bir klasörde görüntülenir. Dış veri kaynakları ve dış dosya biçimleri, Dış Kaynaklaraltındaki alt klasörlerdedir.

SSMS'deki PolyBase nesnelerinin ekran görüntüsü.