Cloud Dataflow'da büyük veri metin işleme ardışık düzeni çalıştırma

1. Genel Bakış

Cloud-Dataflow.png

Dataflow nedir?

Dataflow, çok çeşitli veri işleme kalıpları yürütmek için yönetilen bir hizmettir. Bu sitedeki belgeler, hizmet özelliklerini kullanma talimatları da dahil olmak üzere toplu veri ve akış verisi işleme ardışık düzenlerinizi Dataflow kullanarak nasıl dağıtacağınızı gösterir.

Apache Beam SDK, hem toplu hem de akış ardışık düzenleri geliştirmenizi sağlayan açık kaynaklı bir programlama modelidir. Ardışık düzenlerinizi Apache Beam programıyla oluşturur ve bunları Dataflow hizmetinde çalıştırırsınız. Apache Beam belgeleri; Apache Beam programlama modeli, SDK'lar ve diğer koşucular için ayrıntılı kavramsal bilgiler ve referans malzemeleri sağlar.

Hızlı akışlı veri analizi

Dataflow, daha düşük veri gecikmesiyle hızlı ve basitleştirilmiş akış veri ardışık düzeni geliştirilebilmesini sağlar.

Operasyonları ve yönetimi basitleştirme

Dataflow'un sunucusuz yaklaşımının veri mühendisliği iş yüklerindeki işlem ek yükünü ortadan kaldırması sayesinde ekiplerin sunucu kümelerini yönetmek yerine programlamaya odaklanmasını sağlayın.

Toplam sahip olma maliyetini azaltma

Otomatik kaynak ölçeklendirme ile maliyet açısından optimize edilmiş toplu işleme özelliğinin bir arada sunulması, Dataflow'un sezonluk ve ani artışlar gösteren iş yüklerinizi aşırı harcama yapmadan yönetme konusunda neredeyse sınırsız bir kapasite sunduğu anlamına gelir.

Temel özellikler

Otomatik kaynak yönetimi ve dinamik iş dengeleme

Dataflow, gecikmeyi en aza indirmek ve kullanımı en üst düzeye çıkarmak için kaynak işleme süreçlerinin sağlanmasını ve yönetimini otomatik hale getirir. Böylece, örnekleri hızlandırmanız veya elle ayırmanız gerekmez. İş bölümlendirme, geciken işleri dinamik olarak yeniden dengelemek için otomatik hale getirilmiş ve optimize edilmiştir. "Kısayol tuşları" aramanıza gerek yok veya giriş verilerinizi önceden işleyin.

Yatay otomatik ölçeklendirme

Optimum işleme hızı için çalışan kaynaklarının yatay olarak otomatik ölçeklendirilmesi, genel fiyat-performans oranını artırır.

Toplu işlem için esnek kaynak planlama fiyatlandırması

Gece devam etmesi gereken işlerde olduğu gibi iş planlama süresinde esneklik ile işlem yapmak için esnek kaynak planlama (FlexRS) imkanı, toplu işlem için daha düşük bir fiyat sunar. Bu esnek işler, altı saatlik süre içinde yürütmeye alınacakları garantisiyle sıraya sokulur.

Bu eğitim https://cloud.google.com/dataflow/docs/quickstarts/quickstart-java-maven adresinden uyarlanmıştır.

Neler öğreneceksiniz?

  • Java SDK kullanarak Apache Beam ile Maven projesi oluşturma
  • Google Cloud Platform Console'u kullanarak örnek bir ardışık düzen çalıştırma
  • İlişkili Cloud Storage paketini ve içeriğini silme

Gerekenler

Bu eğiticiden nasıl yararlanacaksınız?

Yalnızca okuma Okuyun ve alıştırmaları tamamlayın

Google Cloud Platform hizmetlerinin kullanımıyla ilgili deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.

API'leri etkinleştirme

Ekranın sol üst kısmındaki menü simgesini tıklayın.

2bfc27ef9ba2ec7d.png

API'ler ve Hizmetler > Kontrol Paneli'ni seçin.

5b65523a6cc0afa6.png

+ API'leri ve Hizmetleri Etkinleştir'i seçin.

81ed72192c0edd96.png

"Compute Engine" araması yapın yazın. "Compute Engine API"yi tıklayın görünür.

3f201e991c7b4527.png

Google Compute Engine sayfasında Etkinleştir'i tıklayın.

ac121653277fa7bb.png

Etkinleştirildikten sonra geri dönmek için oku tıklayın.

Şimdi aşağıdaki API'leri arayıp etkinleştirin:

  • Cloud Dataflow
  • Stackdriver
  • Cloud Storage
  • Cloud Storage JSON
  • BigQuery
  • Cloud Pub/Sub
  • Cloud Datastore
  • Cloud Resource Manager API'leri

3. Yeni Cloud Storage paketi oluşturma

Google Cloud Platform Console'da ekranın sol üst kısmındaki Menü simgesini tıklayın:

2bfc27ef9ba2ec7d.png

Aşağı kaydırın ve Cloud Storage > Tarayıcı (Depolama alt bölümünde):

2b6c3a2a92b47015.png

Şimdi Cloud Storage Tarayıcısı'nı göreceksiniz. Şu anda herhangi bir Cloud Storage paketine sahip olmayan bir proje kullandığınızı varsayarsak yeni bir paket oluşturmanız için bir davetiye görürsünüz. Paket oluşturmak için Paket oluştur düğmesine basın:

a711016d5a99dc37.png

Paketiniz için bir ad girin. İletişim kutusunda belirtildiği gibi, paket adları Cloud Storage'ın tamamında benzersiz olmalıdır. Dolayısıyla, "test" gibi bariz bir ad seçerseniz muhtemelen başka birinin bu ada sahip bir paket oluşturduğunu ve hata aldığını görürsünüz.

Paket adlarında hangi karakterlere izin verileceğine ilişkin bazı kurallar da vardır. Paket adınızın başında ve sonunda bir harf veya rakam varsa ve yalnızca ortasında tire kullanırsanız sorun yaşamazsınız. Özel karakterler kullanmaya çalışır veya paket adınızın başında ya da sonunda harf veya rakam dışında bir ad kullanmaya çalışırsanız iletişim kutusu size kuralları hatırlatır.

3a5458648cfe3358.png

Paketiniz için benzersiz bir ad girin ve Create (Oluştur) düğmesine basın. Halihazırda kullanımda olan bir hizmeti seçerseniz yukarıda hata mesajını görürsünüz. Başarılı bir şekilde paket oluşturduğunuzda, tarayıcıdaki yeni, boş paketinize yönlendirilirsiniz:

3bda986ae88c4e71.png

Tüm projeler genelinde benzersiz olması gerektiğinden, göreceğiniz paket adı elbette farklı olacaktır.

4. Cloud Shell'i Başlatma

Cloud Shell'i etkinleştirme

  1. Cloud Console'da, Cloud Shell'i etkinleştir H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_UZQZZGzGzGzqzQzGLzGzGzqqLqSqLG simgesini tıklayın.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell'i daha önce hiç çalıştırmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını görürsünüz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

5. Maven projesi oluşturma

Cloud Shell kullanıma sunulduktan sonra Apache Beam için Java SDK'yı kullanarak Maven projesi oluşturarak başlayalım.

Apache Beam, veri ardışık düzenleri için açık kaynak programlama modelidir. Bu ardışık düzenleri bir Apache Beam programıyla tanımlar ve ardışık düzeninizi yürütmek için Dataflow gibi bir çalıştırıcı seçebilirsiniz.

Kabuğunuzdaki mvn archetype:generate komutunu aşağıdaki şekilde çalıştırın:

  mvn archetype:generate \
     -DarchetypeGroupId=org.apache.beam \
     -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-examples \
     -DarchetypeVersion=2.46.0 \
     -DgroupId=org.example \
     -DartifactId=first-dataflow \
     -Dversion="0.1" \
     -Dpackage=org.apache.beam.examples \
     -DinteractiveMode=false

Komutu çalıştırdıktan sonra geçerli dizininizin altında first-dataflow adında yeni bir dizin görürsünüz. first-dataflow, Java için Cloud Dataflow SDK'yı ve örnek ardışık düzenleri içeren bir Maven projesi içeriyor.

6. Cloud Dataflow'da metin işleme ardışık düzeni çalıştırma

Proje kimliğimizi ve Cloud Storage paket adlarımızı ortam değişkenleri olarak kaydederek başlayalım. Bu işlemi Cloud Shell'de yapabilirsiniz. <your_project_id> öğesini kendi proje kimliğinizle değiştirdiğinizden emin olun.

 export PROJECT_ID=<your_project_id>

Şimdi aynısını Cloud Storage paketi için yapacağız. <your_bucket_name> değerini, önceki bir adımda paketinizi oluşturmak için kullandığınız benzersiz adla değiştirmeyi unutmayın.

 export BUCKET_NAME=<your_bucket_name>

first-dataflow/ dizinine geçin.

 cd first-dataflow

Metni okuyan, metin satırlarını tek tek kelimelere dönüştüren ve bu kelimelerin her biri için sıklık sayımı gerçekleştiren WordCount adında bir ardışık düzen çalıştıracağız. İlk olarak ardışık düzeni çalıştıracağız ve çalışırken her adımda neler olduğuna bakacağız.

Kabuk veya terminal pencerenizde mvn compile exec:java komutunu çalıştırarak ardışık düzeni başlatın. Aşağıdaki komut, --project, --stagingLocation, ve --output bağımsız değişkenleri için bu adımda daha önce ayarladığınız ortam değişkenlerini referans alır.

 mvn compile exec:java \
      -Pdataflow-runner compile exec:java \
      -Dexec.mainClass=org.apache.beam.examples.WordCount \
      -Dexec.args="--project=${PROJECT_ID} \
      --stagingLocation=gs://${BUCKET_NAME}/staging/ \
      --output=gs://${BUCKET_NAME}/output \
      --runner=DataflowRunner \
      --region=us-central1 \
      --gcpTempLocation=gs://${BUCKET_NAME}/temp"

İş çalışırken, iş listesinde ilgili işi bulalım.

Google Cloud Platform Console'da Cloud Dataflow Web kullanıcı arayüzünü açın. Kelime sayısı işinizin durumu Çalışıyor olarak gösterilir:

3623be74922e3209.png

Şimdi ardışık düzen parametrelerine bakalım. İşinizin adını tıklayarak başlayın:

816d8f59c72797d7.png

Bir iş seçtiğinizde yürütme grafiğini görüntüleyebilirsiniz. Ardışık düzenin yürütme grafiği, ardışık düzendeki her dönüşümü, dönüşüm adını ve bazı durum bilgilerini içeren bir kutu olarak temsil eder. Daha fazla ayrıntı görmek için her adımın sağ üst köşesindeki düzeltme simgesini tıklayabilirsiniz:

80a972dd19a6f1eb.png

Ardışık düzenin her adımda verileri nasıl dönüştürdüğünü görelim:

  • Okuma: Bu adımda, ardışık düzen bir giriş kaynağından okuma yapar. Bu örnekte bu, Cloud Storage'dan Shakespeare oyunu King Lear'ın tam metnini içeren bir metin dosyasıdır. Ardışık düzenimiz dosyayı satır satır okur ve her satıra bir PCollection çıkışı verir. Burada metin dosyamızdaki her satır, koleksiyondaki bir öğedir.
  • CountWords: CountWords adımı iki bölümden oluşur. Öncelikle, her satırı ayrı ayrı kelimelere ayırmak için ExtractWords adlı bir paralel do işlevi (ParDo) kullanır. ExtractWords çıktısı, her öğenin bir kelime olduğu yeni bir PCollection'dır. Bir sonraki adım (Count), Java SDK'sı tarafından sağlanan bir dönüşümü kullanır. Bu dönüşüm, anahtarın benzersiz bir kelime olduğu ve değerin de kaç kez gerçekleştiğini gösteren anahtar ve değer çiftlerini döndürür. CountWords uygulama yöntemini burada görebilirsiniz. WordCount.java dosyasının tamamını GitHub'da da inceleyebilirsiniz:
 /**
   * A PTransform that converts a PCollection containing lines of text into a PCollection of
   * formatted word counts.
   *
   * <p>Concept #3: This is a custom composite transform that bundles two transforms (ParDo and
   * Count) as a reusable PTransform subclass. Using composite transforms allows for easy reuse,
   * modular testing, and an improved monitoring experience.
   */
  public static class CountWords
      extends PTransform<PCollection<String>, PCollection<KV<String, Long>>> {
    @Override
    public PCollection<KV<String, Long>> expand(PCollection<String> lines) {

      // Convert lines of text into individual words.
      PCollection<String> words = lines.apply(ParDo.of(new ExtractWordsFn()));

      // Count the number of times each word occurs.
      PCollection<KV<String, Long>> wordCounts = words.apply(Count.perElement());

      return wordCounts;
    }
  }
  • MapElements: Bu komut, aşağıda kopyalanan ve her bir anahtarın değer çiftini yazdırılabilir bir dize halinde biçimlendiren FormatAsTextFn öğesini çağırır.
  /** A SimpleFunction that converts a Word and Count into a printable string. */
  public static class FormatAsTextFn extends SimpleFunction<KV<String, Long>, String> {
    @Override
    public String apply(KV<String, Long> input) {
      return input.getKey() + ": " + input.getValue();
    }
  }
  • WriteCounts: Bu adımda, yazdırılabilir dizeleri birden fazla parçalanmış metin dosyasına yazıyoruz.

Birkaç dakika içinde ardışık düzenden elde edilen sonuca göz atacağız.

Şimdi, grafiğin sağ tarafındaki İş bilgileri sayfasına göz atın. Bu sayfada, mvn compile exec:java komutuna eklediğimiz ardışık düzen parametreleri yer alır.

9723815a1f5bf08b.png

208a7f0d6973acf6.png

Ayrıca, ardışık düzen için Özel sayaçları görebilirsiniz. Bu sayaçlar, bu örnekte yürütme sırasında şimdiye kadar kaç boş satırla karşılaşıldığını gösterir. Uygulamaya özgü metrikleri izlemek için ardışık düzeninize yeni sayaçlar ekleyebilirsiniz.

a2e2800e2c6893f8.png

Belirli hata mesajlarını görüntülemek için konsolun altındaki Günlükler simgesini tıklayabilirsiniz.

23c64138a1027f8.png

Panel varsayılan olarak, işin bir bütün olarak durumunu raporlayan İş Günlüğü mesajları gösterir. İş ilerlemesini ve durum mesajlarını filtrelemek için Minimum Önem Düzeyi seçiciyi kullanabilirsiniz.

94ba42015fdafbe2.png

Grafikte bir ardışık düzen adımını seçtiğinizde görünüm, kodunuz tarafından oluşturulan günlükler ve ardışık düzen adımında çalışan oluşturulan kodla değiştirilir.

İş Günlüklerine geri dönmek için grafiğin dışını tıklayarak veya sağ taraftaki paneldeki Kapat düğmesini kullanarak adımın seçimini kaldırın.

Ardışık düzeninizi çalıştıran Compute Engine örneklerinin çalışan günlüklerini görüntülemek için günlükler sekmesindeki Çalışma Günlükleri düğmesini kullanabilirsiniz. Çalışma Günlükleri, kodunuz tarafından oluşturulan günlük satırlarından ve onu çalıştıran Dataflow tarafından oluşturulan koddan oluşur.

Ardışık düzendeki bir hatada hata ayıklamaya çalışıyorsanız çoğu zaman Çalışma Günlükleri'nde sorunu çözmeye yardımcı olan ek günlük kayıtları bulunur. Bu günlüklerin tüm çalışanlar arasında toplandığını, filtrelenip arama yapılabileceğini unutmayın.

5a53c244f28d5478.png

Dataflow İzleme Arayüzü yalnızca en yeni günlük mesajlarını gösterir. Günlükler bölmesinin sağ tarafındaki Google Cloud Gözlemlenebilirlik bağlantısını tıklayarak tüm günlükleri görüntüleyebilirsiniz.

2bc704a4d6529b31.png

Monitoring→Logs sayfasında görüntülenebilen farklı günlük türlerinin bir özeti aşağıda verilmiştir:

  • job-message günlükleri, Dataflow'un çeşitli bileşenlerinin oluşturduğu iş düzeyinde mesajlar içerir. Örnekler arasında otomatik ölçeklendirme yapılandırması, çalışanların başlatılması veya kapatılması, iş adımındaki ilerleme durumu ve iş hataları yer alır. Kilitlenen kullanıcı kodundan kaynaklanan ve çalışan günlüklerinde bulunan çalışan düzeyindeki hatalar, job-message günlüklerine de yayılır.
  • worker günlükleri, Dataflow çalışanları tarafından üretilir. Ardışık düzen işlerinin çoğunu çalışanlar (örneğin, ParDos verilerinizi verilere uygulama) gerçekleştirir. Worker günlükleri, kodunuz ve Dataflow tarafından günlüğe kaydedilen mesajları içerir.
  • worker-startup günlükleri, çoğu Dataflow işinde bulunur ve başlatma işlemiyle ilgili mesajları yakalayabilir. Başlatma sürecinde, bir işin jar'larının Cloud Storage'dan indirilmesi ve ardından çalışanların başlatılması yer alır. Çalışanların başlatılmasıyla ilgili bir sorun söz konusuysa bu günlükler, bakmak için iyi bir noktadır.
  • shuffler günlükleri, paralel ardışık düzen işlemlerinin sonuçlarını bir araya getiren çalışanlardan gelen mesajları içerir.
  • docker ve kubelet günlükleri, Dataflow çalışanları üzerinde kullanılan bu herkese açık teknolojilerle ilgili mesajlar içerir.

Sonraki adımda işinizin başarılı olup olmadığını kontrol edeceğiz.

7. İşinizin başarılı olup olmadığını kontrol etme

Google Cloud Platform Console'da Cloud Dataflow Web kullanıcı arayüzünü açın.

Kelime sayısı işinizin durumunu önce Çalışıyor, ardından Başarılı olarak görürsünüz:

4c408162416d03a2.png

İşin çalışması yaklaşık 3-4 dakika sürer.

Ardışık düzeni çalıştırıp bir çıkış paketi belirttiğiniz zamanı hatırlıyor musunuz? Şimdi sonuca bakalım (çünkü King Lear'daki her kelimenin kaç kez geçtiğini görmek istemiyor musunuz?!). Google Cloud Platform Console'da Cloud Storage Tarayıcısı'na geri dönün. Paketinizde, işinizin oluşturduğu çıkış dosyalarını ve hazırlık dosyalarını göreceksiniz:

25a5d3d4b5d0b567.png

8. Kaynaklarınızı kapatma

Kaynaklarınızı Google Cloud Platform Console'dan kapatabilirsiniz.

Google Cloud Platform Console'da Cloud Storage tarayıcısını açın.

2b6c3a2a92b47015.png

Oluşturduğunuz paketin yanındaki onay kutusunu işaretleyin ve paketi ve içeriğini kalıcı olarak silmek için SİL'i tıklayın.

2f7780bdf10b69ba.png

8051ef293a8e5cfe.png

9. Tebrikler!

Cloud Dataflow SDK ile Maven projesi oluşturmayı, Google Cloud Platform Console'u kullanarak örnek bir ardışık düzen çalıştırmayı ve ilişkili Cloud Storage paketi ile içeriğini silmeyi öğrendiniz.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 3.0 Genel Lisans ve Apache 2.0 lisansı altında lisanslanmıştır.