Apache Oozie Nedir? Nasıl Kullanılır? Örnek Java Uygulaması Bölüm-1/3
Oozie nedir? Ne işe yarar? Hadoop sistemindeki yeri nedir?
Hadoop en yaygın büyük veri platformu olarak piyasadaki öncülüğünü devam ettirmektedir. Hadoop ekosistemi sürekli büyümekte ve yeni ihtiyaçlar için yeni projeler ortaya çıkmakta mevcut projeler ise sürekli iyileşmekte ve gelişmektedir. Apache Oozie sürekli büyüyüp gelişen bu sistemde, yerine getirdiği rol ile önemini korumaktadır. Çünkü sistem büyüdükçe onu oluşturan unsurların görevlerini belli bir düzende yerine getirmek, zamanlamak ve koordine etmek ihtiyacı artmaktadır. ACID teoremine dayalı klasik sitemlerde şimdiye kadar gelişmiş unsurlar büyük veri dünyasında da gelişmektedir. Bu minvalde Hadoop ekosistemindeki işleri yönetmek için iş akışı yönetim ve zamanlama aracına (workflow management and scheduling) ihtiyaç vardır. İşte Oozie’nin ekosistemdeki yeri buradadır.
Oozie’nin Hadoop ekosistemi içindeki rolü; Hadoop işleri diye adlandırabileceğimiz bir çok veri aktarımı ve dosya işlemlerini programlaması ve bunların sonuçları hakkında bilgi vermesidir. Çünkü sistemde yapılan bir çok iş birbirine bağımlıdır. Başka bir deyişle bir görevin ürettiği çıktıyı başka bir görev girdi olarak kullanmaktadır. Örneğin bir seri MapReduce ve HDFS görevi verip bunları belli bir zaman çizelgesi ve ardışık düzene bağlayıp Oozie üzerinden çalışmasını sağlayabilirsiniz. Daha somut bir örnek ile Sqoop’un RDBMS’den Hive’a aktardığı tabloyu Spark kaynak veri olarak kullanıp makine öğrenmesi yapabilir ve sonuçlarını raporlamak maksadıyla kullanılan başka bir RDBMS veri tabanına Sqoop ile yazdırabilir. Yani Ooozie’ye Haoop’un orkestrasyon sistemi diyebiliriz. Hadoop yaratıcılarından birinin çocuğunun oyuncak filine verdiği addan geldiği için Oozie’nin geliştiricileri de Oozie’ye hem fil hem de Hint kültürüyle ilgisi olan Mahout(fil bakıcısı/şoförü) ismi vermeye niyet etmişler ancak Mahout kullanıldığından Birmanca’da benzer anlam taşıyan Oozie de karar kılmışlar.
Bu yazı serisi üç bölümden oluşacak ve basit bir java programını Oozie ile çalıştıracağız. Benim örnekler için kullanacağım Hadoop sistemi Cloudera’nın quickstart sandbox’u olacak. Ön gereksinimlerimiz sadece bir Hadoop ortamının olmasıdır. Bunun dışında zaten Oozie’ye ilgi duymuş birisi zaten Hadoop konusunda belli bir aşama kaydetmiştir diye düşünüyorum. En iyi öğrenme örnek üzerinden yaparak öğrenmedir prensibince tıraşı kısa kesip icraata başlıyorum.
Oozie ile örnek uygulama
Öncelikle Cloudera Manager’a tarayıcıdan erişip zaten kurulmuş bir şekilde gelen Oozie’yi çalıştıralım.
Oozie çalışıyor mu?
Oozie rolünün yüklü olduğu sunucuya bağlanıp (burada tek sunucu olduğundan quickstart.cludera) oozie hayatta mı sorusunu soralım:
[cloudera@quickstart ~]\$ oozie admin -oozie http://quickstart.cloudera:11000/oozie -status System mode: NORMAL
Oozie web arayüzüne erişmek
Oozie normal cevabını aldık. Oozie hayatta mı komutunda kullandığımız adresi tarayıcıya girdiğimizde Oozie’nin web arayüzüne erişmiş oluruz.
Oozie’nin versiyonunu nasıl öğrenirim? Benim Oozie’m kaç versiyon?
Bu da oldukça basit. Yukarıdaki komutun sadece sonunu değiştirip öğrenelim:
[cloudera@quickstart ~]\$ oozie admin -oozie http://quickstart.cloudera:11000/oozie -version Oozie server build version: 4.1.0-cdh5.7.0
Öğrenmeyi kolaylaştırmak için için Hadoop sistemine Oozie kurulurken Oozie kullanımında lazım olan örnek/alıştırma dosyalar da yükleniyor. Şimdi bu örnek dosyaları bulalım ve lokal kullanıcımızın dizininde bir yere kopyalayalım. Benim bu yazı dizisindeki kullanıcı adım cloudera.
Oozie örnek dosyalarını bulma
[cloudera@quickstart ~]\$sudo find /usr -name "oozie*examples*"
Birçok arama sonucu arasından bize lazım olan sıkıştırılmış dosya
/usr/share/doc/oozie-4.1.0+cdh5.7.0+267/demo/oozie-examples.tar.gz
Önce nerede olduğumuza bakalım ve sonra oozie_ornekler isminde bir klasör oluşturalım:
[cloudera@quickstart ~]\$ pwd /home/cloudera
Oozie örnek dosyalarını yeni bir dizine taşıma
Klasör oluştur:
[cloudera@quickstart ~]\$ sudo mkdir oozie_ornekler
Oluşan klasörün içine oozie-examples.tar.gz
dosyasını kopyalama:
[cloudera@quickstart ~]\$sudo cp /usr/share/doc/oozie-4.1.0+cdh5.7.0+267/demo/oozie-examples.tar.gz /home/cloudera/oozie_ornekler/
Kopyaladığımız dizini kontrol edelim:
[cloudera@quickstart ~]\$ ls oozie_ornekler/ oozie-examples.tar.gz
Sıkıştırılmış dosyayı açalım:
[cloudera@quickstart oozie_ornekler]\$ sudo tar xvzf oozie-examples.tar.gz
oozie örnek dosyalarını inceleme
Açılan dosyalarda neler var bakalım:
[cloudera@quickstart oozie_ornekler]\$ ls examples oozie-examples.tar.gz [cloudera@quickstart oozie_ornekler]\$ ls examples/ apps input-data src
Önce tüm dosyalar examples klasörü içine açıldı. daha sonra examples içinde üç tana daha klasör gördük.
apps klasörü içine bakalım:
[cloudera@quickstart oozie_ornekler]\$ ls -ltr examples/apps/ total 96 drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 streaming drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 sqoop-freeform drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 pig drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 map-reduce drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 hive2 drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 subwf drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 ssh drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 spark drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 no-op drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 distcp drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 demo drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 custom-main drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 cron drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 aggregator drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 shell drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 java-main drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 hcatalog drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 hadoop-el drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 cron-schedule drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 bundle drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 sqoop drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 sla drwxr-xr-x 2 1106 4001 4096 Aug 26 02:06 hive drwxr-xr-x 3 1106 4001 4096 Aug 26 02:06 datelist-java-main
Yukarıdaki listeyi incelediğimizde Oozie ile Hadoop platformunda ne tür işleri idare edebileceğimiz hakkında fikir edinebiliriz. Bir klasörün içine bakalım (spark olsun) neler varmış:
[cloudera@quickstart oozie_ornekler]\$ ls -ltr examples/apps/spark/ total 12 -rw-r--r-- 1 1106 4001 1920 Mar 23 2016 workflow.xml -rw-r--r-- 1 1106 4001 1019 Mar 23 2016 job.properties drwxr-xr-x 2 root root 4096 Aug 26 02:06 lib
Lib diye ayrı bir klasör daha çıktı onun da içine bakalım ne varmış?:
[cloudera@quickstart oozie_ornekler]\$ ls -ltr examples/apps/spark/lib/ total 28 -rw-r--r-- 1 1106 4001 27652 Mar 23 2016 oozie-examples.jar
jar dosyamız varmış. Buradaki jar dosyası Oozie örneğini kullanmak için derlenmiş bir uygulamaya ait. Bir üst dizindeki workflow.xml adından da anlaşılacağı üzere iş akışı ile yapılan konfigürasyonların tutulduğu xml dosyasıdır.
Şimdiye kadar examples dosyasının içinde neler varmış göz attık. Yazı daha fazla uzamasın ikinci bölümde kaldığımız yerden devam edeceğiz.