Configurar o PolyBase para acessar dados externos no Hadoop
Aplica-se a:SQL Server - somente Windows
Instância Gerenciada SQL do Azure
O artigo explica como usar o PolyBase em uma instância do SQL Server para consultar dados externos no Hadoop.
Observação
A partir do SQL Server 2022 (16.x), o Hadoop não tem mais suporte no PolyBase.
Pré-requisitos
- Se ainda não tiver instalado o PolyBase, consulte instalação do PolyBase. O artigo de instalação explica os pré-requisitos.
- A partir do SQL Server 2019 (15.x), você também deve habilitar o recurso PolyBase.
- O PolyBase suporta dois provedores Hadoop, Hortonworks Data Platform (HDP) e Cloudera Distributed Hadoop (CDH). O Hadoop segue o padrão "Major.Minor.Version" para suas novas versões, e todas as versões dentro de uma versão Principal e Secundária suportada são suportadas. Para obter informações sobre as versões do Hortonworks Data Platform (HDP) e do Cloudera Distributed Hadoop (CDH) suportadas, consulte PolyBase Connectivity Configuration.
Observação
O PolyBase oferece suporte a zonas de criptografia Hadoop a partir do SQL Server 2016 SP1 CU7 e SQL Server 2017 CU3. Se você estiver usando grupos de expansão do PolyBase, todos os nós de computação também deverão estar em uma compilação que inclua suporte para zonas de criptografia Hadoop.
Configurar a conectividade do Hadoop
Primeiro, configure o SQL Server PolyBase para usar seu provedor Hadoop específico.
Execute sp_configure com 'conectividade hadoop' e defina um valor apropriado para seu provedor. Para encontrar o valor para o seu provedor, consulte Configuração de Conectividade do 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
Você deve reiniciar o SQL Server usando services.msc. Reiniciar o SQL Server reinicia estes serviços:
- Serviço de Movimentação de Dados do SQL Server PolyBase
- Mecanismo PolyBase do SQL Server
Ativar computação pushdown
Para melhorar o desempenho da consulta, habilite a computação pushdown para o cluster Hadoop:
Localize o arquivo yarn-site.xml no caminho de instalação do SQL Server. Normalmente, o caminho é:
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf\
Na máquina Hadoop, localize o arquivo análogo no diretório de configuração do Hadoop. No arquivo, localize e copie o valor da chave de configuração yarn.application.classpath.
Na máquina do SQL Server, no arquivo yarn-site.xml, localize a propriedade yarn.application.classpath. Cole o valor da máquina Hadoop no elemento de valor.
Para todas as versões do CDH 5.X, você precisará adicionar os parâmetros de configuração mapreduce.application.classpath ao final do arquivo yarn-site.xml ou ao arquivo mapred-site.xml. O HortonWorks inclui essas configurações nas configurações yarn.application.classpath. Consulte a configuração PolyBase para obter exemplos.
Importante
Para usar a funcionalidade de pushdown de computação com o Hadoop, o cluster Hadoop de destino deve ter os componentes principais do HDFS, YARN e MapReduce, com o servidor de histórico de tarefas habilitado. O PolyBase envia a consulta pushdown via MapReduce e extrai o status do servidor de histórico de trabalhos. Sem qualquer componente, a consulta falha.
Configurar uma tabela externa
Para consultar os dados em sua fonte de dados Hadoop, você deve definir uma tabela externa para usar em consultas Transact-SQL. As etapas a seguir descrevem como configurar a tabela externa.
Crie uma chave mestra no banco de dados, se ainda não existir. Isso é necessário para criptografar o segredo da credencial.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
Argumentos
PASSWORD ='senha'
É a senha usada para criptografar a chave mestra no banco de dados. senha deve atender aos requisitos de diretiva de senha do Windows do computador que está hospedando a instância do SQL Server.
Crie uma credencial com escopo de banco de dados para clusters Hadoop protegidos por Kerberos.
-- IDENTITY: the Kerberos user name. -- SECRET: the Kerberos password CREATE DATABASE SCOPED CREDENTIAL HadoopUser1 WITH IDENTITY = '<hadoop_user_name>', Secret = '<hadoop_password>';
Crie uma fonte de dados externa com 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 );
Crie um formato de arquivo externo com 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))
Crie uma tabela externa apontando para dados armazenados no Hadoop com CREATE EXTERNAL TABLE. Neste exemplo, os dados externos contêm dados do sensor do carro.
-- 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 );
Crie estatísticas em uma tabela externa.
CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)
Consultas PolyBase
Existem três funções para as quais o PolyBase é adequado:
- Consultas ad hoc em tabelas externas.
- Importação de dados.
- Exportação de dados.
As consultas a seguir fornecem exemplos com dados fictícios do sensor do carro.
Consultas ad hoc
A consulta ad hoc a seguir une os dados relacionais com os dados do Hadoop. Ele seleciona clientes que dirigem mais rápido do que 35 mph, unindo dados estruturados de clientes armazenados no SQL Server com dados de sensores de carro armazenados no 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)
Importação de dados
A consulta a seguir importa dados externos para o SQL Server. Este exemplo importa dados de condutores de alta velocidade para o SQL Server para fazer uma análise mais aprofundada. Para melhorar o desempenho, o exemplo usa um índice de armazenamento em colunas.
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;
Exportação de dados
A consulta a seguir exporta dados do SQL Server para o Hadoop. Para fazer isso, primeiro você precisa habilitar a exportação do PolyBase. Em seguida, crie uma tabela externa para o destino antes de exportar dados para ela.
-- 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;
Exibir objetos PolyBase no SSMS
No SSMS, as tabelas externas são exibidas em uma pasta separada Tabelas Externas. Fontes de dados externas e formatos de arquivo externos estão em subpastas em Recursos Externos.
Próximos passos
Para obter mais tutoriais sobre como criar fontes de dados externas e tabelas externas para uma variedade de fontes de dados, consulte PolyBase Transact-SQL referência.
Explore mais maneiras de usar e monitorar o PolyBase nos seguintes artigos: