Amazon EMR Spark'a Apache Spark için .NET dağıtma

Bu öğretici, Amazon EMR Spark'a bir .NET Apache Spark uygulaması dağıtmayı öğretir. Amazon EMR, AWS üzerinde büyük veri çerçeveleri çalıştırmayı basitleştiren bir yönetilen küme platformudur.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Microsoft.Spark.Worker'i hazırlama
  • Spark .NET uygulamanızı yayımlama
  • Uygulamanızı Amazon EMR Spark'a dağıtma
  • Uygulamanızı çalıştırma

Not

AWS EMR Spark, Linux tabanlıdır. Bu nedenle, uygulamanızı AWS EMR Spark'a dağıtmakla ilgileniyorsanız, uygulamanızın uyumlu olduğundan ve uygulamanızı derlemek için .NET Core derleyicisini .NET Standard emin olun.

Önkoşullar

Başlamadan önce şunları yapın:

  • AWS CLI'yi indirin.
  • Dosyaları install-worker.sh makinenize indirin. Bu, daha sonra bağımlı dosyaları Spark kümenizin çalışan düğümlerine Apache Spark için .NET'i kopyalamak üzere kullanabileceğiniz bir yardımcı betiktir.

Çalışan bağımlılıklarını hazırlama

Microsoft.Spark.Worker, Spark kümenizin tek tek çalışan düğümlerini temel alan bir arka uç bileşenidir. Bir C# UDF (Kullanıcı Tanımlı İşlev) yürütmek istediğinizde Spark'ın UDF'yi yürütmek için .NET CLR'yi nasıl başlat gerektiğini anlayacaktır. Microsoft.Spark.Worker, Spark'a bu işlevselliği sağlayan bir sınıf koleksiyonu sağlar.

  1. Kümenize dağıtılacak bir Microsoft.Spark.Worker Linux netcoreapp sürümü seçin.

    Örneğin, kullanmak için .NET for Apache Spark v1.0.0 netcoreapp3.1 Microsoft.Spark.Worker.netcoreapp3.1.linux-x64-1.0.0.tar.gz'yi indirebilirsiniz.

  2. Microsoft.Spark.Worker.<release>.tar.gzUpload ve install-worker.sh erişimi olan bir dağıtılmış dosya sistemine (örneğin, S3) erişebilirsiniz.

.NET'inizi Apache Spark hazırlama

  1. Uygulama Başlarken oluşturmak için öğreticiyi izleyin.

  2. Spark .NET uygulamalarınızı kendi içinde yayımlayın.

    Linux'ta aşağıdaki komutu çalıştırın.

    dotnet publish -c Release -f netcoreapp3.1 -r ubuntu.16.04-x64
    
  3. Yayımlanan <your app>.zip dosyalar için üretin.

    kullanarak Linux üzerinde aşağıdaki komutu zip çalıştırın.

    zip -r <your app>.zip .
    
  4. Upload kümenizin erişimi olan bir dağıtılmış dosya sistemine (örneğin, S3) aşağıdaki öğeleri dağıtabilirsiniz:

    • microsoft-spark-<spark_majorversion-spark_minorversion>_<scala_majorversion.scala_minorversion>-<spark_dotnet_version>.jar: Bu jar, Microsoft.Spark NuGet paketinin bir parçası olarak dahil edilir ve uygulamanın derleme çıkış dizininde birlikte bulunur.
    • <your app>.zip
    • Dosyalar (bağımlılık dosyaları veya her çalışan tarafından erişilebilen ortak veriler gibi) ya da derlemeler (kullanıcı tanımlı işlevlerinizi veya uygulamanıza bağımlı olan kitaplıklarınızı içeren URL'ler gibi) her yürütücü için çalışma dizinine yerleştirilir.

Amazon EMR Spark'a dağıtma

Amazon EMR, AWS üzerinde büyük veri çerçeveleri çalıştırmayı basitleştiren bir yönetilen küme platformudur.

Not

Amazon EMR Spark, Linux tabanlıdır. Bu nedenle, uygulamanızı Amazon EMR Spark'a dağıtmakla ilgileniyorsanız, uygulamanızın uyumlu olduğundan ve uygulamanızı derlemek için .NET Core derleyicisini .NET Standard emin olun.

Microsoft.Spark.Worker dağıtma

Bu adım yalnızca küme oluşturma sırasında gereklidir.

install-worker.sh BootstrapActions kullanarak küme oluşturma sırasında çalıştırın.

AWS CLI kullanarak Linux'ta aşağıdaki komutu çalıştırın.

aws emr create-cluster \
--name "Test cluster" \
--release-label emr-5.23.0 \
--use-default-roles \
--ec2-attributes KeyName=myKey \
--applications Name=Spark \
--instance-count 3 \
--instance-type m1.medium \
--bootstrap-actions Path=s3://mybucket/<some dir>/install-worker.sh,Name="Install Microsoft.Spark.Worker",Args=["aws","s3://mybucket/<some dir>/Microsoft.Spark.Worker.<release>.tar.gz","/usr/local/bin"]

Uygulamanızı çalıştırma

Amazon EMR Spark'ta uygulama çalıştırmanın iki yolu vardır: spark-submit ve Amazon EMR Adımları.

spark-submit kullanma

Spark-submit komutunu kullanarak amazon EMR Spark'a iş Apache Spark .NET gönderebilirsiniz.

  1. ssh kümedeki düğümlerden birini seçin.

  2. spark-submit öğesini çalıştırın.

    spark-submit \
    --master yarn \
    --class org.apache.spark.deploy.dotnet.DotnetRunner \
    --files <comma-separated list of assemblies that contain UDF definitions, if any> \
    s3://mybucket/<some dir>/microsoft-spark-<spark_majorversion-spark_minorversion>_<scala_majorversion.scala_minorversion>-<spark_dotnet_version>.jar \
    s3://mybucket/<some dir>/<your app>.zip <your app> <app args>
    

Amazon EMR Adımlarını Kullanma

Amazon EMR Adımları, EMR kümesinde yüklü Spark çerçevesine iş göndermek için kullanılabilir.

AWS CLI kullanarak Linux'ta aşağıdaki komutu çalıştırın.

aws emr add-steps \
--cluster-id j-xxxxxxxxxxxxx \
--steps Type=spark,Name="Spark Program",Args=[--master,yarn,--files,s3://mybucket/<some dir>/<udf assembly>,--class,org.apache.spark.deploy.dotnet.DotnetRunner,s3://mybucket/<some dir>/microsoft-spark-<spark_majorversion-spark_minorversion>_<scala_majorversion.scala_minorversion>-<spark_dotnet_version>.jar,s3://mybucket/<some dir>/<your app>.zip,<your app>,<app arg 1>,<app arg 2>,...,<app arg n>],ActionOnFailure=CONTINUE

Sonraki adımlar

Bu öğreticide, .NET for Apache Spark Amazon EMR Spark'a dağıttınız. Örnek projeler için .NET Apache Spark devam GitHub.