다음을 통해 공유


명령줄 도구를 사용하여 Spark 작업 제출

적용 대상: SQL Server 2019(15.x)

이 문서에서는 명령줄 도구를 사용하여 SQL Server 빅 데이터 클러스터에서 Spark 작업을 실행하는 방법에 대한 지침을 제공합니다.

Important

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

필수 조건

azdata 또는 Livy를 사용하는 Spark 작업

이 문서에는 명령줄 패턴을 사용하여 SQL Server 빅 데이터 클러스터에 Spark 애플리케이션을 제출하는 방법의 예제가 나와 있습니다.

Azure Data CLI azdata bdc spark 명령은 명령줄에서 SQL Server 빅 데이터 클러스터 Spark의 모든 기능을 표시합니다. 이 문서에서는 주로 작업 제출에 대해 다룹니다. 또한 azdata bdc spark 명령을 통해 azdata bdc spark session Python, Scala, SQL 및 R에 대한 대화형 모드도 지원합니다.

REST API와 직접 통합해야 하는 경우 표준 Livy 호출을 사용하여 작업을 제출합니다. 이 문서에서는 Livy 예제에서 curl 명령줄 도구를 사용하여 REST API 호출을 실행합니다. Python 코드를 사용하여 Spark Livy 엔드포인트와 상호 작용하는 방법을 보여 주는 자세한 예제는 GitHub의 Livy 엔드포인트에서 Spark 사용을 참조하세요.

빅 데이터 클러스터 Spark를 사용하는 간단한 ETL

ETL(추출, 변환 및 로드) 애플리케이션은 일반적인 데이터 엔지니어링 패턴을 따릅니다. HDFS(Apache Hadoop 분산 파일 시스템) 랜딩 존 경로에서 표 형식 데이터를 로드합니다. 그런 다음 테이블 형식을 사용하여 HDFS 처리 영역 경로에 씁니다.

샘플 애플리케이션의 데이터 세트를 다운로드합니다. 그런 다음 PySpark, Spark Scala 또는 Spark SQL을 사용하여 PySpark 애플리케이션을 만듭니다.

다음 섹션에서는 각 솔루션에 대한 샘플 연습을 찾을 수 있습니다. 플랫폼에 대한 탭을 선택합니다. 사용하거나 curl.를 사용하여 azdata 애플리케이션을 실행합니다.

이 예제에서는 다음 PySpark 애플리케이션을 사용합니다. 로컬 컴퓨터에서 parquet_etl_sample.py이라는 Python 파일로 저장됩니다.

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

# Read clickstream_data from storage pool HDFS into a Spark data frame. Applies column renames.
df = spark.read.option("inferSchema", "true").csv('/securelake/landing/criteo/test.txt', sep='\t', 
    header=False).toDF("feat1","feat2","feat3","feat4","feat5","feat6","feat7","feat8",
    "feat9","feat10","feat11","feat12","feat13","catfeat1","catfeat2","catfeat3","catfeat4",
    "catfeat5","catfeat6","catfeat7","catfeat8","catfeat9","catfeat10","catfeat11","catfeat12",
    "catfeat13","catfeat14","catfeat15","catfeat16","catfeat17","catfeat18","catfeat19",
    "catfeat20","catfeat21","catfeat22","catfeat23","catfeat24","catfeat25","catfeat26")

# Print the data frame inferred schema
df.printSchema()

tot_rows = df.count()
print("Number of rows:", tot_rows)

# Drop the managed table
spark.sql("DROP TABLE dl_clickstream")

# Write data frame to HDFS managed table by using optimized Delta Lake table format
df.write.format("parquet").mode("overwrite").saveAsTable("dl_clickstream")

print("Sample ETL pipeline completed")

PySpark 애플리케이션을 HDFS에 복사

클러스터가 실행을 위해 액세스할 수 있도록 HDFS에 애플리케이션을 저장합니다. 모범 사례로, 클러스터 내의 애플리케이션 위치를 표준화하고 관리하여 관리를 간소화합니다.

이 예제 사용 사례에서는 모든 ETL 파이프라인 애플리케이션이 hdfs:/apps/ETL-Pipelines 경로에 저장됩니다 . 샘플 애플리케이션은 hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py에 저장됩니다.

다음 명령을 실행하여 로컬 개발 또는 준비 컴퓨터에서 HDFS 클러스터로 parquet_etl_sample.py 업로드합니다.

azdata bdc hdfs cp --from-path parquet_etl_sample.py  --to-path "hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py"

Spark 애플리케이션 실행

다음 명령을 사용하여 실행을 위해 애플리케이션을 SQL Server 빅 데이터 클러스터 Spark에 제출합니다.

azdata 명령은 일반적으로 지정된 매개 변수를 사용하여 애플리케이션을 실행합니다. 에 대한 전체 매개 변수 옵션은 다음을 azdata bdc spark batch create참조하세요 azdata bdc spark.

이 애플리케이션에는 spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation 구성 매개 변수가 필요합니다. 따라서 이 명령은 --config 옵션을 사용합니다. 이 설정은 Spark 세션에 구성을 전달하는 방법을 보여 줍니다.

--config 옵션을 사용하여 여러 구성 매개 변수를 지정할 수 있습니다. 개체의 구성을 설정하여 애플리케이션 세션 내에서 지정할 수도 있습니다 SparkSession .

azdata bdc spark batch create -f hdfs:/apps/ETL-Pipelines/parquet_etl_sample.py \
--config '{"spark.sql.legacy.allowCreatingManagedTableUsingNonemptyLocation":"true"}' \
-n MyETLPipelinePySpark --executor-count 2 --executor-cores 2 --executor-memory 1664m

Warning

일괄 처리 이름의 "name" 또는 "n" 매개 변수는 새 일괄 처리를 만들 때마다 고유해야 합니다.

Spark 작업 모니터링

azdata bdc spark batch 명령에서는 Spark 일괄 작업을 위한 관리 작업을 제공합니다.

실행 중인 모든 작업을 나열하려면 다음 명령을 실행합니다.

  • azdata 명령은 다음을 수행합니다.

    azdata bdc spark batch list -o table
    
  • curl Livy를 사용하는 명령:

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches
    

지정된 ID를 사용하여 Spark 일괄 처리에 대한 정보를 가져오려면 다음 명령을 실행합니다. 에서 batch id 반환 spark batch create됩니다.

  • azdata 명령은 다음을 수행합니다.

    azdata bdc spark batch info --batch-id 0
    
  • curl Livy를 사용하는 명령:

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches/<BATCH_ID>
    

지정된 ID를 사용하여 Spark 일괄 처리에 대한 상태 정보를 가져오려면 다음 명령을 실행합니다.

  • azdata 명령은 다음을 수행합니다.

    azdata bdc spark batch state --batch-id 0
    
  • curl Livy를 사용하는 명령:

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches/<BATCH_ID>/state
    

지정된 ID를 사용하여 Spark 일괄 처리에 대한 로그를 가져오려면 다음 명령을 실행합니다.

  • azdata 명령은 다음을 수행합니다.

    azdata bdc spark batch log --batch-id 0
    
  • curl Livy를 사용하는 명령:

    curl -k -u <USER>:<PASSWORD> -X POST <LIVY_ENDPOINT>/batches/<BATCH_ID>/log
    

다음 단계

Spark 코드 문제 해결에 대한 자세한 내용은 PySpark Notebook 문제 해결을 참조하세요.

포괄적인 Spark 샘플 코드는 GitHub의 SQL Server 빅 데이터 클러스터 Spark 샘플에서 사용할 수 있습니다.

SQL Server 빅 데이터 클러스터 및 관련 시나리오에 대한 자세한 내용은 SQL Server 빅 데이터 클러스터를 참조하세요.