Configuração e segurança do PolyBase para Hadoop

Aplica-se a:SQL Server no Windows Azure SQL Managed Instance

Este artigo fornece uma referência para várias definições de configuração que afetam a conectividade do PolyBase ao Hadoop. Para um guia sobre como usar o PolyBase com o Hadoop, consulte Configurar o PolyBase para aceder a dados externos no Hadoop.

Observação

A partir do SQL Server 2022 (16.x), o Hadoop deixou de ser suportado no PolyBase.

Definição Hadoop.rpc.protection

Uma forma comum de garantir a comunicação num cluster Hadoop é alterando a hadoop.rpc.protection configuração para Privacy ou Integrity. Por defeito, o PolyBase assume que a configuração está definida como Authenticate. Para substituir este padrão, adicione a seguinte propriedade ao ficheiro core-site.xml. Alterar esta configuração permite a transferência segura de dados entre os nós Hadoop e a ligação TLS para o SQL Server.

<!-- RPC Encryption information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG -->
   <property>
     <name>hadoop.rpc.protection</name>
     <value></value>
   </property>

Para usar Privacy ou Integrity para hadoop.rpc.protection, a versão da instância do SQL Server deve ser pelo menos SQL Server 2016 SP1 CU7, SQL Server 2016 SP2 ou SQL Server 2017 CU3.

Ficheiros XML de exemplo para cluster CDH 5.x

yarn-site.xml com configuração de yarn.application.classpath e mapreduce.application.classpath.

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
 <configuration>
   <property>
      <name>yarn.resourcemanager.connect.max-wait.ms</name>
      <value>40000</value>
   </property>
   <property>
      <name>yarn.resourcemanager.connect.retry-interval.ms</name>
      <value>30000</value>
   </property>
<!-- Applications' Configuration-->
   <property>
     <description>CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries</description>
      <!-- Please set this value to the correct yarn.application.classpath that matches your server side configuration -->
      <!-- For example, $HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/* -->
      <name>yarn.application.classpath</name>
      <value>$HADOOP_CLIENT_CONF_DIR,$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/,$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,$MR2_CLASSPATH*</value>
   </property>

<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
   <property>
      <name>yarn.resourcemanager.principal</name>
      <value></value>
   </property>
-->
</configuration>

Se optar por dividir as suas duas definições de configuração em mapred-site.xml e yarn-site.xml, então os ficheiros seriam os seguintes:

Para yarn-site.xml:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
 <configuration>
   <property>
      <name>yarn.resourcemanager.connect.max-wait.ms</name>
      <value>40000</value>
   </property>
   <property>
      <name>yarn.resourcemanager.connect.retry-interval.ms</name>
      <value>30000</value>
   </property>
<!-- Applications' Configuration-->
   <property>
     <description>CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries</description>
      <!-- Please set this value to the correct yarn.application.classpath that matches your server side configuration -->
      <!-- For example, $HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,$HADOOP_YARN_HOME/share/hadoop/yarn/*,$HADOOP_YARN_HOME/share/hadoop/yarn/lib/* -->
      <name>yarn.application.classpath</name>
      <value>$HADOOP_CLIENT_CONF_DIR,$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*</value>
   </property>

<!-- kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
   <property>
      <name>yarn.resourcemanager.principal</name>
      <value></value>
   </property>
-->
</configuration>

Para mapred-site.xml:

Note a propriedade mapreduce.application.classpath. No CDH 5.x, pode encontrar os valores de configuração sob a mesma convenção de nomenclatura em Ambari.

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration xmlns:xi="http://www.w3.org/2001/XInclude">
   <property>
     <name>mapred.min.split.size</name>
       <value>1073741824</value>
   </property>
   <property>
     <name>mapreduce.app-submission.cross-platform</name>
     <value>true</value>
   </property>
<property>
     <name>mapreduce.application.classpath</name>
     <value>$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,$MR2_CLASSPATH</value>
   </property>

<!--kerberos security information, PLEASE FILL THESE IN ACCORDING TO HADOOP CLUSTER CONFIG
   <property>
     <name>mapreduce.jobhistory.principal</name>
     <value></value>
   </property>
   <property>
     <name>mapreduce.jobhistory.address</name>
     <value></value>
   </property>
-->
</configuration>

Configuração de Kerberos

Quando o PolyBase autentica num cluster protegido por Kerberos, espera que essa hadoop.rpc.protection configuração seja Authenticate por defeito. Esta configuração deixa a comunicação de dados entre nós Hadoop sem encriptação. Para usar Privacy as definições Integrity de hadoop.rpc.protection, atualize o core-site.xml ficheiro no servidor PolyBase. Para mais informações, consulte a secção anterior Ligação ao Cluster Hadoop com Hadoop.rpc.protection.

Para se ligar a um cluster Hadoop protegido por Kerberos usando o MIT KDC:

  1. Encontre o diretório de configuração do Hadoop no caminho de instalação do SQL Server. Normalmente, o caminho é C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\PolyBase\Hadoop\conf.

  2. Encontre o valor de configuração do lado Hadoop das chaves de configuração listadas na tabela seguinte. (Na máquina Hadoop, encontre os ficheiros no diretório de configuração Hadoop.)

  3. Copie os valores de configuração para a propriedade de valor nos ficheiros correspondentes na máquina SQL Server.

    # Arquivo de configuração Chave de configuração Action
    1 core-site.xml polybase.kerberos.kdchost Especifique o nome de host KDC. Por exemplo, kerberos.your-realm.com.
    2 core-site.xml polybase.kerberos.realm Especifique o reino de Kerberos. Por exemplo, YOUR-REALM.COM1, 2
    3 core-site.xml hadoop.security.authentication Encontre a configuração do lado do Hadoop e copie para a máquina SQL Server. Por exemplo, KERBEROS1
    4 hdfs-site.xml dfs.namenode.kerberos.principal Encontre a configuração do lado do Hadoop e copie para a máquina SQL Server. Por exemplo, hdfs/_HOST@YOUR-REALM.COM
    5 mapred-site.xml mapreduce.jobhistory.principal Encontre a configuração do lado do Hadoop e copie para a máquina SQL Server. Por exemplo, mapred/_HOST@YOUR-REALM.COM
    6 mapred-site.xml mapreduce.jobhistory.address Encontre a configuração do lado do Hadoop e copie para a máquina SQL Server. Por exemplo, 10.xxx.xxx.174:10020
    7 yarn-site.xml yarn.resourcemanager.principal Encontre a configuração do lado do Hadoop e copie para a máquina SQL Server. Por exemplo, yarn/_HOST@YOUR-REALM.COM

    1 Este valor deve ser escrito em maiúsculas.
    2 Multi-reino não é suportado.

  4. Crie um objeto credencial com âmbito de base de dados para especificar a informação de autenticação para cada utilizador Hadoop. Para mais informações, consulte a referência Transact-SQL PolyBase.