EKS'de Amazon EMR kuruluşların Amazon Elastic Kubernetes Service (Amazon EKS) üzerinde açık kaynaklı büyük veri çerçeveleri çalıştırmasına olanak tanıyan bir Amazon EMR dağıtım seçeneği sunar. EKS'de EMR ile Spark uygulamaları, Apache Spark için Amazon EMR çalışma zamanında çalışır. Amazon EMR tarafından sunulan, performansı optimize edilmiş bu çalıştırma süresi, Kıvılcım işlerinizin hızlı ve uygun maliyetli bir şekilde yürütülmesini sağlar. EMR çalışma zamanı şunları sağlar: 5.37 kata kadar daha iyi performans ve %76.8 maliyet tasarrufu, Amazon EKS'de açık kaynaklı Apache Spark kullanmaya kıyasla.
Amazon EMR'nin EKS üzerindeki başarısını temel alan müşteriler, emr kapları API, oluşturma EMR sanal kümelerive işleri AWS Komut Satırı Arayüzü (AWS CLI) aracılığıyla EKS kümesine gönderme veya Apache Hava Akışı zamanlayıcı. Ancak Spark uygulamalarını çalıştıran diğer müşteriler, Kıvılcım Operatörü veya yerli kıvılcım gönder Amazon EKS'de Apache Spark işleri tanımlamak ve çalıştırmak için, ancak Spark'ı optimize edilmiş EMR çalışma zamanında çalıştırmanın sağladığı performans kazanımlarından yararlanmadan. Bu ihtiyaca yanıt olarak, EMR 6.10'dan başlayarak, Spark işlerini Spark Operator veya üzerinden gönderirken ve yönetirken optimize edilmiş EMR çalışma zamanını kullanmanıza izin veren yeni bir özelliği kullanıma sunduk. spark-submit
. Bu, EKS üzerinde Spark iş yükleri çalıştıran herkesin EMR'nin optimize edilmiş çalışma zamanından yararlanabileceği anlamına gelir.
Bu gönderide, Spark işlerini hem Spark Operator kullanarak hem de spark-submit
, EMR çalışma zamanı özelliği ile entegre edilmiştir. Altyapıyı kurmanıza ve her iki yöntemle de iş göndermenize yardımcı olacak adım adım talimatlar sunuyoruz. Ek olarak, EKS şemasındaki veriler Terraform şablonlarını kullanarak tüm altyapıyı dağıtmak için.
Altyapıya genel bakış
Bu gönderide, kullanarak kapsamlı bir çözüm dağıtma sürecini adım adım ele alıyoruz. eksctl
, Helm ve AWS CLI. Dağıtımımız aşağıdaki kaynakları içerir:
- ile kurulan bir VPC, EKS kümesi ve yönetilen düğüm grubu
eksctl
araç - ile kurulan VPC CNI, CoreDNS ve KubeProxy gibi temel Amazon EKS tarafından yönetilen eklentiler
eksctl
araç - Küme Otomatik Ölçekleyici ve Spark Operator eklentileri, Helm kullanılarak kurulur
- Spark iş yürütme AWS Kimlik ve Erişim Yönetimi (IAM) rolü, için IAM politikası Amazon Basit Depolama Hizmeti (Amazon S3) klasör erişimi, hizmet hesabı ve rol tabanlı erişim kontrolü, AWS CLI kullanılarak kurulur ve
eksctl
Önkoşullar
Aşağıdaki ön koşulların makinenizde yüklü olduğunu doğrulayın:
AWS kimlik bilgilerini ayarlayın
Bir sonraki adıma geçmeden ve eksctl komutunu çalıştırmadan önce, yerel AWS kimlik bilgileri profilinizi oluşturmanız gerekir. Talimatlar için bkz. Yapılandırma ve kimlik bilgisi dosyası ayarları.
VPC, EKS kümesi ve yönetilen eklentileri dağıtın
Aşağıdaki yapılandırma kullanır us-west-1
varsayılan Bölge olarak. Farklı bir Bölgede çalıştırmak için region
ve availabilityZones
buna göre alanlar. Ayrıca, gönderi boyunca sonraki adımlarda aynı Bölgenin kullanıldığını doğrulayın.
AWS kimlik bilgilerinizin ayarlandığı terminale aşağıdaki kod parçacığını girin. güncellediğinizden emin olun. publicAccessCIDRs
Aşağıdaki komutu çalıştırmadan önce IP'nizle alan. Bu, adlı bir dosya oluşturacaktır. eks-cluster.yaml
:
EKS kümesini oluşturmak için aşağıdaki komutu kullanın: eksctl create cluster -f eks-cluster.yaml
Küme Otomatik Ölçekleyicisini Dağıtın
Küme Otomatik Ölçekleyici, Kubernetes kümenizin boyutunu mevcut kaynak taleplerine göre otomatik olarak ayarlamak, kaynak kullanımını ve maliyeti optimize etmek için çok önemlidir. Oluşturduğunuz bir autoscaler-helm-values.yaml
Helm'i kullanarak Küme Otomatik Ölçekleyicisini dosyalayın ve kurun:
Ayrıca kurabilirsiniz marangoz EKS kümenizin uygulamalarını işlemek üzere doğru bilgi işlem kaynaklarını otomatik olarak başlatmak için bir küme otomatik ölçekleyicisi olarak. bunu takip edebilirsiniz blog Karpenter'ın nasıl kurulacağı ve yapılandırılacağı hakkında.
Spark Operatörünü Dağıtın
Kıvılcım Operatörü Kubernetes üzerinde çalışan Spark uygulamalarını yönetmek ve izlemek için özel olarak tasarlanmış açık kaynaklı bir Kubernetes operatörüdür. Spark uygulamalarını tanımlamak, yapılandırmak ve çalıştırmak ve Kubernetes API aracılığıyla iş yaşam döngüsünü yönetmek için bir Kubernetes özel kaynağı sağlayarak Spark işlerini dağıtma ve yönetme sürecini kolaylaştırır. Bazı müşteriler, Spark uygulamalarını tıpkı diğer Kubernetes kaynakları gibi yönetmelerini sağladığı için Spark işlerini yönetmek için Spark Operator kullanmayı tercih ediyor.
Şu anda müşteriler açık kaynaklı Spark görüntülerini oluşturuyor ve S3a işlemcileri Spark Operator ile yapılan iş başvurularının bir parçası olarak veya spark-submit
. Ancak, yeni iş gönderme seçeneğiyle artık EMR çalışma zamanından EMRFS ile birlikte yararlanabilirsiniz. Amazon EMR 6.10'dan başlayarak ve EMR çalışma zamanının gelecek her sürümü için, EMR çalışma zamanını kullanmak üzere Kıvılcım Operatörü'nü ve Helm grafiğini kullanıma sunacağız.
Bu bölümde, bir Spark Operator Helm grafiğini bir bilgisayardan nasıl konuşlandıracağınızı gösteriyoruz. Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR) deposu ve EMR çalışma zamanı görüntülerini kullanarak işleri gönderin, EMR çalışma zamanı tarafından sağlanan performans iyileştirmelerinden yararlanın.
Amazon ECR'den Helm ile Spark Operator'ı kurun
Spark Operator Helm tablosu bir ECR deposunda saklanır. Spark Operator'ü kurmak için önce Helm istemcinizin kimliğini ECR deposuyla doğrulamanız gerekir. Grafikler aşağıdaki yol altında saklanır: ECR_URI/spark-operator
.
Helm istemcinizin kimliğini doğrulayın ve Spark Operatörünü kurun:
İlgili Bölge için AWS hesap kimliğini alarak EKS tarafından desteklenen Bölgelerdeki diğer EMR'lerde kimlik doğrulaması yapabilirsiniz. Daha fazla bilgi için bkz. temel görüntü URI'si nasıl seçilir.
Spark Operatörünü Kurun
Artık Spark Operator'ı aşağıdaki komutu kullanarak kurabilirsiniz:
Operatörün doğru kurulduğunu doğrulamak için aşağıdaki komutu çalıştırın:
Spark iş yürütme rolünü ve hizmet hesabını ayarlayın
Bu adımda, Spark Operator'da kullanılacak bir Spark iş yürütme IAM rolü ve bir hizmet hesabı oluşturuyoruz ve spark-submit
iş gönderme örnekleri.
İlk olarak, tarafından kullanılacak bir IAM politikası oluşturuyoruz. Hizmet Hesapları için IAM Rolleri (IRSA). Bu politika, sürücü ve yürütücü bölmelerinin politikada belirtilen AWS hizmetlerine erişmesini sağlar. Aşağıdaki adımları tamamlayın:
- Önkoşul olarak, bir S3 klasörü oluşturun (
aws s3api create-bucket --bucket <ENTER-S3-BUCKET> --create-bucket-configuration LocationConstraint=us-west-1 --region us-west-1
) veya mevcut bir S3 klasörünü kullanın. Yer değiştirmek kova adıyla aşağıdaki kodda. - Bir S3 grubuna okuma ve yazma erişimi sağlayan bir ilke dosyası oluşturun:
- Aşağıdaki komutla IAM politikasını oluşturun:
- Ardından, adlı hizmet hesabını oluşturun.
emr-job-execution-sa-role
yanı sıra IAM rolleri. Aşağıdakieksctl
komutu, yürütücü ve sürücü tarafından kullanılmak üzere tanımlanan hizmet hesabı ve ad alanına kapsamlı bir hizmet hesabı oluşturur. değiştirdiğinizden emin olun komutu çalıştırmadan önce hesap kimliğiniz ile: - Yalnızca 3. adımda oluşturma yürütme rolünün 4. adımda S3 klasör oluşturma'dan yazma ve okuma yapmasına izin vermek için bir S1 klasör politikası oluşturun. Değiştirdiğinizden emin olun komutu çalıştırmadan önce hesap kimliğiniz ile:
- Spark iş çalıştırmasında kullanılan hizmet hesabı için gerekli olan bir Kubernetes rolü ve rol bağlama oluşturun:
- Aşağıdaki komutla Kubernetes rolünü ve rol bağlama tanımını uygulayın:
Şimdiye kadar, Spark iş yürütme rolleri de dahil olmak üzere altyapı kurulumunu tamamladık. Aşağıdaki adımlarda, hem Spark Operator'ü kullanarak hem de Spark Operator kullanarak örnek Spark işleri çalıştırıyoruz. spark-submit
EMR çalışma zamanı ile.
Spark Operator işini EMR çalışma zamanı ile yapılandırın
Bu bölümde, S3 klasörlerinde depolanan genel veri kümelerinden verileri okuyan, bunları işleyen ve sonuçları kendi S3 klasörünüze yazan örnek bir Spark işi sunuyoruz. Değiştirerek aşağıdaki yapılandırmada S3 klasörünü güncellediğinizden emin olun. belirtilen kendi S3 kovanızın URI'si ile 2 adım “Spark iş yürütme rolünü ve hizmet hesabını ayarlayınbaşlıklı bir kılavuz yayınladı Bölüm. Ayrıca, kullandığımıza dikkat edin data-team-a
bir ad alanı olarak ve emr-job-execution-sa
önceki adımda oluşturduğumuz bir hizmet hesabı olarak. Bunlar, ayrılmış ad alanında Spark iş bölmelerini çalıştırmak için gereklidir ve hizmet hesabına bağlı IAM rolü, verileri okumak ve yazmak için S3 klasörüne erişmek için kullanılır.
En önemlisi, dikkat image
şu anda ayarlanan EMR için optimize edilmiş çalışma zamanı Docker görüntüsünün bulunduğu alan emr-6.10.0
. Amazon EMR ekibi tarafından piyasaya sürüldüğünde bunu daha yeni bir sürümle değiştirebilirsiniz. Ayrıca, işlerinizi yapılandırırken şunları eklediğinizden emin olun: sparkConf
ve hadoopConf
ayarlar aşağıdaki bildirimde tanımlandığı gibidir. Bu yapılandırmalar, EMR çalışma zamanı performansından yararlanmanızı sağlar, AWS Tutkal Veri Kataloğu entegrasyonu ve EMRFS için optimize edilmiş bağlayıcı.
- Dosyayı oluştur (
emr-spark-operator-example.yaml
) yerel olarak seçin ve işi bir sonraki adımın parçası olarak gönderebilmeniz için S3 grup konumunu güncelleyin: - İşi EKS kümesine göndermek için aşağıdaki komutu çalıştırın:
İşin tamamlanması 4-5 dakika sürebilir ve başarılı mesajı sürücü bölmesi günlüklerinde doğrulayabilirsiniz.
- Aşağıdaki komutu çalıştırarak işi doğrulayın:
Spark kullanıcı arayüzüne erişimi etkinleştirin
Spark UI, veri mühendisleri için önemli bir araçtır çünkü görevlerin ilerlemesini izlemenize, ayrıntılı iş ve aşama bilgilerini görüntülemenize ve darboğazları belirlemek ve kodunuzu optimize etmek için kaynak kullanımını analiz etmenize olanak tanır. Kubernetes üzerinde çalışan Spark işleri için Spark UI, sürücü bölmesinde barındırılır ve erişimi Kubernetes'in dahili ağıyla sınırlıdır. Erişmek için, trafiği bölmeye iletmemiz gerekir. kubectl
. Aşağıdaki adımlar, nasıl ayarlayacağınız konusunda size yol gösterir.
Trafiği sürücü bölmesine iletmek için aşağıdaki komutu çalıştırın:
Aşağıdakine benzer bir metin görmelisiniz:
Gönderim sırasında sürücü bölmesi adını belirtmediyseniz SparkApplication
, aşağıdaki komutla alabilirsiniz:
Bir tarayıcı açın ve girin http://localhost:4040
adres çubuğunda. Spark kullanıcı arayüzüne bağlanabilmeniz gerekir.
Spark Geçmiş Sunucusu
İşinizi çalıştırdıktan sonra keşfetmek isterseniz, onu Spark Geçmiş Sunucusu aracılığıyla görüntüleyebilirsiniz. Önceki SparkApplication
tanım, olay günlüğünü etkinleştirir ve olayları aşağıdaki yolla bir S3 klasöründe depolar: s3://YOUR-S3-BUCKET/
. Spark Geçmiş Sunucusunu kurma ve günlükleri keşfetme hakkındaki talimatlar için bkz. Docker kullanarak Spark geçmiş sunucusunu başlatma ve Spark kullanıcı arayüzünü görüntüleme.
kıvılcım gönder
kıvılcım gönder Apache Spark uygulamalarını bir kümede veya yerel olarak çalıştırmak için bir komut satırı arabirimidir. Uygulamaları Spark kümelerine göndermenizi sağlar. Araç, uygulama özelliklerinin, kaynak tahsisinin ve özel kitaplıkların basit bir şekilde yapılandırılmasını sağlayarak Spark işlerinin dağıtımını ve yönetimini kolaylaştırır.
Amazon EMR 6.10'dan başlayarak, spark-submit
bir iş gönderme yöntemi olarak desteklenmektedir. Bu yöntem şu anda gönderim mekanizması olarak yalnızca küme modunu desteklemektedir. kullanarak işleri göndermek için spark-submit
yöntemiyle, daha önce kurduğumuz hizmet hesabı için IAM rolünü yeniden kullanırız. Spark Operator yöntemi için kullanılan S3 kovasını da kullanıyoruz. Bu bölümdeki adımlar, işleri nasıl yapılandıracağınızı ve göndereceğinizi gösterir. spark-submit
ve EMR çalışma zamanı iyileştirmelerinden yararlanın.
- Bir iş göndermek için Amazon EMR'de bulunanla eşleşen Spark sürümünü kullanmanız gerekir. Amazon EMR 6.10 için yapmanız gerekenler kıvılcım 3.3 sürümünü indirin.
- sahip olduğunuzdan da emin olmanız gerekir. Java ortamınıza kurulur.
- Dosyayı açın ve Spark dizininin kök dizinine gidin.
- Aşağıdaki kodda, değiştirin EKS bitiş noktası yanısıra S3 kepçe sonra betiği çalıştırın:
Bir çekirdek ve 7 G bellekten oluşan iki yürütücü ile işin tamamlanması yaklaşık 1 dakika sürer.
Özel kubernetes planlayıcıları kullanma
Eşzamanlı olarak büyük hacimli işler yürüten müşteriler, Kubernetes'in sunduğu standart zamanlama ve kaynak kullanım yönetimi ile çözemedikleri, bilgi işlem kapasitesine adil erişim sağlamayla ilgili zorluklarla karşılaşabilir. Ayrıca, Amazon EMR'den Amazon Elastic Compute Cloud'a (Amazon EC2) geçiş yapan ve planlamalarını YARN kuyruklarıyla yöneten müşteriler, bunları Kubernetes planlama özelliklerine aktaramaz.
Bu sorunun üstesinden gelmek için, gibi özel zamanlayıcıları kullanabilirsiniz. Apaçi Yunikorn or Volkan.Spark Operator bu programlayıcıları yerel olarak destekler ve bunlarla birlikte Spark uygulamalarını öncelik, kaynak gereksinimleri ve adillik politikaları gibi faktörlere göre planlayabilirsiniz, Spark Operator ise uygulama dağıtımını ve yönetimini basitleştirir. Yunikorn'u grup programlama ile kurmak ve Spark Operator aracılığıyla gönderilen Spark uygulamalarında kullanmak için bkz. YuniKorn ile Kıvılcım Operatörü.
Temizlemek
AWS hesabınızdan istenmeyen ücretler alınmasını önlemek için bu dağıtım sırasında oluşturulan tüm AWS kaynaklarını silin:
Sonuç
Bu yazıda, Spark Operator için EMR çalışma zamanı özelliğini tanıttık ve spark-submit
ve bu özelliği bir EKS kümesinde kullanmanın avantajlarını araştırdı. Optimize edilmiş EMR çalıştırma süresiyle, maliyetleri optimize ederken Spark uygulamalarınızın performansını önemli ölçüde artırabilirsiniz. Kullanarak küme dağıtımını gösterdik. eksctl
aracını da kullanabilirsiniz. EKS planları ile ilgili veriler EKS üzerinde EMR için kullanabileceğiniz ve EKS üzerinde EMR iş gönderme yöntemine ek olarak bu yeni dağıtım yöntemlerinden yararlanabileceğiniz üretime hazır bir EKS dağıtmak için. Uygulamalarınızı optimize edilmiş EMR çalıştırma zamanında çalıştırarak, Spark uygulama iş akışlarınızı daha da geliştirebilir ve veri işleme boru hatlarınızda yeniliği destekleyebilirsiniz.
Yazarlar Hakkında
Lotfi Muhib Amazon Web Services ile Kamu Sektörü ekibi için çalışan bir Kıdemli Çözüm Mimarıdır. EMEA'daki kamu sektörü müşterilerinin fikirlerini gerçekleştirmelerine, yeni hizmetler oluşturmalarına ve vatandaşlar için inovasyon yapmalarına yardımcı oluyor. Lütfi boş zamanlarında bisiklete binmeyi ve koşmayı sever.
vara bonthu stratejik hesaplardan çeşitli kuruluşlara kadar çeşitli AWS müşterilerine yardımcı olma konusunda uzmanlaşmış, özel bir teknoloji uzmanı ve EKS'de Veriler için Dünya Çapında Teknoloji Lideridir. Açık kaynak teknolojileri, veri analitiği, AI/ML ve Kubernetes konusunda tutkulu ve geliştirme, DevOps ve mimaride kapsamlı bir geçmişe sahip. Vara'nın birincil odak noktası, Kubernetes platformlarında üst düzeyde ölçeklenebilir veri ve AI/ML çözümleri oluşturmak ve müşterilerin veri odaklı arayışları için en son teknolojinin tüm potansiyelinden yararlanmalarına yardımcı olmaktır.
- SEO Destekli İçerik ve Halkla İlişkiler Dağıtımı. Bugün Gücünüzü Artırın.
- PlatoAiStream. Web3 Veri Zekası. Bilgi Genişletildi. Buradan Erişin.
- Kaynak: https://aws.amazon.com/blogs/big-data/introducing-amazon-emr-on-eks-job-submission-with-spark-operator-and-spark-submit/