Curl을 사용하여 HDInsight에서 Apache Sqoop 작업 실행

HDInsight의 Apache Hadoop 클러스터에서 Curl을 사용하여 Apache Sqoop 작업을 실행하는 방법에 대해 알아봅니다. 이 문서에서는 Curl을 사용하여 Azure Storage에서 데이터를 내보내고 SQL Server 데이터베이스로 가져오는 방법을 보여 줍니다. 이 문서는 HDInsight에서 Hadoop과 함께 Apache Sqoop 사용의 연속입니다.

Sqoop 작업을 실행하고 모니터링하며 결과를 검색하는 원시 HTTP 요청을 사용하여 HDInsight와 상호 작용하는 방법을 설명하는 데 Curl을 사용합니다. 이 Curl은 HDInsight 클러스터에서 제공하는 WebHCat REST API(이전의 Templeton)를 사용하여 작동합니다.

필수 조건

Curl을 사용하여 Apache Sqoop 작업 제출

Apache Sqoop 작업을 사용하여 Azure Storage에서 SQL Server로 데이터를 내보내는 데 Curl을 사용합니다.

참고 항목

WebHCat에서 Curl 또는 다른 모든 REST 통신을 사용하는 경우 HDInsight 클러스터 관리자의 사용자 이름 및 암호를 제공하여 요청을 인증해야 합니다. 또한 클러스터 이름을 서버로 요청을 보내는 데 사용되는 URI(Uniform Resource Identifier)의 일부로 사용해야 합니다.

이 섹션에서 명령을 사용하는 경우 USERNAME을 클러스터에 인증할 사용자로 바꾸고 PASSWORD를 사용자 계정의 암호로 바꿉니다. CLUSTERNAME을 클러스터의 이름으로 바꿉니다.

REST API는 기본 인증을 통해 보안됩니다. 자격 증명이 안전하게 서버에 전송되도록 하려면 항상 보안 HTTP(HTTPS)를 사용하여 요청해야 합니다.

  1. 사용 편의성을 위해 아래 변수를 설정합니다. 이 예제는 Windows 환경을 기준으로 하므로 환경의 필요에 따라 수정하세요.

    set CLUSTERNAME=
    set USERNAME=admin
    set PASSWORD=
    set SQLDATABASESERVERNAME=
    set SQLDATABASENAME=
    set SQLPASSWORD=
    set SQLUSER=sqluser
    
  2. 명령줄에서 다음 명령을 사용하여 HDInsight 클러스터에 연결할 수 있는지 확인합니다.

    curl -u %USERNAME%:%PASSWORD% -G https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/status
    

    그러면 다음과 같은 응답이 표시됩니다.

    {"status":"ok","version":"v1"}
    
  3. 다음을 사용하여 Sqoop 작업을 제출합니다.

    curl -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% -d command="export --connect jdbc:sqlserver://%SQLDATABASESERVERNAME%.database.windows.net;user=%SQLUSER%@%SQLDATABASESERVERNAME%;password=%PASSWORD%;database=%SQLDATABASENAME% --table log4jlogs --export-dir /example/data/sample.log --input-fields-terminated-by \0x20 -m 1" -d statusdir="wasb:///example/data/sqoop/curl" https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/sqoop
    

    이 명령에서 사용된 매개 변수는 다음과 같습니다.

    • -d - -G가 사용되지 않으므로 요청은 POST 메서드로 기본 설정됩니다. -d 는 요청과 함께 전송되는 데이터 값을 지정합니다.

      • user.name - 명령을 실행하는 사용자입니다.

      • 명령 - 실행할 Sqoop 명령입니다.

      • statusdir - 이 작업의 상태를 기록할 디렉터리입니다.

      이 명령은 작업 상태 확인에 사용할 수 있는 작업 ID를 반환해야 합니다.

      {"id":"job_1415651640909_0026"}
      
  4. 작업 상태를 확인하려면 다음 명령을 사용합니다. JOBID를 이전 단계에서 반환된 값으로 바꿉니다. 예를 들어 반환 값이 {"id":"job_1415651640909_0026"}인 경우, JOBIDjob_1415651640909_0026입니다. 필요에 따라 jq의 위치를 수정합니다.

    set JOBID=job_1415651640909_0026
    
    curl -G -u %USERNAME%:%PASSWORD% -d user.name=%USERNAME% https://%CLUSTERNAME%.azurehdinsight.net/templeton/v1/jobs/%JOBID% | C:\HDI\jq-win64.exe .status.state
    

    작업이 완료되면 상태는 SUCCEEDED가 됩니다.

    참고 항목

    이 Curl 요청은 작업에 관한 정보가 있는 JSON(JavaScript Object Notation) 문서를 반환합니다. jq는 상태 값을 검색하는 데만 사용됩니다.

  5. 작업 상태가 SUCCEEDED로 변경되면 Azure Blob Storage에서 작업 결과를 검색할 수 있습니다. 쿼리와 함께 전달된 statusdir 매개 변수에는 출력 파일의 위치(이 경우 wasb:///example/data/sqoop/curl)가 포함됩니다. 이 주소는 HDInsight 클러스터에서 사용하는 기본 스토리지 컨테이너의 example/data/sqoop/curl 디렉터리에 작업의 출력을 저장합니다.

    Azure Portal을 사용하여 stderr 및 stdout Blob에 액세스할 수 있습니다.

  6. 데이터를 내보냈는지 확인하려면 SQL 클라이언트에서 다음 쿼리를 사용하여 내보낸 데이터를 확인합니다.

    SELECT COUNT(*) FROM [dbo].[log4jlogs] WITH (NOLOCK);
    SELECT TOP(25) * FROM [dbo].[log4jlogs] WITH (NOLOCK);
    

제한 사항

  • 대량 내보내기 - Linux 기반 HDInsight와 함께 Microsoft SQL Server 또는 Azure SQL Database에 데이터를 내보내는 데 사용된 Sqoop 커넥터도 현재 대량 삽입을 지원하지 않습니다.
  • Batch - Linux 기반 HDInsight와 함께 삽입을 수행할 때 -batch 스위치를 사용하는 경우 Sqoop는 삽입 작업을 일괄 처리하는 대신 여러 삽입 작업을 수행합니다.

요약

이 문서에서 볼 수 있듯이 원시 HTTP 요청을 사용하여 HDInsight 클러스터의 Sqoop 작업을 실행하고 모니터링하며 결과를 확인할 수 있습니다.

이 문서에 사용된 REST 인터페이스에 대한 자세한 내용은 Apache Sqoop REST API 가이드를 참조하세요.

다음 단계

HDInsight에서 Apache Hadoop과 함께 Apache Sqoop 사용

curl 관련 기타 HDInsight 문서: