Configurar PolyBase para obtener acceso a datos externos en Hadoop

Se aplica a:SQL Server: solo Windows Azure SQL Managed Instance

En el artículo se explica cómo usar PolyBase en una instancia de SQL Server para consultar datos externos en Hadoop.

Nota:

A partir de SQL Server 2022 (16.x), Hadoop ya no se admite en PolyBase.

Requisitos previos

  • Si no ha instalado PolyBase, consulte Instalación de PolyBase. En el artículo de instalación se explican los requisitos previos.
  • PolyBase es compatible con dos proveedores de Hadoop: Hortonworks Data Platform (HDP) y Cloudera Distributed Hadoop (CDH). Hadoop sigue el patrón “Principal.Secundaria.Versión” para sus revisiones nuevas y se admiten todas las versiones dentro de una revisión principal y secundaria compatible. Para obtener información sobre las versiones admitidas de Hortonworks Data Platform (HDP) y Cloudera Distributed Hadoop (CDH), consulte Configuración de conectividad de PolyBase.

Nota:

PolyBase admite las zonas de cifrado de Hadoop a partir de SQL Server 2016 SP1 CU7 y SQL Server 2017 CU3. Si se usan grupos de escalabilidad horizontal de PolyBase, todos los nodos de proceso deben estar también en una compilación que incluya compatibilidad con las zonas de cifrado de Hadoop.

Configurar la conectividad de Hadoop

En primer lugar, configure SQL Server PolyBase para usar el proveedor específico de Hadoop.

  1. Ejecute sp_configure con la “conectividad de hadoop” y defina un valor adecuado para el proveedor. Para hallar el valor, consulte Configuración de la conectividad de 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. Debe reiniciar SQL Server con services.msc. Al reiniciar SQL Server, se reinician estos servicios:

    • Servicio de movimiento de datos de SQL Server PolyBase
    • Motor de SQL Server PolyBase

    stop and start PolyBase services in services.msc

Habilitar el cálculo de la delegación

Para mejorar el rendimiento de las consultas, habilite el cálculo de la aplicación para el clúster de Hadoop:

  1. Busque el archivo yarn-site.xml en la ruta de acceso de instalación de SQL Server. Normalmente, la ruta de acceso es:

    C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\  
    
  2. En el equipo de Hadoop, busque el archivo análogo en el directorio de configuración de Hadoop. En el archivo, busque y copie el valor de la clave de configuración yarn.application.classpath.

  3. En el equipo de SQL Server, en el archivo yarn.site.xml, busque la propiedad yarn.application.classpath. Pegue el valor de la máquina de Hadoop en el elemento de valor.

  4. Para todas las versiones 5.X de CDH, se deberán agregar los parámetros de configuración mapreduce.application.classpath al final del archivo yarn.site.xml o en el archivo mapred-site.xml. HortonWorks incluye estas configuraciones dentro de las configuraciones yarn.application.classpath. Consulte PolyBase configuration (Configuración de PolyBase) para obtener ejemplos.

Importante

Para usar la funcionalidad de delegación de cálculos con Hadoop, el clúster de Hadoop de destino debe tener los componentes principales de HDFS, YARN y MapReduce con el servidor de historial de trabajos habilitado. PolyBase envía la consulta de aplicación a través de MapReduce y extrae el estado del servidor de historial de trabajos. Si falta algún componente, se produce un error en la consulta.

Configurar una tabla externa

Para consultar los datos en el origen de datos de Hadoop, debe definir una tabla externa para usar en las consultas de Transact-SQL. Los pasos siguientes describen cómo configurar la tabla externa.

  1. Cree una clave maestra en la base de datos, si aún no hay ninguna. Esto es necesario para cifrar el secreto de credencial.

     CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';  
    

    Argumentos

    PASSWORD ='password'

    Es la contraseña usada para cifrar la clave maestra de la base de datos. password debe cumplir los requisitos de la directiva de contraseñas de Windows del equipo que hospeda la instancia de SQL Server.

  2. Cree una credencial de ámbito de base de datos para los clústeres de Hadoop protegidos mediante Kerberos.

    -- IDENTITY: the Kerberos user name.  
    -- SECRET: the Kerberos password  
    CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';  
    
  3. Cree un origen de datos externo con 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. Cree un formato de archivo externo con 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. Cree una tabla externa que señale a los datos almacenados en Hadoop con CREATE EXTERNAL TABLE. En este ejemplo, los datos externos contienen datos de sensor de vehículo.

    -- 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. Cree estadísticas en una tabla externa.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

Consultas de PolyBase

PolyBase es adecuado para realizar tres funciones:

  • Consultas ad hoc en tablas externas.
  • Importar datos.
  • Exportar datos.

Las siguientes consultas proporcionan un ejemplo con datos de sensor de vehículo ficticios.

Consultas ad hoc

La siguiente consulta ad hoc combina datos relacionales con datos de Hadoop. Selecciona a los clientes que conducen a más de 35 mph, para lo que combina los datos estructurados del cliente almacenados en SQL Server con los datos del sensor de vehículo almacenados en 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)  

Importar datos

La consulta siguiente importa datos externos en SQL Server. En este ejemplo se importan los datos relativos a los conductores más rápidos en SQL Server para hacer un análisis más profundo. Para mejorar el rendimiento, en el ejemplo se usa un índice de almacén de columnas.

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;  

Exportar datos

La consulta siguiente exporta datos de SQL Server a Hadoop. Para ello, primero debe habilitar la exportación de PolyBase. Luego, cree una tabla externa para el destino antes de exportar los datos a ella.

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

Ver objetos PolyBase en SSMS

En SSMS, las tablas externas se muestran en una carpeta independiente llamada " Tablas externas". Los orígenes de datos y los formatos de archivo externos se encuentran en subcarpetas de Recursos externos.

PolyBase objects in SSMS

Pasos siguientes

Para obtener más tutoriales sobre cómo crear orígenes de datos externos y tablas externas en una variedad de orígenes de datos, consulte Referencia de Transact-SQL de PolyBase.

Descubra más formas de usar y supervisar PolyBase en los siguientes artículos: