IntelliJ IDEA ile Apache Spark Projesini Uzak YARN Cluster Üzerinde Çalıştırmak-1/2

1. Giriş

Merhabalar. Uygulama geliştirirken geliştirme(dev), test ve canlı (prod) gibi farklı farklı ortamlar kullanırız. Farklı ortamlarda çalışırken bazı ayarlamalar yapmamız gerekir. Şayet hızlı bir şekilde uygulamayı çıkarayım, geliştirme, canlı vb. uğraşmayayım diyorsanız bu yazı size göre. Bu yazıda Windows bilgisayarımızı driver olarak kullanarak IntelliJ IDEA ile canlı Hadoop Cluster üzerinde kodlarımızı geliştirme esnasında çalıştıracağız. Başka bir deyişle kod geliştirme aracı (Intellij) kendi lokal bilgisayarımızda iken çalıştır dediğimizde kodlar uzak Hadoop cluster üzerinde çalışacak ve driver olarak biz sonuçları görebileceğiz. Bunu aşağıdaki şekilde daha iyi görebiliriz.

2. Kullanılan Araçlar ve Varsayımlar

2.1. Kullanılan Araçlar

Bu çalışmada; Windows 10 Bilgisayar, gitbash, IntelliJ IDEA, Scala 2.11.8, java 8 (windows), Cloudera Manager 6.2.X ile yönetilen 5 sunuculu Hadoop Cluster, hem Hadoop cluster hem windows bilgisayarda Spark 2.4.0 sürümü kullanılmıştır.

Hadoop cluster 5 sunucudan oluşmaktadır. 1 ve 2 master; 3,4,5 ise slave sunuculardır. Hadoop Cluster sunucu isimleri:

  • cdh1.impektra.com
  • cdh2.impektra.com
  • cdh3.impektra.com
  • cdh4.impektra.com
  • cdh5.impektra.com

2.2. Varsayımlar

Windows 10 bilgisayarınızda Spark 2.4.0 kurulu ve çalışır durumdadır.

3. Ön Ayarlar

3.1. Windows kullanıcısı için HDFS’te home dizin oluşturma

Kendi Windows bilgisayarımızdan çalıştırdığımız kod uzak Hadoop Cluster’a kendi kullanıcı adımızla gider. HDFS tarafında bu kullanıcıya ait home diznin olması gerekir. HDFS dünyasında home dizin /user dizni altındadır. Öyleyse önce edge sunucumuza (cdh1) bağlanalım ve home dizni oluşturalım /user/<windows kullanıcı adınız>. Kullanıcı adınızı bilmiyorsanız aşağıdaki şekilden öğrenebilirsiniz. Benimki user.

Önce cdh1 sunucusuna gitbash ile bağlanalım.

ssh root@cdh1

Bağlandığınızda:

[root@cdh1 ~]#

promt yukarıdaki şekilde hazır bizi bekliyor olacaktır. Önce linux tarafında user kullanıcısı ve home diznini oluşturalım:

[root@cdh1 /]# useradd -m user

Yukarıdaki komut hem kullanıcıyı hem de kullanıcı home diznini (/home/user) oluşturdu.

Şimdi az önce oluşturduğumuz user kullanıcısının hdfs üzerinde home diznini yaratalım. Bunu yaparken hdfs kullanıcısının adını kullanacağız. Neden diye sorarsanız hdfs kullanıcısı HDFS dünyasının süper kullanıcısıdır.

[root@cdh1 ~]# sudo -u hdfs hdfs dfs -mkdir /user/user

Kontrol edelim

[root@cdh1 ~]# hdfs dfs -ls /user
Found 9 items
drwxr-xr-x   - admin  admin               0 2019-07-14 10:32 /user/admin
drwx------   - hdfs   supergroup          0 2019-07-14 09:18 /user/hdfs
drwxrwxrwx   - mapred hadoop              0 2019-07-14 05:58 /user/history
drwxrwxr-t   - hive   hive                0 2019-07-14 05:58 /user/hive
drwxrwxr-x   - hue    hue                 0 2019-07-14 06:03 /user/hue
drwxrwxr-x   - oozie  oozie               0 2019-07-14 05:57 /user/oozie
drwxr-x--x   - spark  spark               0 2019-07-14 05:57 /user/spark
drwxr-xr-x   - hdfs   supergroup          0 2019-09-29 11:28 /user/user
drwxr-xr-x   - hdfs   supergroup          0 2019-07-14 05:57 /user/yarn

user kullanıcısı için hdfs dünyasında home dizin oluşturuldu. Ancak dizin sahipliği hala hdfs, bunu user yapmalıyız ki user kullanıcısı buraya erişirken hata almasın.

[root@cdh1 ~]# sudo -u hdfs hdfs dfs -chown user:hdfs /user/user

3.2. Spark jar dosyalarını HDFS’e taşıma

Madem Spark’ı uzak Hadoop Cluster üzerinden çalıştıracağız. Uygulamamızın ihtiyaç duyacağı jar dosyalarını HDFS’e taşımalıyız. Bunun için önce HDFS’te bir klasör oluşturacağız ardından da jar dosyalarını Windows üzerinde kurulu olan spark içinden kopyalayacağız.

Ben HDFS /tmp/spark_jars yaratacağım. Bunun için Windows bilgisayarımdaki jar dosyalarını önce edge sunucu olarak kullandığım cdh1 sunucusuna ardında da hdfs’e taşımayı planlıyorum.

[root@cdh1 /]# sudo -u user hdfs dfs -mkdir /tmp/spark_jars

Kontrol edelim

[root@cdh1 /]# hdfs dfs -ls /tmp
Found 4 items
d---------   - hdfs   supergroup          0 2019-07-14 11:06 /tmp/.cloudera_health_monitoring_canary_files
drwx-wx-wx   - hive   supergroup          0 2019-07-14 08:41 /tmp/hive
drwxrwxrwt   - mapred hadoop              0 2019-07-14 08:52 /tmp/logs
drwxr-xr-x   - user   supergroup          0 2019-09-29 13:48 /tmp/spark_jars

Tamadır. Şimdi jar dosyalarını taşıyalım. Önce cdh1 sunucusu üzerinde bu dosyaları hdfs’e aktarmadan önce geçici olarak tutacağım dizin yaratalım. user kullanıcısına geçip onun home diznini kullanalım.

[root@cdh1 /]# su - user
[user@cdh1 ~]$ mkdir spark_jars_lokal

Şimdi Windows bilgisayardan cdh1 sunucu lokal diznine (/home/user/spark_jars_lokal)aktarma yapalım. Benim spark home diznim: C:\spark. Gitbash üzerinde cd ile bu dizine geçelim ve cdh1 sunucusuna bu jar dosyalarını kopyalayalım. Bunun için ikinci bir gitbash terminali açıyoruz.

cd /c/spark
scp jars/* root@cdh1:/home/user/spark_jars_lokal

Evet kopyalama başladı. Aşağıdaki şekilde kopyalanan dosyaları göreceksiniz:

cdh1 sunucusu üzerinden kontrol edelim.

[root@cdh1 /]# ls -l /home/user/spark_jars_local/

Gördüğümüz gibi dosya sahipliği root kullanıcısında bunu user yapalım ve dosya modunu çalıştırılabilir yapalım. Bunun için exit ile user kullanıcısından tekrar root kullanıcısına geçiş yapacağız.

[user@cdh1 ~]$ exit
logout
You have new mail in /var/spool/mail/root
[root@cdh1 /]#
[root@cdh1 /]# chown user:user /home/user/spark_jars_lokal/*
[root@cdh1 /]# chmod 755 /home/user/spark_jars_lokal/*

Artık jar dosyaları user kullanıcısının kontrolünde. Şimdi bunları HDFS üzerindeki /tmp/spark_jars’a taşıyalım ve kontrol edelim.

[root@cdh1 /]# sudo -u user hdfs dfs -put /home/user/spark_jars_lokal/* /tmp/spark_jars
[root@cdh1 /]# hdfs dfs -ls /tmp/spark_jars
Found 227 items
-rw-r--r--   3 user supergroup      16993 2019-09-29 13:51 /tmp/spark_jars/JavaEWAH-0.3.2.jar
-rw-r--r--   3 user supergroup     325335 2019-09-29 13:51 /tmp/spark_jars/RoaringBitmap-0.7.45.jar
-rw-r--r--   3 user supergroup     236660 2019-09-29 13:51 /tmp/spark_jars/ST4-4.0.4.jar
-rw-r--r--   3 user supergroup      69409 2019-09-29 13:51 /tmp/spark_jars/activation-1.1.1.jar
-rw-r--r--   3 user supergroup     134044 2019-09-29 13:51 /tmp/spark_jars/aircompressor-0.10.jar

Dosyaların burada da modunu 755 yapalım ve kontrol edelim.

[root@cdh1 /]# sudo -u user hdfs dfs -chmod 755 /tmp/spark_jars/*
[root@cdh1 /]# sudo -u user hdfs dfs -ls /tmp/spark_jars/
Found 227 items
-rwxr-xr-x   3 user supergroup      16993 2019-09-29 13:51 /tmp/spark_jars/JavaEWAH-0.3.2.jar
-rwxr-xr-x   3 user supergroup     325335 2019-09-29 13:51 /tmp/spark_jars/RoaringBitmap-0.7.45.jar
-rwxr-xr-x   3 user supergroup     236660 2019-09-29 13:51 /tmp/spark_jars/ST4-4.0.4.jar
-rwxr-xr-x   3 user supergroup      69409 2019-09-29 13:51 /tmp/spark_jars/activation-1.1.1.jar
-rwxr-xr-x   3 user supergroup     134044 2019-09-29 13:51 /tmp/spark_jars/aircompressor-0.10.jar
-rwxr-xr-x   3 user supergroup     445288 2019-09-29 13:51 /tmp/spark_jars/antlr-2.7.7.jar

3.3. Windows Ana Makinenin Adını ve IP numarasını Cluster hosts dosyalarında tanımlama

Spark driver Windpws 10 makine olduğu için bu makinenin ip ve ismini cluster linux makineleri /etc/hosts dosyalarına eklememiz gerekir. Önce ana makinenin adını ve ip numarasını öğrenelim. Windows cmd açılır (Windows tuşu + cmd), ipconfig komutu çalıştırılır.

Peki makinenin adı? Bunu en iyi Spark uygulamasını çalıştırdığımızda öğrenebiliriz. Diğer yöntemler maalesef kısa adını veriyor. Uygulama çalışırken INFO loglarında SparkUI adresini yazar.

INFO SparkUI: Stopped Spark web UI at http://DESKTOP-RL2HHBV.mshome.net:4040

Buradaki DESKTOP-RL2HHBV.mshome.net bizim Windows ana makinenin adıdır.

Şimdi ip ve makine adını öğrendik. Bunu Hadoop cluster linux makinelerin /etc/hosts dosyasına ekleyelim

[root@cdh1 ~]# nano /etc/hosts

komutu ile host dosyasını nano editörü ile açarız.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.206.101 cdh1.impektra.com cdh1
192.168.206.102 cdh2.impektra.com cdh2
192.168.206.103 cdh3.impektra.com cdh3
192.168.206.104 cdh4.impektra.com cdh4
192.168.206.105 cdh5.impektra.com cdh5
172.18.54.241 DESKTOP-RL2HHBV.mshome.net

Son satırda olanı ekleriz (Sizin ip ve makine isminiz farklılık gösterebilir).

Bu işlemi cluster içindeki diğer makinelere de yapmalıyız. Bunu elle veya pssh gibi pratik yöntemlerle yapabilirsiniz.

Evet bu yazımızda Spark uygulamamızın ihtiyacı olabilecek jar dosyalarını HDFS’e taşıdık ve windows kullanıcımızın HDFS diznini oluşturduk. Serimize bir sonraki yazımızla devam ediyoruz.

Yazar Hakkında
Toplam 174 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara