Mengonfigurasi PolyBase untuk mengakses data eksternal di Hadoop

Berlaku untuk:SQL Server - Hanya Windows Azure SQL Managed Instance

Artikel ini menjelaskan cara menggunakan PolyBase pada instans SQL Server untuk mengkueri data eksternal di Hadoop.

Catatan

Mulai SQL Server 2022 (16.x), Hadoop tidak lagi didukung di PolyBase.

Prasyarat

  • Jika Anda belum menginstal PolyBase, lihat penginstalan PolyBase. Artikel penginstalan menjelaskan prasyarat.
  • PolyBase mendukung dua penyedia Hadoop, Hortonworks Data Platform (HDP) dan Cloudera Distributed Hadoop (CDH). Hadoop mengikuti pola "Major.Minor.Version" untuk rilis barunya, dan semua versi dalam rilis Utama dan Minor yang didukung didukung. Untuk informasi tentang versi Hortonworks Data Platform (HDP) dan Cloudera Distributed Hadoop (CDH) yang didukung, lihat Konfigurasi Konektivitas PolyBase.

Catatan

PolyBase mendukung zona enkripsi Hadoop yang dimulai dengan SQL Server 2016 SP1 CU7 dan SQL Server 2017 CU3. Jika Anda menggunakan grup peluasan skala PolyBase, semua simpul komputasi juga harus berada di build yang menyertakan dukungan untuk zona enkripsi Hadoop.

Mengonfigurasi konektivitas Hadoop

Pertama, konfigurasikan SQL Server PolyBase untuk menggunakan penyedia Hadoop spesifik Anda.

  1. Jalankan sp_configure dengan 'konektivitas hadoop' dan tetapkan nilai yang sesuai untuk penyedia Anda. Untuk menemukan nilai untuk penyedia Anda, lihat Konfigurasi Konektivitas 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  
    sp_configure @configname = 'hadoop connectivity', @configvalue = 7;
    GO
    
    RECONFIGURE
    GO
    
  2. Anda harus memulai ulang SQL Server menggunakan services.msc. Memulai ulang SQL Server memulai ulang layanan ini:

    • SQL Server PolyBase Data Movement Service
    • Mesin PolyBase SQL Server

    stop and start PolyBase services in services.msc

Mengaktifkan komputasi pushdown

Untuk meningkatkan performa kueri, aktifkan komputasi pushdown ke kluster Hadoop Anda:

  1. Temukan file yarn-site.xml di jalur penginstalan SQL Server. Biasanya, jalurnya adalah:

    C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\  
    
  2. Pada komputer Hadoop, temukan file analog di direktori konfigurasi Hadoop. Dalam file, temukan dan salin nilai kunci konfigurasi yarn.application.classpath.

  3. Pada komputer SQL Server, dalam file yarn-site.xml, temukan properti yarn.application.classpath . Tempelkan nilai dari komputer Hadoop ke dalam elemen nilai.

  4. Untuk semua versi CDH 5.X, Anda harus menambahkan parameter konfigurasi mapreduce.application.classpath baik ke akhir file yarn-site.xml Anda atau ke file mapred-site.xml. HortonWorks mencakup konfigurasi ini dalam konfigurasi yarn.application.classpath. Lihat Konfigurasi PolyBase untuk contohnya.

Penting

Untuk menggunakan fungsionalitas pushdown komputasi dengan Hadoop, kluster Hadoop target harus memiliki komponen inti HDFS, YARN, dan MapReduce, dengan server riwayat pekerjaan diaktifkan. PolyBase mengirimkan kueri pushdown melalui MapReduce dan menarik status dari server riwayat pekerjaan. Tanpa salah satu komponen, kueri gagal.

Mengonfigurasi sebuah tabel eksternal

