SQL Server 및 Azure SQL용 Apache Spark 커넥터 사용

중요

Microsoft SQL Server 2019 빅 데이터 클러스터 추가 기능이 사용 중지됩니다. SQL Server 2019 빅 데이터 클러스터에 대한 지원은 2025년 2월 28일에 종료됩니다. Software Assurance를 사용하는 SQL Server 2019의 모든 기존 사용자는 플랫폼에서 완전히 지원되며, 소프트웨어는 지원 종료 시점까지 SQL Server 누적 업데이트를 통해 계속 유지 관리됩니다. 자세한 내용은 공지 블로그 게시물Microsoft SQL Server 플랫폼의 빅 데이터 옵션을 참조하세요.

SQL Server 및 Azure SQL용 Apache Spark 커넥터는 빅 데이터 분석에서 트랜잭션 데이터를 사용하고 임시 쿼리 또는 보고에 대한 결과를 유지할 수 있는 고성능 커넥터입니다. 이 커넥터를 사용하면 온-프레미스 또는 클라우드의 모든 SQL 데이터베이스를 Spark 작업에 대한 입력 데이터 원본 또는 출력 데이터 싱크로 사용할 수 있습니다. 이 커넥터는 SQL Server 대량 쓰기 API를 사용합니다. 모든 대량 쓰기 매개 변수는 사용자가 선택적 매개 변수로 전달할 수 있으며 커넥터가 기본 API에 있는 그대로 전달합니다. 대량 쓰기 작업에 대한 자세한 내용은 JDBC 드라이버에서 대량 복사 사용을 참조하세요.

커넥터는 SQL Server 빅 데이터 클러스터에 기본적으로 포함됩니다.

오픈 소스 리포지토리에서 커넥터에 대해 자세히 알아봅니다. 예제를 보려면 샘플을 참조하세요.

새 SQL 테이블에 쓰기

주의

overwrite 모드에서는 데이터베이스에 이미 테이블이 있는 경우 기본적으로 커넥터가 먼저 테이블을 삭제합니다. 예기치 않은 데이터 손실을 방지하려면 이 옵션을 신중하게 사용해야 합니다.

overwrite 모드를 사용하는 경우 truncate 옵션을 사용하지 않으면 테이블을 다시 만들 때 인덱스가 소실됩니다. 예를 들어 columnstore 테이블은 힙이 됩니다. 기존 인덱싱을 유지하려는 경우 true 값으로 truncate 옵션을 지정합니다. 예: .option("truncate",true)

server_name = "jdbc:sqlserver://{SERVER_ADDR}"
database_name = "database_name"
url = server_name + ";" + "databaseName=" + database_name + ";"

table_name = "table_name"
username = "username"
password = "password123!#" # Please specify password here

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("overwrite") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

SQL 테이블에 추가

try:
  df.write \
    .format("com.microsoft.sqlserver.jdbc.spark") \
    .mode("append") \
    .option("url", url) \
    .option("dbtable", table_name) \
    .option("user", username) \
    .option("password", password) \
    .save()
except ValueError as error :
    print("Connector write failed", error)

격리 수준 지정

기본적으로 이 커넥터는 데이터베이스에 대량 삽입을 수행할 때 READ_COMMITTED 격리 수준을 사용합니다. 이를 다른 격리 수준으로 재정의하려면 아래와 같이 mssqlIsolationLevel 옵션을 사용합니다.

    .option("mssqlIsolationLevel", "READ_UNCOMMITTED") \

SQL 테이블에서 읽습니다

jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password).load()

비 Active Directory 모드

비 Active Directory 모드 보안에서 각 사용자에게는 읽기 및/또는 쓰기를 수행하기 위해 커넥터 인스턴스화 중에 매개 변수로 제공해야 하는 사용자 이름과 비밀번호가 있습니다.

비 Active Directory 모드의 커넥터 인스턴스화 예제는 다음과 같습니다. 스크립트를 실행하기 전에 ?를 계정의 값으로 바꿉니다.

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark" 

url = "jdbc:sqlserver://master-p-svc;databaseName=?;"
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("user", ?) \ 
   .option("password",?) 
writer.save() 

Active Directory 모드

Active Directory 모드 보안에서 사용자가 키 탭 파일을 생성한 후에는 커넥터 인스턴스화 중에 매개 변수로 principalkeytab을 제공해야 합니다.

이 모드에서 드라이버는 keytab 파일을 해당 실행기 컨테이너에 로드합니다. 그런 다음 실행기는 보안 주체 이름과 keytab을 사용하여 읽기/쓰기용 JDBC 커넥터를 만드는 데 사용되는 토큰을 생성합니다.

Active Directory 모드의 커넥터 인스턴스화 예제는 다음과 같습니다. 스크립트를 실행하기 전에 ?를 계정의 값으로 바꿉니다.

# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"

url = "jdbc:sqlserver://master-p-svc;databaseName=?;integratedSecurity=true;authenticationScheme=JavaKerberos;" 
writer = df.write \ 
   .format(connector_type)\ 
   .mode("overwrite") 
   .option("url", url) \ 
   .option("principal", ?) \ 
   .option("keytab", ?)   

writer.save() 

다음 단계

빅 데이터 클러스터에 대한 자세한 내용은 Kubernetes에 SQL Server 빅 데이터 클러스터를 배포하는 방법을 참조하세요.

SQL Server 빅 데이터 클러스터 대한 피드백 또는 기능 권장 사항이 있으신가요? SQL Server 빅 데이터 클러스터 피드백에 의견을 남겨 주세요.