Apache Sqoop을 사용하여 HDInsight의 Apache Hadoop과 Azure SQL Database 간에 데이터 가져오기 및 내보내기

Apache Sqoop을 사용하여 Azure HDInsight의 Apache Hadoop 클러스터와 Azure SQL Database 또는 Microsoft SQL Server 간에서 가져오기 및 내보내기를 수행하는 방법을 알아봅니다. 이 문서의 단계에서는 Hadoop 클러스터의 헤드에서 직접 sqoop 명령을 사용합니다. SSH를 사용하여 헤드 노드에 연결하고 이 문서의 명령을 실행합니다. 이 문서는 HDInsight에서 Hadoop과 함께 Apache Sqoop 사용의 연속입니다.

필수 조건

설정

  1. ssh command 명령을 사용하여 클러스터에 연결합니다. CLUSTERNAME을 클러스터 이름으로 바꿔서 아래 명령을 편집하고, 다음 명령을 입력합니다.

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. 사용 편의성을 위해 변수를 설정합니다. PASSWORD, MYSQLSERVER, MYDATABASE를 관련 값으로 바꾸고 아래 명령을 입력합니다.

    export PASSWORD='PASSWORD'
    export SQL_SERVER="MYSQLSERVER"
    export DATABASE="MYDATABASE"
    
    
    export SERVER_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD"
    export SERVER_DB_CONNECT="jdbc:sqlserver://$SQL_SERVER.database.windows.net:1433;user=sqluser;password=$PASSWORD;database=$DABATASE"
    

Sqoop 내보내기

Hive에서 SQL로 내보냅니다.

  1. Sqoop에서 데이터베이스를 볼 수 있는지 확인하려면 열린 SSH 연결에 아래 명령을 입력합니다. 이 명령은 데이터베이스 목록을 반환합니다.

    sqoop list-databases --connect $SERVER_CONNECT
    
  2. 다음 명령을 입력하여 지정된 데이터베이스에 대한 테이블 목록을 표시합니다.

    sqoop list-tables --connect $SERVER_DB_CONNECT
    
  3. Hive hivesampletable 테이블의 데이터를 데이터베이스의 mobiledata 테이블에 내보내려면 열린 SSH 연결에 아래 명령을 입력합니다.

    sqoop export --connect $SERVER_DB_CONNECT \
    -table mobiledata \
    --hcatalog-table hivesampletable
    
  4. 데이터를 내보냈는지 확인하려면 SSH 연결에서 다음 쿼리를 사용하여 내보낸 데이터를 확인합니다.

    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT COUNT(*) from dbo.mobiledata WITH (NOLOCK)"
    
    
    sqoop eval --connect $SERVER_DB_CONNECT \
    --query "SELECT TOP(10) * from dbo.mobiledata WITH (NOLOCK)"
    

Sqoop 가져오기

SQL에서 Azure Storage로 가져옵니다.

  1. SQL의 mobiledata 테이블에서 HDInsight의 wasbs:///tutorials/usesqoop/importeddata 디렉터리로 데이터를 가져오려면 열린 SSH 연결에 아래 명령을 입력합니다. 데이터의 필드는 탭 문자로 구분되어 있으며 줄은 줄 바꿈 문자로 종료됩니다.

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' -m 1
    
  2. 또는 Hive 테이블을 지정할 수도 있습니다.

    sqoop import --connect $SERVER_DB_CONNECT \
    --table mobiledata \
    --target-dir 'wasb:///tutorials/usesqoop/importeddata2' \
    --fields-terminated-by '\t' \
    --lines-terminated-by '\n' \
    --create-hive-table \
    --hive-table mobiledata_imported2 \
    --hive-import -m 1
    
  3. 가져오기가 완료되면 열린 SSH 연결에 다음 명령을 입력하여 새 디렉터리에 데이터를 나열합니다.

    hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
    
  4. beeline을 사용하여 테이블이 Hive에 만들어졌는지 확인합니다.

    1. 연결

      beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
      
    2. 한 번에 하나씩 아래 각 쿼리를 실행하고 출력을 검토합니다.

      show tables;
      describe mobiledata_imported2;
      SELECT COUNT(*) FROM mobiledata_imported2;
      SELECT * FROM mobiledata_imported2 LIMIT 10;
      
    3. !exit를 사용하여 beeline을 종료합니다.

제한 사항

  • 대량 내보내기 - Linux 기반 HDInsight와 함께 SQL에 데이터를 내보내는 데 사용된 Sqoop 커넥터도 대량 삽입을 지원하지 않습니다.

  • Batch - Linux 기반 HDInsight에서 삽입을 수행할 때 -batch 스위치를 사용하는 경우 Sqoop은 삽입 작업을 일괄 처리하는 대신 여러 번의 삽입 작업을 수행합니다.

중요 사항

다음 단계

이제 Sqoop을 사용하는 방법에 대해 알아봤습니다. 자세한 내용은 다음을 참조하세요.