1. Genel Bakış
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?
Google Cloud Platform hizmetlerinin kullanımıyla ilgili deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- 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.)
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.
- 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.
API'ler ve Hizmetler > Kontrol Paneli'ni seçin.
+ API'leri ve Hizmetleri Etkinleştir'i seçin.
"Compute Engine" araması yapın yazın. "Compute Engine API"yi tıklayın görünür.
Google Compute Engine sayfasında Etkinleştir'i tıklayın.
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:
Aşağı kaydırın ve Cloud Storage > Tarayıcı (Depolama alt bölümünde):
Ş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:
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.
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:
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
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
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:
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
İ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.
- 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:
Şimdi ardışık düzen parametrelerine bakalım. İşinizin adını tıklayarak başlayın:
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:
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çinExtractWords
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.
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.
Belirli hata mesajlarını görüntülemek için konsolun altındaki Günlükler simgesini tıklayabilirsiniz.
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.
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.
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.
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:
İş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:
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.
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.
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
- Dataflow Belgeleri: https://cloud.google.com/dataflow/docs/
Lisans
Bu çalışma, Creative Commons Attribution 3.0 Genel Lisans ve Apache 2.0 lisansı altında lisanslanmıştır.