Sdílet prostřednictvím


Konfigurace PolyBase pro přístup k externím datům v Hadoopu

platí pro:SQL Server – pouze windows azure SQL Managed Instance

Tento článek vysvětluje, jak používat PolyBase v instanci SQL Serveru k dotazování externích dat v Hadoopu.

Poznámka

Od verze SQL Server 2022 (16.x) se v PolyBase už Hadoop nepodporuje.

Požadavky

  • Pokud jste nenainstalovali PolyBase, podívejte se na instalace PolyBase. Článek o instalaci vysvětluje požadavky.
  • PolyBase podporuje dva poskytovatele Hadoopu, Hortonworks Data Platform (HDP) a Cloudera Distributed Hadoop (CDH). Hadoop se řídí vzorem Major.Minor.Version pro své nové verze a podporují se všechny verze v rámci podporované hlavní verze a podverze. Informace o podporovaných verzích Hortonworks Data Platform (HDP) a Cloudera Distributed Hadoop (CDH) najdete v tématu Konfigurace připojení PolyBase.

Poznámka

PolyBase podporuje zóny šifrování Hadoop počínaje SQL Serverem 2016 SP1 CU7 a SQL Serverem 2017 CU3. Pokud používáte skupiny s horizontálním navýšením kapacity PolyBase, všechny výpočetní uzly musí být také na sestavení, které zahrnuje podporu zón šifrování Hadoop.

Konfigurace připojení Hadoopu

Nejprve nakonfigurujte SQL Server PolyBase tak, aby používal konkrétního poskytovatele Hadoop.

  1. Spusťte sp_configure s připojením hadoop a nastavte odpovídající hodnotu pro vašeho poskytovatele. Pro zjištění hodnoty pro vašeho poskytovatele viz Konfigurace připojení 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. Sql Server je nutné restartovat pomocí services.msc. Restartování SQL Serveru restartuje tyto služby:

    • Služba pro přesun dat SQL Server PolyBase
    • SQL Server PolyBase Engine

    zastavení a spuštění služeb PolyBase v services.msc

Povolit počítání pushdown

Pokud chcete zvýšit výkon dotazů, povolte výpočetní propadání do clusteru Hadoop.

  1. Vyhledejte soubor yarn-site.xml v instalační cestě SQL Serveru. Cesta je obvykle následující:

    C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\  
    
  2. Na počítači Hadoop najděte analogický soubor v konfiguračním adresáři Hadoop. V souboru vyhledejte a zkopírujte hodnotu konfiguračního klíče yarn.application.classpath.

  3. Na počítači s SQL Serverem v souboru yarn-site.xml vyhledejte vlastnost yarn.application.classpath. Vložte hodnotu z počítače Hadoop do prvku value.

  4. Pro všechny verze CDH 5.X budete muset přidat parametry konfigurace mapreduce.application.classpath buď na konec souboru yarn-site.xml, nebo do souboru mapred-site.xml. HortonWorks zahrnuje tyto konfigurace v rámci konfigurace yarn.application.classpath. Více příkladů najdete v části konfigurace PolyBase.

Důležitý

Aby bylo možné použít funkci nabízení výpočtů s Hadoopem, musí mít cílový cluster Hadoop základní komponenty HDFS, YARN a MapReduce s povoleným serverem historie úloh. PolyBase odešle dotaz pushdownu prostřednictvím MapReduce a načítá stav ze serveru historie úloh. Bez obou komponent dotaz selže.

Konfigurace externí tabulky

Pokud chcete dotazovat data ve zdroji dat Hadoop, musíte definovat externí tabulku, která se má použít v Transact-SQL dotazech. Následující kroky popisují, jak nakonfigurovat externí tabulku.

  1. Pokud ještě neexistuje, vytvořte v databázi hlavní klíč. To se vyžaduje k šifrování tajného klíče přihlašovacích údajů.

     CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';  
    

    Argumenty

    HESLO ='password'

    Je heslo, které slouží k šifrování hlavního klíče v databázi. Heslo musí splňovat požadavky na zásady hesel systému Windows počítače, který je hostitelem instance SYSTÉMU SQL Server.

  2. Vytvořte přihlašovací údaje s vymezeným oborem databáze pro clustery Hadoop zabezpečené protokolem Kerberos.

    -- IDENTITY: the Kerberos user name.  
    -- SECRET: the Kerberos password  
    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';  
    
  3. Vytvořte externí zdroj dat pomocí VYTVOŘIT EXTERNÍ ZDROJ DAT.

    -- 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. Vytvořte formát externího souboru pomocí 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. Vytvořte externí tabulku odkazující na data uložená v Hadoopu s CREATE EXTERNAL TABLE. V tomto příkladu externí data obsahují data snímačů automobilů.

    -- 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. Vytvoření statistiky pro externí tabulku

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

Dotazy PolyBase

Existují tři funkce, pro které je PolyBase vhodná:

  • Ad hoc dotazy na externí tabulky
  • Importování dat.
  • Export dat.

Následující dotazy poskytují příklad s fiktivními daty snímačů aut.

Ad hoc dotazy

Následující ad hoc dotaz spojí relační s daty Hadoop. Vybere zákazníky, kteří jezdí rychleji než 35 mph a připojují strukturovaná zákaznická data uložená na SQL Serveru s daty snímačů aut uloženými v Hadoopu.

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)  

Import dat

Následující dotaz naimportuje externí data do SQL Serveru. Tento příklad importuje data pro rychlé řidiče do SQL Serveru, aby bylo možné provádět podrobnější analýzu. Pro zvýšení výkonu se v ukázce používá index columnstore.

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;  

Exportování dat

Následující dotaz exportuje data z SQL Serveru do Hadoopu. Chcete-li to provést, musíte nejprve povolit PolyBase export. Potom před exportem dat do cíle vytvořte externí tabulku pro cíl.

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

Zobrazení objektů PolyBase v SSMS

V nástroji SSMS se externí tabulky zobrazují v samostatné složce externí tabulky. Externí zdroje dat a formáty externích souborů jsou v podsložkách v části Externí zdroje.

PolyBase objekty v SSMS

Další kroky

Další kurzy týkající se vytváření externích zdrojů dat a externích tabulek pro různé zdroje dat najdete v tématu PolyBase Transact-SQL referenční.

Další způsoby použití a monitorování PolyBase najdete v následujících článcích: