Apache Oozie ile MapReduce Görevi Çalıştırma

Apache Oozie’ye daha önce basit bir giriş yapmış ve küçük bir java uygulamasını çalıştırmıştık. Bu yazımızda examples dosyası içindeki MapReduce görevini başlatacağız.  examples klasörünü bulmayı ve lokal dizinde bir yere kopyalamayı şu yazıya bırakarak atlıyorum. Aşağıdaki kodlarda önce pwd bulunduğum dizine bakacağım ve sonra map-reduce örneğinin bulunduğu dizinin içini listeleyeceğim.

[cloudera@quickstart ~]$ pwd
/home/cloudera
[cloudera@quickstart ~]$ ls -ltr oozie_ornekler/examples/apps/map-reduce/
total 20
-rw-r--r-- 1 1106 4001 2559 Mar 23  2016 workflow.xml
-rw-r--r-- 1 1106 4001 2274 Mar 23  2016 workflow-with-config-class.xml
-rw-r--r-- 1 1106 4001 1028 Mar 23  2016 job-with-config-class.properties
-rw-r--r-- 1 1106 4001 1012 Mar 23  2016 job.properties
drwxr-xr-x 2 root root 4096 Aug 26 02:06 lib

En altta lib klasörü içinde map-reduce uygulamasının .jar dosyası olacak. Onun da içine girip bir göz atalım.

[cloudera@quickstart ~]$ jar tf oozie_ornekler/examples/apps/map-reduce/lib/oozie-examples-4.1.0-cdh5.7.0.jar
META-INF/
META-INF/MANIFEST.MF
org/
org/apache/
org/apache/oozie/
org/apache/oozie/example/
META-INF/DEPENDENCIES
META-INF/LICENSE
META-INF/NOTICE
org/apache/oozie/example/TimeUnit.class
org/apache/oozie/example/DemoMapReduceMain.class
org/apache/oozie/example/LocalOozieExample.class
org/apache/oozie/example/DemoReducer.class
org/apache/oozie/example/DemoPigMain.class
org/apache/oozie/example/DemoJavaMain.class
org/apache/oozie/example/DemoMapper.class
org/apache/oozie/example/SampleMapper.class
org/apache/oozie/example/SampleOozieActionConfigurator.class
org/apache/oozie/example/DateList.class
org/apache/oozie/example/SparkFileCopy.class
org/apache/oozie/example/SampleReducer.class
org/apache/oozie/example/Repeatable.class
META-INF/maven/
META-INF/maven/org.apache.oozie/
META-INF/maven/org.apache.oozie/oozie-examples/
META-INF/maven/org.apache.oozie/oozie-examples/pom.xml
META-INF/maven/org.apache.oozie/oozie-examples/pom.properties

Buradan çıkalım ve bir üst dizindeki job.properties dosyasına bakalım.

[cloudera@quickstart ~]$ cat oozie_ornekler/examples/apps/map-reduce/job.properties
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
queueName=default
examplesRoot=examples

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce/workflow.xml
outputDir=map-reduce

En üstteki açıklama satırı haricinde altı özellik ve aldığı değeri görüyoruz. Bu dosya örnek olduğu için nameNode ve jobtracker adreslerimiz bizim faklı. Bu adresleri nasıl öğreneceğiz? Aşağıdaki komut ile açılan xml dosyası içinden fs.defaultFS özelliğinde yazan değer nameNode adresidir. Benimki hdfs://quickstart.cloudera:8020

[cloudera@quickstart ~]$ cat /etc/hadoop/conf/core-site.xml

Jobtracker adresi konusunda bu yazıda bazı bilgiler verdim. Burada sadece buraya yazacağımız adresi nasıl öğreneceğimizi koyacağım:

[cloudera@quickstart ~]$ cat /etc/hadoop/conf/yarn-site.xml

Komutu ile resourcemanager adresini öğreneceğimiz yarn-site.xml dosyasının içeriğini görebiliriz. Aşağıda ben düzgün görünsün diye Notepad++ içine kopyaladım ve ekran görüntüsü olarak buraya koydum. jobtracker karşısına yazacağımız değer quickstart.cloudera:8032 olacak.

Job.properties dosyasını düzenlemek

Şimdi nano editörü ile job.properties dosyasının içine girip değişikliklerimizi yapalım. (Siz vi, vim vb. başka editör kullanabilirsiniz)

[cloudera@quickstart java-main]$ sudo nano job.properties
nameNode=hdfs://quickstart.cloudera:8020
jobTracker=quickstart.cloudera:8032
queueName=default
examplesRoot=examples

oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce/workflow.xml
outputDir=map-reduce

Değişiklik yaptığımız yerlerin fontunu kırmızı yaptım. Beşinci özelliğimiz olan en alt satırdaki oozie.wf.application.path dan bahsetmek istiyorum. Bu beşinci özellik aslında diğer dört özelliği kullanarak dosya yolu oluşturuyor.

${nameNode}user${user.name}${examplesRoot}/apps/map-reduce/workflow.xml

Bu özellik mevcut konfigürasyona göre şu şekilde bir değer alacaktır:

hdfs://quickstart.cloudera:8020userclouderaexamples/apps/map-reduce/workflow.xml

Şimdi dosyalarımızı burada belirtilen hdfs dizinine kopyalayalım. Ben daha önce kopyalamıştım. Tekrar kopyalarsam hata alırım. Bu sebeple önce map-reduce klasörünü hdfs’den kaldıracağım sonra tekrar bu klasörü lokalimden kopyalayacağım.

[cloudera@quickstart ~]$ hdfs dfs -rm -R /user/cloudera/examples/apps/map-reduce

Lokalden hdfs’e tekrar kopyala:

[cloudera@quickstart ~]$ hdfs dfs -put /home/cloudera/oozie_ornekler/examples/apps/map-reduce/  /user/cloudera/examples/apps

Evet kopyalandı. Artk görevi çalıştırma aşamasına geçebiliriz.

Oozie ile map-reduce görevini başlatmak
[cloudera@quickstart ~]$ oozie job -oozie http://quickstart.cloudera:11000/oozie -config /home/cloudera/oozie_ornekler/examples/apps/map-reduce/job.properties -run
job: 0000001-170825203534617-oozie-oozi-W

Yukarıdaki komutla görev başladı ve görev numarası çıktısı komut satırından göründü. Yukarıdaki komut formatının daha anlaşır olması için parametrelerin neye işaret ettiğini açıklayalım:

oozie job -oozie [oozie sunucusu] -config [lokal dizinde job.properties dosya yolu] -run

Görev hakkında bilgi almak için:

[cloudera@quickstart ~]$ oozie job -oozie http://quickstart.cloudera:11000/oozie -info 0000001-170825203534617-oozie-oozi-W
Job ID : 0000001-170825203534617-oozie-oozi-W
------------------------------------------------------------------------------------------------------------------------------------
Workflow Name : map-reduce-wf
App Path      : hdfs://quickstart.cloudera:8020/user/cloudera/examples/apps/map-reduce/workflow.xml
Status        : SUCCEEDED
Run           : 0
User          : cloudera
Group         : -
Created       : 2017-08-27 15:52 GMT
Started       : 2017-08-27 15:52 GMT
Last Modified : 2017-08-27 15:53 GMT
Ended         : 2017-08-27 15:53 GMT
CoordAction ID: -

Actions
------------------------------------------------------------------------------
ID                         Status    Ext ID                 Ext Status Err Code
------------------------------------------------------------------------------
0000001-170825203534617
-oozie-oozi-W@:start:      OK        -                      OK         -
-------------------------------------------------------------------------------
0000001-170825203534617
-oozie-oozi-W@mr-node      OK        job_1502609949360_0002 SUCCEEDED  -
-------------------------------------------------------------------------------
0000001-170825203534617
-oozie-oozi-W@end          OK        -                      OK         -
-------------------------------------------------------------------------------

Bu görev ne yaptı ona bakalım. job.properties dosyasında outputDir=map-reduce özelliğini değiştirmemiştik. Yani üretilen sonuçlar hdfs’de examples/output-data klasörü altında map-reduce klasörü içine yazılacak. Girip bakalım bu dizine sonuç var mı?

[cloudera@quickstart ~]$ hdfs dfs -ls /user/cloudera/examples/output-data/map-reduce
Found 2 items
-rw-r--r--   1 cloudera cloudera          0 2017-08-27 08:53 /user/cloudera/examples/output-data/map-reduce/_SUCCESS
-rw-r--r--   1 cloudera cloudera       1547 2017-08-27 08:53 /user/cloudera/examples/output-data/map-reduce/part-00000

Evet buraya map-reduce klasörü açılmış ve içine bir sonuç yazdırılmış. cat ile sonucu okuyalım:

[cloudera@quickstart ~]$ hdfs dfs -cat /user/cloudera/examples/output-data/map-reduce/part*
0       To be or not to be, that is the question;
42      Whether 'tis nobler in the mind to suffer
84      The slings and arrows of outrageous fortune,
129     Or to take arms against a sea of troubles,
172     And by opposing, end them. To die, to sleep;
217     No more; and by a sleep to say we end
255     The heart-ache and the thousand natural shocks
302     That flesh is heir to ? 'tis a consummation
346     Devoutly to be wish'd. To die, to sleep;
387     To sleep, perchance to dream. Ay, there's the rub,
438     For in that sleep of death what dreams may come,
487     When we have shuffled off this mortal coil,
531     Must give us pause. There's the respect
571     That makes calamity of so long life,
608     For who would bear the whips and scorns of time,
657     Th'oppressor's wrong, the proud man's contumely,
706     The pangs of despised love, the law's delay,
751     The insolence of office, and the spurns
791     That patient merit of th'unworthy takes,
832     When he himself might his quietus make
871     With a bare bodkin? who would fardels bear,
915     To grunt and sweat under a weary life,
954     But that the dread of something after death,
999     The undiscovered country from whose bourn
1041    No traveller returns, puzzles the will,
1081    And makes us rather bear those ills we have
1125    Than fly to others that we know not of?
1165    Thus conscience does make cowards of us all,
1210    And thus the native hue of resolution
1248    Is sicklied o'er with the pale cast of thought,
1296    And enterprises of great pitch and moment
1338    With this regard their currents turn awry,
1381    And lose the name of action.

Yapılan iş şu; her satıdaki karater sayısı sayılıp satır başına eklenmiş. İlk satır 42 karakter, ikinci satır 42. karakterden başlamış ve o şekilde eklemeli olarak devam ediyor. Bir Oozie görevinin daha örneğini yapmış olduk. Veriyle kalın…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir