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 사용의 연속입니다.
필수 조건
SSH 클라이언트. 자세한 내용은 SSH를 사용하여 HDInsight(Apache Hadoop)에 연결을 참조하세요.
Sqoop에 익숙해야 합니다. 자세한 내용은 Sqoop 사용자 가이드를 참조하세요.
설정
ssh command 명령을 사용하여 클러스터에 연결합니다. CLUSTERNAME을 클러스터 이름으로 바꿔서 아래 명령을 편집하고, 다음 명령을 입력합니다.
ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
사용 편의성을 위해 변수를 설정합니다.
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로 내보냅니다.
Sqoop에서 데이터베이스를 볼 수 있는지 확인하려면 열린 SSH 연결에 아래 명령을 입력합니다. 이 명령은 데이터베이스 목록을 반환합니다.
sqoop list-databases --connect $SERVER_CONNECT
다음 명령을 입력하여 지정된 데이터베이스에 대한 테이블 목록을 표시합니다.
sqoop list-tables --connect $SERVER_DB_CONNECT
Hive
hivesampletable
테이블의 데이터를 데이터베이스의mobiledata
테이블에 내보내려면 열린 SSH 연결에 아래 명령을 입력합니다.sqoop export --connect $SERVER_DB_CONNECT \ -table mobiledata \ --hcatalog-table hivesampletable
데이터를 내보냈는지 확인하려면 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로 가져옵니다.
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
또는 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
가져오기가 완료되면 열린 SSH 연결에 다음 명령을 입력하여 새 디렉터리에 데이터를 나열합니다.
hadoop fs -tail /tutorials/usesqoop/importeddata/part-m-00000
beeline을 사용하여 테이블이 Hive에 만들어졌는지 확인합니다.
연결
beeline -u 'jdbc:hive2://headnodehost:10001/;transportMode=http'
한 번에 하나씩 아래 각 쿼리를 실행하고 출력을 검토합니다.
show tables; describe mobiledata_imported2; SELECT COUNT(*) FROM mobiledata_imported2; SELECT * FROM mobiledata_imported2 LIMIT 10;
!exit
를 사용하여 beeline을 종료합니다.
제한 사항
대량 내보내기 - Linux 기반 HDInsight와 함께 SQL에 데이터를 내보내는 데 사용된 Sqoop 커넥터도 대량 삽입을 지원하지 않습니다.
Batch - Linux 기반 HDInsight에서 삽입을 수행할 때
-batch
스위치를 사용하는 경우 Sqoop은 삽입 작업을 일괄 처리하는 대신 여러 번의 삽입 작업을 수행합니다.
중요 사항
HDInsight와 SQL Server가 모두 동일한 Azure Virtual Network에 있어야 합니다.
예를 들어 HDInsight를 온-프레미스 네트워크 문서에 연결하는 방법을 참조하세요.
Azure Virtual Network에서 HDInsight를 사용하는 방법에 대한 자세한 내용은 Azure Virtual Network 문서를 사용하여 HDInsight를 확장하는 방법을 참조하세요. Azure Virtual Network에 대한 자세한 내용은 가상 네트워크 개요 문서를 참조하세요.
SQL Server는 SQL 인증을 허용하도록 구성되어야 합니다. 자세한 내용은 인증 모드 선택 문서를 참조하세요.
SQL Server를 원격 연결을 허용하도록 구성해야 할 수 있습니다.
다음 단계
이제 Sqoop을 사용하는 방법에 대해 알아봤습니다. 자세한 내용은 다음을 참조하세요.
- HDInsight와 함께 Apache Oozie 사용: Oozie 워크플로에서 Sqoop 작업을 사용합니다.
- HDInsight를 사용하여 플라이트 지연 데이터 분석: Interactive Query를 사용하여 플라이트 지연 데이터를 분석한 다음, Sqoop을 사용하여 데이터를 Azure의 데이터베이스로 내보냅니다.
- HDInsight에 데이터 업로드: HDInsight/Azure Blob Storage에 데이터를 업로드하는 다른 방법을 찾습니다.