PolyBase 문제 해결PolyBase troubleshooting

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

PolyBase 문제를 해결하려면 이 항목에 나와 있는 기술을 사용합니다.To troubleshoot PolyBase, use the techniques found in this topic.

카탈로그 뷰Catalog views

PolyBase 작업을 관리하려면 여기에 나와 있는 카탈로그 뷰를 사용합니다.Use the catalog views listed here to manage PolyBase operations.

보기View 설명Description
sys.external_tables(Transact-SQL)sys.external_tables (Transact-SQL) 외부 테이블을 식별합니다.Identifies external tables.
sys.external_data_sources(Transact-SQL)sys.external_data_sources (Transact-SQL) 외부 데이터 원본을 식별합니다.Identifies external data sources.
sys.external_file_formats(Transact-SQL)sys.external_file_formats (Transact-SQL) 외부 파일 형식을 식별합니다.Identifies external file formats.

동적 관리 뷰Dynamic Management Views

sys.dm_exec_compute_node_errors(Transact-SQL)sys.dm_exec_compute_node_errors (Transact-SQL) sys.dm_exec_compute_node_status(Transact-SQL)sys.dm_exec_compute_node_status (Transact-SQL)
sys.dm_exec_compute_nodes(Transact-SQL)sys.dm_exec_compute_nodes (Transact-SQL) sys.dm_exec_distributed_request_steps(Transact-SQL)sys.dm_exec_distributed_request_steps (Transact-SQL)
sys.dm_exec_distributed_requests(Transact-SQL)sys.dm_exec_distributed_requests (Transact-SQL) sys.dm_exec_distributed_sql_requests(Transact-SQL)sys.dm_exec_distributed_sql_requests (Transact-SQL)
sys.dm_exec_dms_services(Transact-SQL)sys.dm_exec_dms_services (Transact-SQL) sys.dm_exec_dms_workers(Transact-SQL)sys.dm_exec_dms_workers (Transact-SQL)
sys.dm_exec_external_operations(Transact-SQL)sys.dm_exec_external_operations (Transact-SQL) sys.dm_exec_external_work(Transact-SQL)sys.dm_exec_external_work (Transact-SQL)

PolyBase 쿼리는 sys.dm_exec_distributed_request_steps 내에 있는 일련의 단계로 나뉩니다.PolyBase queries are broken into a series of steps within sys.dm_exec_distributed_request_steps. 다음 표에는 단계 이름과 연결된 DMV 간의 매핑이 나와 있습니다.The following table provides a mapping from the step name to the associated DMV.

PolyBase 단계PolyBase Step 연결된 DMVAssociated DMV
HadoopJobOperationHadoopJobOperation sys.dm_exec_external_operationssys.dm_exec_external_operations
RandomIdOperationRandomIdOperation sys.dm_exec_distributed_request_stepssys.dm_exec_distributed_request_steps
HadoopRoundRobinOperationHadoopRoundRobinOperation sys.dm_exec_dms_workerssys.dm_exec_dms_workers
StreamingReturnOperationStreamingReturnOperation sys.dm_exec_dms_workerssys.dm_exec_dms_workers
OnOperationOnOperation sys.dm_exec_distributed_sql_requestssys.dm_exec_distributed_sql_requests

DMV를 사용하여 PolyBase 쿼리를 모니터링하려면To monitor PolyBase queries using DMVs

