Dela via


Konfigurera PolyBase för åtkomst till externa data i Hadoop

gäller för:SQL Server – Endast Windows Azure SQL Managed Instance

Artikeln beskriver hur du använder PolyBase på en SQL Server-instans för att köra frågor mot externa data i Hadoop.

Obs

Från och med SQL Server 2022 (16.x) stöds inte Hadoop längre i PolyBase.

Förutsättningar

  • Om du inte har installerat PolyBase, se PolyBase-installation. Installationsartikeln förklarar kraven.
  • PolyBase stöder två Hadoop-leverantörer, Hortonworks Data Platform (HDP) och Cloudera Distributed Hadoop (CDH). Hadoop följer mönstret "Major.Minor.Version" för sina nya versioner, och alla versioner inom en stödd huvud- och underutgåva stöds. Information om vilka versioner av Hortonworks Data Platform (HDP) och Cloudera Distributed Hadoop (CDH) som stöds finns i PolyBase Connectivity Configuration.

Not

PolyBase stöder Hadoop-krypteringszoner som börjar med SQL Server 2016 SP1 CU7 och SQL Server 2017 CU3. Om du använder PolyBase-utskalningsgruppermåste alla beräkningsnoder också finnas i en version som innehåller stöd för Hadoop-krypteringszoner.

Konfigurera Hadoop-anslutning

Konfigurera först SQL Server PolyBase för att använda din specifika Hadoop-provider.

  1. Kör sp_configure med hadoop-anslutning och ange ett lämpligt värde för providern. Information om hur du hittar värdet för providern finns i PolyBase Connectivity Configuration.

    -- 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. Du måste starta om SQL Server med hjälp av services.msc. Att starta om SQL Server startar om dessa tjänster:

    • SQL Server PolyBase Data Movement Service
    • SQL Server PolyBase-motor

    stoppa och starta PolyBase-tjänsterna i services.msc

Aktivera pushdown-beräkning

För att förbättra frågeprestandan aktiverar du pushdown-beräkning till ditt Hadoop-kluster:

  1. Leta reda på filen yarn-site.xml i installationssökvägen för SQL Server. Vanligtvis är sökvägen:

    C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\  
    
  2. Leta reda på den analoga filen i Hadoop-konfigurationskatalogen på Hadoop-datorn. I filen letar du upp och kopierar värdet för konfigurationsnyckeln yarn.application.classpath.

  3. I filen yarn-site.xml, hitta egenskapen yarn.application.classpath på SQL Server-datorn. Klistra in värdet från Hadoop-datorn i värdeelementet.

  4. För alla CDH 5.X-versioner måste du lägga till konfigurationsparametrarna mapreduce.application.classpath antingen i slutet av din yarn-site.xml-fil eller i mapred-site.xml-filen. HortonWorks innehåller dessa konfigurationer i yarn.application.classpath-konfigurationerna. Exempel finns i PolyBase-konfiguration.

Viktig

Om du vill använda beräkningens pushdown-funktioner med Hadoop måste hadoop-målklustret ha huvudkomponenterna i HDFS, YARN och MapReduce, med jobbhistorikservern aktiverad. PolyBase skickar pushdown-frågan via MapReduce och hämtar status från jobbhistorikservern. Utan någon av komponenterna misslyckas frågan.

Konfigurera en extern tabell

Om du vill köra frågor mot data i din Hadoop-datakälla måste du definiera en extern tabell som ska användas i Transact-SQL-frågor. Följande steg beskriver hur du konfigurerar den externa tabellen.

  1. Skapa en huvudnyckel i databasen, om det inte redan finns någon. Detta krävs för att kryptera hemligheten för autentiseringsuppgifter.

     CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';  
    

    Argument

    LÖSENORD ='lösenord'

    Är lösenordet som används för att kryptera huvudnyckeln i databasen. lösenordet måste uppfylla kraven för Windows-lösenordsprinciper för den dator som är värd för SQL Server-instansen.

  2. Skapa en databasomfattande autentiseringsuppgift för Kerberos-skyddade Hadoop-kluster.

    -- IDENTITY: the Kerberos user name.  
    -- SECRET: the Kerberos password  
    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';  
    
  3. Skapa en extern datakälla med 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. Skapa ett externt filformat med SKAPA EXTERNT FILFORMAT.

    -- 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. Skapa en extern tabell som pekar på data som lagras i Hadoop med CREATE EXTERNAL TABLE. I det här exemplet innehåller externa data bilsensordata.

    -- 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. Skapa statistik i en extern tabell.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

PolyBase-frågor

Det finns tre funktioner som PolyBase passar för:

  • Ad hoc-frågor mot externa tabeller.
  • Importerar data.
  • Exportera data.

Följande frågor ger exempel med fiktiva bilsensordata.

Ad hoc-frågor

Följande ad hoc-fråga kopplar samman relationella data med Hadoop-data. Den väljer kunder som kör snabbare än 35 mph och ansluter strukturerade kunddata som lagras i SQL Server med bilsensordata som lagras i 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)  

Importera data

Följande fråga importerar externa data till SQL Server. Det här exemplet importerar data för snabba drivrutiner till SQL Server för att göra mer djupgående analys. För att förbättra prestandan använder exemplet ett kolumnlagringsindex.

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;  

Exportera data

Följande fråga exporterar data från SQL Server till Hadoop. För att göra detta måste du först aktivera PolyBase-export. Skapa sedan en extern tabell för målet innan du exporterar data till den.

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

Visa PolyBase-objekt i SSMS

I SSMS visas externa tabeller i en separat mapp externa tabeller. Externa datakällor och externa filformat finns i undermappar under externa resurser.

PolyBase-objekt i SSMS-

Nästa steg

Fler självstudier om hur du skapar externa datakällor och externa tabeller till en mängd olika datakällor finns i PolyBase Transact-SQL referens.

Utforska fler sätt att använda och övervaka PolyBase i följande artiklar: