다음을 통해 공유


Azure Synapse Analytics를 사용하여 Apache Spark에 .NET 사용

.NET for Apache Spark는 Spark를 위한 무료 플랫폼 간 오픈 소스 .NET 지원을 제공합니다.

C# 및 F#을 통해 Spark API에 액세스할 수 있도록 허용하는 Spark에 대한 .NET 바인딩을 제공합니다. .NET for Apache Spark를 사용하면 .NET으로 작성된 Spark용 사용자 정의 함수를 작성하고 실행할 수도 있습니다. Spark용 .NET API를 사용하면 Spark SQL, Delta Lake, 구조적 스트림을 포함하여 데이터를 분석하는 데 도움이 되는 Spark DataFrames의 모든 요소에 액세스할 수 있습니다.

Spark 일괄 작업 정의 또는 대화형 Azure Synapse Analytics Notebook을 통해 Apache Spark용 .NET을 사용하여 데이터를 분석할 수 있습니다. 이 문서에서는 두 가지 기법을 사용하여 Azure Synapse에서 Apache Spark용 .NET을 사용하는 방법에 대해 알아봅니다.

Important

.NET for Apache Spark는 현재 지원 중단 상태에 도달한 .NET 3.1 라이브러리를 필요로 하는 .NET Foundation의 오픈 소스 프로젝트입니다. Azure Synapse Spark 사용자에게 Apache Spark 버전 3.3용 Azure Synapse Runtime에서 Apache Spark 라이브러리용 .NET이 제거됨을 알려드리고자 합니다. 이 문제에 대한 자세한 내용은 .NET 지원 정책을 참조하세요.

따라서 사용자는 더 이상 C# 및 F#을 통해 Apache Spark API를 활용하거나 Synapse 내의 Notebooks에서 또는 Synapse의 Apache Spark 작업 정의를 통해 C# 코드를 실행할 수 없습니다. 이 변경 내용은 Apache Spark 3.3 이상용 Azure Synapse 런타임에만 영향을 줍니다.

수명 주기 단계에 따라 Azure Synapse 런타임의 모든 이전 버전에서 Apache Spark용 .NET을 계속 지원할 것입니다. 그러나 Apache Spark 3.3 및 이후 버전용 Azure Synapse 런타임에서 Apache Spark용 .NET을 지원할 계획은 없습니다. C# 또는 F#으로 작성된 기존 워크로드가 있는 사용자는 Python 또는 Scala로 마이그레이션하는 것이 좋습니다. 사용자는 이 정보를 기록하고 그에 따라 계획하는 것이 좋습니다.

Spark 작업 정의를 사용하여 일괄 작업 제출

이 자습서를 방문하여 Azure Synapse Analytics를 사용하여 Synapse Spark 풀에 대한 Apache Spark 작업 정의를 만드는 방법을 알아보세요. 앱을 패키징하여 Azure Synapse에 제출하지 않은 경우 다음 단계를 완료합니다.

  1. Synapse Spark와의 호환성을 위해 dotnet 애플리케이션 종속성을 구성합니다. 필요한 .NET Spark 버전은 관리 도구 상자 아래에 있는 Apache Spark 풀 구성 아래의 Synapse Studio 인터페이스에 기록됩니다.

    Screenshot that shows properties, including the .NET Spark version.

    Ubuntu x86 실행 파일을 출력하는 .NET 콘솔 애플리케이션으로 프로젝트를 만듭니다.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.Spark" Version="2.1.0" />
      </ItemGroup>
    
    </Project>
    
  2. 다음 명령을 실행하여 앱을 게시합니다. mySparkApp은 해당 앱의 경로로 바꾸어야 합니다.

    cd mySparkApp
    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.18.04-x64
    
  3. 예를 들어 1단계의 결과로 생성된 게시 폴더인 publish.zip의 내용을 압축합니다. 모든 어셈블리는 ZIP 파일의 루트에 있어야 하며 중간 폴더 계층은 없어야 합니다. 즉, publish.zip의 압축을 해제하면 모든 어셈블리가 현재 작업 디렉터리로 추출됩니다.

    Windows:

    Windows PowerShell 또는 PowerShell 7을 사용하여 게시 디렉터리의 콘텐츠에서 .zip을 만듭니다.

    Compress-Archive publish/* publish.zip -Update
    

    Linux:

    bash 셸을 열고 게시된 모든 바이너리가 있는 bin 디렉터리로 이동(cd)하여 다음 명령을 실행합니다.

    zip -r publish.zip
    

Azure Synapse Analytics Notebook의 Apache Spark용 .NET

Notebook은 Apache Spark 파이프라인과 시나리오에 맞게 .NET 프로토타입을 제작하는 데 유용한 옵션입니다. 데이터를 빠르고 효율적으로 작업하고, 이해하고, 필터링하고, 표시하고, 시각화할 수 있습니다.

데이터 엔지니어, 데이터 과학자, 비즈니스 분석가 및 기계 학습 엔지니어는 모두 공유 대화형 문서를 통해 협업을 수행할 수 있습니다. 데이터 탐색의 즉각적인 결과를 볼 수 있으며 동일한 Notebook에서 데이터를 시각화할 수 있습니다.

.NET for Apache Spark Notebook을 사용하는 방법

새 Notebook을 만들 때는 비즈니스 논리를 표현할 언어 커널을 선택합니다. 커널 지원은 C#을 비롯한 여러 언어로 제공됩니다.

Azure Synapse Analytics Notebook에서 Apache Spark용 .NET을 사용하려면 .NET Spark(C#)를 커널로 선택하고 Notebook을 기존 서버리스 Apache Spark 풀에 연결합니다.

.Net Spark Notebook은 .NET 대화형 환경을 기반으로 하며, 기본적으로 Spark 세션 변수 spark가 미리 정의된 Spark용 .NET을 사용할 수 있는 대화형 C# 환경을 제공합니다.

Notebooks에 NuGet 패키지 설치

NuGet 패키지 이름 앞에 #r nuget 매직 명령을 사용하여 선택한 NuGet 패키지를 Notebook에 설치할 수 있습니다. 다음 다이어그램은 예를 보여줍니다.

Screenshot that shows using #r to install a Spark .NET notebook NuGet package

Notebooks에서 NuGet 패키지를 사용하는 방법에 대한 자세한 내용은 .Net 대화형 설명서를 참조하세요.

.NET for Apache Spark C# 커널 기능

Azure Synapse Analytics Notebook에서 Apache Spark용 .NET을 사용하는 경우 다음 기능을 사용할 수 있습니다.

  • 선언적 HTML: 헤더, 글머리 기호 목록 및 표시 이미지와 같은 HTML 구문을 사용하여 셀에서 출력을 생성합니다.
  • 간단한 C# 문(예: 할당, 콘솔에 인쇄, 예외 throw 등)
  • 여러 줄로 된 C# 코드 블록(예: if 문, foreach 루프, 클래스 정의 등)
  • 표준 C# 라이브러리(예: System, LINQ, 열거형 등)에 대한 액세스
  • C# 8.0 언어 기능 지원
  • Apache Spark 세션에 대한 액세스를 제공하는 spark라는 미리 정의된 변수
  • Apache Spark 내에서 실행할 수 있는 .NET 사용자 정의 함수를 정의하는 기능 지원 Apache Spark용 .NET 대화형 환경에서 UDF를 사용하는 방법을 알아보려면 Apache Spark용 .NET 대화형 환경에서 UDF를 작성하고 호출하는 것이 좋습니다.
  • XPlot.Plotly 라이브러리에서 다양한 차트(예: 꺾은선형, 가로 막대형 또는 히스토그램) 및 레이아웃(예: 단일, 오버레이 등)을 사용하여 Spark 작업의 출력을 시각화하는 기능 지원
  • NuGet 패키지를 C# Notebook에 포함하는 기능

문제 해결

DotNetRunner: null / Futures timeout Synapse Spark 작업 정의 실행에서

Spark 2.4를 사용하는 Spark 풀의 Synapse Spark 작업 정의에는 Microsoft.Spark 1.0.0이 필요합니다. binobj 디렉터리를 지우고 1.0.0을 사용하여 프로젝트를 게시합니다.

OutOfMemoryError: org.apache.spark의 java 힙 공간...

Dotnet Spark 1.0.0은 1.1.1 이상과 다른 디버그 아키텍처를 사용합니다. 게시된 버전에는 1.0.0을 사용하고 로컬 디버깅에는 1.1.1 이상을 사용해야 합니다.

다음 단계