다음의 DMV를 사용하여 PolyBase를 모니터링하고 문제를 해결합니다.Monitor and troubleshoot PolyBase queries using the following DMVs.

  1. 가장 오래 실행되는 쿼리 찾기Find the longest running queries

    가장 오래 실행되는 쿼리의 실행 ID를 기록합니다.Record the execution ID of the longest running query.

     -- Find the longest running query  
    SELECT execution_id, st.text, dr.total_elapsed_time  
    FROM sys.dm_exec_distributed_requests  dr  
         cross apply sys.dm_exec_sql_text(sql_handle) st  
    ORDER BY total_elapsed_time DESC;  
    
  2. 분산 쿼리의 가장 오래 실행되는 단계 찾기Find the longest running step of the distributed query

    이전 단계에서 기록된 실행 ID를 사용하여Use the execution ID recorded in the previous step. 가장 오래 실행되는 단계의 단계 인덱스를 기록합니다.Record the step index of the longest running step.

    가장 오래 실행되는 단계의 location_type를 확인합니다.Check the location_type of longest running step:

    • Head 또는 Compute: SQL 작업을 의미합니다.Head or Compute: implies a SQL operation. 3a단계를 진행합니다.Proceed with Step 3a.

    • DMS: PolyBase 데이터 이동 서비스 작업을 의미합니다.DMS: implies a PolyBase Data Movement Service operation. 3b단계를 진행합니다.Proceed with Step 3b.

    -- Find the longest running step of the distributed query plan  
    SELECT execution_id, step_index, operation_type, distribution_type,   
    location_type, status, total_elapsed_time, command   
    FROM sys.dm_exec_distributed_request_steps   
    WHERE execution_id = 'QID4547'   
    ORDER BY total_elapsed_time DESC;  
    
  3. 가장 오래 실행되는 단계의 실행 진행률 찾기Find the execution progress of the longest running step

    1. SQL 단계의 실행 진행률 찾기Find the execution progress of a SQL step

      이전 단계에서 기록된 실행 ID 및 단계 인덱스를 사용합니다.Use the execution ID and step index recorded in the previous steps. 이전 단계에서 기록된 실행 ID 및 단계 인덱스를 사용합니다.Use the execution ID and step index recorded in the previous steps.

      -- Find the execution progress of SQL step    
      SELECT execution_id, step_index, distribution_id, status,   
      total_elapsed_time, row_count, command   
      FROM sys.dm_exec_distributed_sql_requests   
      WHERE execution_id = 'QID4547' and step_index = 1;  
      
    2. DMS 단계의 실행 진행률 찾기Find the execution progress of a DMS step

      이전 단계에서 기록된 실행 ID 및 단계 인덱스를 사용합니다.Use the execution ID and step index recorded in the previous steps.

      -- Find the execution progress of DMS step    
      SELECT execution_id, step_index, dms_step_index, status,   
      type, bytes_processed, total_elapsed_time  
      FROM sys.dm_exec_dms_workers   
      WHERE execution_id = 'QID4547'   
      ORDER BY total_elapsed_time DESC;  
      
  4. 외부 DMS 작업에 대한 정보 찾기Find the information about external DMS operations

    이전 단계에서 기록된 실행 ID 및 단계 인덱스를 사용합니다.Use the execution ID and step index recorded in the previous steps.

    SELECT execution_id, step_index, dms_step_index, compute_node_id,   
    type, input_name, length, total_elapsed_time, status   
    FROM sys.dm_exec_external_work   
    WHERE execution_id = 'QID4547' and step_index = 7   
    ORDER BY total_elapsed_time DESC;  
    

PolyBase 쿼리 계획을 보려면To view the PolyBase query plan

  1. SSMS에서 Ctrl+M을 눌러 실제 실행 계획 포함 을 사용하도록 설정하고 쿼리를 실행합니다.In SSMS, enable Include Actual Execution Plan (Ctrl + M) and run the query.

  2. 실행 계획 탭을 클릭합니다.Click the Execution plan tab.

    PolyBase 쿼리 계획PolyBase query plan

  3. 원격 쿼리 연산자 를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click on the Remote Query operator and select Properties.

  4. 원격 쿼리 값을 복사한 다음 텍스트 편집기에 붙여넣어 XML 원격 쿼리 계획을 확인합니다.Copy and paste the Remote Query value into a text editor to view the XML remote query plan. 아래에 예가 나와 있습니다.An example is shown below.

    
    <dsql_query number_nodes="1" number_distributions="8" number_distributions_per_node="8">  
      <sql>ExecuteMemo explain query</sql>  
      <dsql_operations total_cost="0" total_number_operations="6">  
        <dsql_operation operation_type="RND_ID">  
          <identifier>TEMP_ID_74</identifier>  
        </dsql_operation>  
        <dsql_operation operation_type="ON">  
          <location permanent="false" distribution="AllDistributions" />  
          <sql_operations>  
            <sql_operation type="statement">CREATE TABLE [tempdb].[dbo].[TEMP_ID_74] ([SensorKey] INT NOT NULL, [CustomerKey] INT NOT NULL, [GeographyKey] INT, [Speed] FLOAT(53) NOT NULL, [YearMeasured] INT NOT NULL ) WITH(DATA_COMPRESSION=PAGE);</sql_operation>  
          </sql_operations>  
        </dsql_operation>  
        <dsql_operation operation_type="ON">  
          <location permanent="false" distribution="AllDistributions" />  
          <sql_operations>  
            <sql_operation type="statement">EXEC [tempdb].[sys].[sp_addextendedproperty] @name=N'IS_EXTERNAL_STREAMING_TABLE', @value=N'true', @level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'TEMP_ID_74'</sql_operation>  
          </sql_operations>  
        </dsql_operation>  
        <dsql_operation operation_type="ON">  
          <location permanent="false" distribution="AllDistributions" />  
          <sql_operations>  
            <sql_operation type="statement">UPDATE STATISTICS [tempdb].[dbo].[TEMP_ID_74] WITH ROWCOUNT = 2401, PAGECOUNT = 7</sql_operation>  
          </sql_operations>  
        </dsql_operation>  
        <dsql_operation operation_type="MULTI">  
          <dsql_operation operation_type="STREAMING_RETURN">  
            <operation_cost cost="1" accumulative_cost="1" average_rowsize="24" output_rows="5762.1" />  
            <location distribution="AllDistributions" />  
            <select>SELECT [T1_1].[SensorKey] AS [SensorKey],  
           [T1_1].[CustomerKey] AS [CustomerKey],  
           [T1_1].[GeographyKey] AS [GeographyKey],  
           [T1_1].[Speed] AS [Speed],  
           [T1_1].[YearMeasured] AS [YearMeasured]  
    FROM   (SELECT [T2_1].[SensorKey] AS [SensorKey],  
                   [T2_1].[CustomerKey] AS [CustomerKey],  
                   [T2_1].[GeographyKey] AS [GeographyKey],  
                   [T2_1].[Speed] AS [Speed],  
                   [T2_1].[YearMeasured] AS [YearMeasured]  
            FROM   [tempdb].[dbo].[TEMP_ID_74] AS T2_1  
            WHERE  ([T2_1].[Speed] > CAST (6.50000000000000000E+001 AS FLOAT))) AS T1_1</select>  
          </dsql_operation>  
          <dsql_operation operation_type="ExternalRoundRobinMove">  
            <operation_cost cost="16.594848" accumulative_cost="17.594848" average_rowsize="24" output_rows="19207" />  
            <external_uri>hdfs://10.193.26.177:8020/Demo/car_sensordata.tbl/</external_uri>  
            <destination_table>[TEMP_ID_74]</destination_table>  
          </dsql_operation>  
        </dsql_operation>  
        <dsql_operation operation_type="ON">  
          <location permanent="false" distribution="AllDistributions" />  
          <sql_operations>  
            <sql_operation type="statement">DROP TABLE [tempdb].[dbo].[TEMP_ID_74]</sql_operation>  
          </sql_operations>  
        </dsql_operation>  
      </dsql_operations>  
    </dsql_query>  
    

PolyBase 그룹에서 노드를 모니터링하려면To monitor nodes in a PolyBase group

PolyBase 규모 확장 그룹의 일부분으로 컴퓨터 집합을 구성한 후에는 컴퓨터의 상태를 모니터링할 수 있습니다.After configuring a set of machines as part of a PolyBase scale out group, you can monitor the status of the machines. 스케일 아웃 그룹을 만드는 방법은 PolyBase 스케일 아웃 그룹을 참조하세요.For details on creating a scale out group, see PolyBase scale-out groups.

  1. 그룹의 헤드 노드에서 SQL Server에 연결합니다.Connect to SQL Server on the head node of a group.

  2. DMV sys.dm_exec_compute_nodes(Transact-SQL) 를 실행하여 PolyBase 그룹의 모든 노드를 확인합니다.Run the DMV sys.dm_exec_compute_nodes (Transact-SQL) to view all the nodes in the PolyBase Group.

  3. DMV sys.dm_exec_compute_node_status(Transact-SQL) 를 실행하여 PolyBase 그룹의 모든 노드의 상태를 확인합니다.Run the DMV sys.dm_exec_compute_node_status (Transact-SQL) to view the status of all the nodes in the PolyBase Group.

    알려진 제한 사항Known Limitations

    PolyBase에는 다음과 같은 제한 사항이 있습니다.PolyBase has the following limitations:

    • 가변 길이 열의 전체 길이를 포함하여 행의 최대 가능 크기는 SQL Server에서 32KB를 초과하거나, Azure SQL Data Warehouse에서 1MB를 초과할 수 없습니다.The maximum possible row size, including the full length of variable length columns, can not exceed 32 KB in SQL Server or 1 MB in Azure SQL Data Warehouse.
    • PolyBase는 Hive 0.12+ 데이터 유형(즉, Char(), VarChar())을 지원하지 않습니다.PolyBase doesn’t support the Hive 0.12+ data types (i.e. Char(), VarChar())
    • SQL Server 또는 Azure SQL Data Warehouse에서 ORC 파일 형식으로 데이터를 내보낼 때 텍스트가 많은 열은 java 메모리 부족 오류로 인해 50개 이내로 제한될 수 있습니다.When exporting data into an ORC File Format from SQL Server or Azure SQL Data Warehouse text heavy columns can be limited to as few as 50 columns due to java out of memory errors. 이 문제를 해결하려면 열의 하위 집합만 내보냅니다.To work around this, export only a subset of the columns.
    • Hadoop에서 암호화된 미사용 데이터를 읽거나 쓸 수 없습니다.Cannot Read or Write data encrypted at rest in Hadoop. 여기에는 HDFS 암호화 영역 또는 투명 암호화가 포함됩니다.This includes HDFS Encrypted Zones or Transparent Encryption.
    • KNOX가 활성화되어 있으면 PolyBase가 Hortonworks 인스턴스에 연결할 수 없습니다.PolyBase cannot connect to a Hortonworks instance if KNOX is enabled.
    • 트랜잭션이 true인 Hive 테이블을 사용하는 경우 PolyBase는 Hive 테이블의 디렉터리에 있는 데이터에 액세스할 수 없습니다.If you are using Hive tables with transactional = true, PolyBase cannot access the data in the Hive table's directory.

PolyBase는 SQL Server 2016 장애 조치(Failover) 클러스터에 노드를 추가하는 경우 설치되지 않습니다.PolyBase doesn't install when you add a node to a SQL Server 2016 Failover Cluster

Hadoop 이름 노드 고가용성Hadoop Name Node High Availability

PolyBase는 오늘 Zookeeper 또는 Knox와 같은 이름 노드 HA 서비스와 인터페이스하지 않습니다.PolyBase does not interface with Name Node HA services like Zookeeper or Knox today. 하지만 기능을 제공하는 데 사용할 수 있는 검증된 해결 방법이 있습니다.However, there is a proven workaround that can be used to provide the functionality.

해결 방법: DNS 이름을 사용하여 활성 이름 노드에 대한 연결을 다시 라우팅합니다.Work Around: Use DNS name to reroute connections to the active Name Node. 이렇게 하려면 외부 데이터 원본이 DNS 이름을 사용하여 이름 노드와 통신하는지 확인해야 합니다.In order to do this, you will need to ensure that the External Data Source is using a DNS name to communicate with the Name Node. 이름 노드 장애 조치(failover)가 발생하면 외부 데이터 원본 정의에 사용된 DNS 이름과 연결된 IP 주소를 변경해야 합니다.When Name Node Failover occurs, you will need to change the IP address associated with the DNS name used in the External Data Source definition. 그러면 모든 새 연결이 올바른 이름 노드로 다시 라우팅됩니다.This will reroute all new connections to the correct Name Node. 장애 조치(failover)가 발생하면 기존 연결이 실패합니다.Existing connections will fail when failover occurs. 이 프로세스를 자동화하기 위해 "하트 비트"가 활성 이름 노드를 ping할 수 있습니다.To automate this process, a "heartbeat" can ping the active Name Node. 하트 비트가 실패하면 장애 조치(failover)가 발생했다고 가정하고 보조 IP 주소로 자동 전환할 수 있습니다.If the heart beat fails, one can assume a failover has occured and automatically switch to the secondaries IP address.

오류 메시지 및 가능한 해결 방법Error messages and possible solutions

외부 테이블 오류 문제를 해결하려면 Murshed Zaman 블로그 https://blogs.msdn.microsoft.com/sqlcat/2016/06/21/polybase-setup-errors-and-possible-solutions/(PolyBase 설치 오류 및 가능한 해결 방법)를 참조하세요.To troubleshoot external table errors, see Murshed Zaman's blog https://blogs.msdn.microsoft.com/sqlcat/2016/06/21/polybase-setup-errors-and-possible-solutions/.

참고 항목See also

PolyBase Kerberos 연결 문제 해결Troubleshoot PolyBase Kerberos connectivity