Untuk mengkueri data di sumber data Hadoop, Anda harus menentukan tabel eksternal untuk digunakan dalam kueri Transact-SQL. Langkah-langkah berikut menjelaskan cara mengonfigurasi tabel eksternal.

  1. Buat kunci master pada database, jika belum ada. Kunci master diperlukan untuk mengenkripsi rahasia kredensial.

     CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';  
    

    Argumen

    PASSWORD ='password'

    Adalah kata sandi yang digunakan untuk mengenkripsi kunci master dalam database. kata sandi harus memenuhi persyaratan kebijakan kata sandi Windows komputer yang menghosting instans SQL Server.

  2. Buat kredensial cakupan database untuk kluster Hadoop yang diamankan Kerberos.

    -- IDENTITY: the Kerberos user name.  
    -- SECRET: the Kerberos password  
    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';  
    
  3. Buat sumber data eksternal dengan CREATE EXTERNAL DATA SOURCE.

    -- LOCATION (Required) : Hadoop Name Node IP address and port.  
    -- RESOURCE MANAGER LOCATION (Optional): Hadoop Resource Manager location to enable pushdown computation.  
    -- CREDENTIAL (Optional):  the database scoped credential, created above.  
    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. Buat format file eksternal dengan CREATE EXTERNAL FILE FORMAT.

    -- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT,  RCFILE, ORC, PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat WITH (  
          FORMAT_TYPE = DELIMITEDTEXT,
          FORMAT_OPTIONS (FIELD_TERMINATOR ='|',
                USE_TYPE_DEFAULT = TRUE))
    
  5. Buat tabel eksternal yang menunjuk ke data yang disimpan di Hadoop dengan CREATE EXTERNAL TABLE. Dalam contoh ini, data eksternal berisi data sensor mobil.

    -- LOCATION: path to file or directory that contains the data (relative to HDFS root).  
    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 (LOCATION='/Demo/',
          DATA_SOURCE = MyHadoopCluster,  
          FILE_FORMAT = TextFileFormat  
    );  
    
  6. Buat statistik pada tabel eksternal.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

Kueri PolyBase

Ada tiga fungsi yang cocok untuk PolyBase:

  • Kueri ad hoc terhadap tabel eksternal.
  • Mengimpor data.
  • Mengekspor data.

Kueri berikut memberikan contoh dengan data sensor mobil fiktif.

Kueri ad hoc

Kueri ad hoc berikut menggabungkan relasional dengan data Hadoop. Ini memilih pelanggan yang mengemudi lebih cepat dari 35 mph, menggabungkan data pelanggan terstruktur yang disimpan di SQL Server dengan data sensor mobil yang disimpan di 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)  

Mengimpor data

Kueri berikut mengimpor data eksternal ke SQL Server. Contoh ini mengimpor data untuk driver cepat ke SQL Server untuk melakukan analisis yang lebih mendalam. Untuk meningkatkan performa, sampel menggunakan indeks penyimpan kolom.

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;  

Mengekspor data

Kueri berikut mengekspor data dari SQL Server ke Hadoop. Untuk melakukan ini, Anda harus terlebih dahulu mengaktifkan ekspor PolyBase. Kemudian, buat tabel eksternal untuk tujuan sebelum mengekspor data ke dalamnya.

-- Enable INSERT into external table  
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 (  
      LOCATION='/old_data/2009/customerdata',  
      DATA_SOURCE = HadoopHDP2,  
      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 T1 JOIN CarSensor_Data T2  
ON (T1.CustomerKey = T2.CustomerKey)  
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;  

Menampilkan objek PolyBase di SSMS

Di SSMS, tabel eksternal ditampilkan dalam folder Terpisah Tabel Eksternal. Sumber data eksternal dan format file eksternal berada dalam subfolder di bawah Sumber Daya Eksternal.

PolyBase objects in SSMS

Langkah berikutnya

Untuk tutorial selengkapnya tentang membuat sumber data eksternal dan tabel eksternal ke berbagai sumber data, lihat referensi PolyBase Transact-SQL.

Jelajahi lebih banyak cara untuk menggunakan dan memantau PolyBase dalam artikel berikut: