Spark İşini Cep Telefonundan Başlatmak: Apache Livy Server

Başlık çarpıcı geldi değil mi? İnanmazsınız ancak doğru. Spark işlerini genelde client kütüphanelerinin kurulu olduğu makinelerden, yani Spark’ın Hadoop’un nerede olduğundan haberdar ve konfigürasyonları yapılmış makinelerden, başlatırız. Bu durum bizim spark işini başlatma (spark-submit) konusunda client kütüphanelerine bağımlı kılar. İşte bu kısıttan kurtulmak için “Spark işlerini her yerden başlat (Submit Jobs from Anywhere)” sloganıyla bir Apache projesi başlatılmış. Projenin adı: Apache Livy. Apache Livy rest api kullanarak bizim Spark işi başlatmamızı sağlıyor. Üstelik hem batch iş başlatabiliyoruz hem de interaktif shell işi başlatabiliyoruz. Biliyorsunuz veri bilimi ve veri analizi personeli Zeppelin ve Jupyter gibi notebookları yaygın olarak kullanılıyor.

Bu yazımızda Apache Livy Server kurulumu, temel konfigürasyonu ve  YARN üzerinde örnek bir Spark uygulaması başlatmayı öğreneceğiz.

Apache Livy Mimarisi

Livy mimarisi aşağıdaki gibidir. Görsel Livy’nin resmi sitesinden alınmıştır.

Şekil-1: Apache Livy Mimarisi
Şekil-1: Apache Livy Mimarisi

Yukarıda Şekil-1’de gördüğümüz gibi aslında Livy Server client ile Spark arasında giriyor ve oradan oraya al gülüm ver gülüm modunda çalışıyor.

Apache Livy’nin sağladığı bazı faydalar

  • Farklı notebooklar arasında aynı SparkContex’e erişim sağlar.
  • Daha etkin kaynak kullanımı. Kaynakları sonsuza dek tutmaz.
  • User impersonation: İşi başlatan kullanıcı Spark işinin kullanıcısı olur.
  • Spark’ı yarn-cluster mode kullanmaya olanak verir.

Kurulum, Konfigürasyon ve Uygulama

Ortam Bilgileri

Spark: 3.0.0
Livy: 0.7.1
Java: 1.8.0
Hadoop: 3.1.2
İşletim Sistemi: CentOS7

Yukarıda paylaştığım bilgiler benim bu çalışmayı yaptığım anda sahip olduğum ortam bilgileridir. Aynı uygulamayı yapmak için aynı ortam ve sürümleri kullanmak zorunlu değildir.

Apache Livy Kurulumu

Download

wget https://ftp.itu.edu.tr/Mirror/Apache/incubator/livy/0.7.1-incubating/apache-livy-0.7.1-incubating-bin.zip

 Unzip

unzip apache-livy-0.7.1-incubating-bin.zip

Soft Link

ln -s apache-livy-0.7.1-incubating-bin livy

Apache Livy Konfigürasyon

Add environment

Aşağıdaki ortam değişkenleri tanımlı olmalıdır.
export LIVY_HOME=/opt/manual/livy/
export LIVY_CONF_DIR=/opt/manual/livy/conf/

Livy server binary dizinini PATH’e ekleyelim.

export PATH="$PATH:/opt/manual/livy/bin"

Şimdi template olan konfigürasyon dosyalarını kopyalayarak ve adını değiştirerek kullanılabilir hale getirelim.

cd /opt/manual/livy/conf/
cp livy.conf.template livy.conf
cp livy-env.sh.template livy-env.sh

livy.conf içinde livy.spark.master ‘ı yorumdan çıkartıp local yerine yarn yazalım

 livy.spark.master =  yarn

Apache Livy Server Başlatma

Hadoop YARN servisleri çalışıyorsa Livy Server başlayabilir.

livy-server start

Durumunu status ile öğrenebiliriz.

livy-server status

Çıktı:
livy-server is running (pid: 5761)

Apache Livy Server Web UI

Livy server web arayüzüne sahip. Bu arayüze varsayılan port 8889’dan ulaşabiliriz.

Şekil-1: Apache Livy Server Web Arayüzü
Şekil-2: Apache Livy Server Web Arayüzü

Yukarıdaki satırlar ben daha önceden deneme yaptığım için. Siz de muhtemelen ilk çalıştırdığınızda boş gelecektir.

Apache Livy Server üzerinden örnek Spark uygulaması başlatma

Bu linkte batch işi başlatma esnasında Livy POST isteğinde kullanılabilecek seçenekler var, ihtiyaca göre bunları kullanabilirsiniz. Ben aşağıda basit bir iş başlatacağım. Çalıştıracağım spark uygulaması:

from pyspark.sql import SparkSession
from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder \
    .appName("Apache Livy Example") \
    .getOrCreate()
df = spark.read.format("csv")\
    .option("header", True) \
    .option("inferSchema", True) \
    .load("/user/train/datasets/Advertising.csv")

df2 = df.filter(F.col("Sales") > 20)

df2.show()

df2.write.format("csv"). \
    mode("overwrite") \
    .save("/user/train/advertising_gt_20")

Bu uygulama dosyasını hdfs’te /user/train/main.py adıyla taşıdım, main.py adı şart değil başka bir isim de olur.

Şimdi başlatıyorum.

curl -X POST \
--data '{"file": "/user/train/main.py", "proxyUser":"abuzittin","name":"My Livy Example Session"}' \
-H "Content-Type: application/json" \
192.168.206.130:8998/batches

Başlattıktan sonra Livy web arayüzüne gidip bakalım.

Şekil-2: Livy Server Web Arayüzü Spark İşi
Şekil-3: Livy Server Web Arayüzü Spark İşi

Burada application_xxxxxx linkine tıkladığımızda bizi önce YARN resource manager ara yüzüne, orada Application master linkine tıkladığımızda ise spark uygulama arayüzüne yönlendirecektir.

Şekil-3: Spark App Web UI
Şekil-4: Spark App Web UI

Uygulama sonuçlarını bir görelim hdfs’e yazmış mı?

hdfs dfs -ls /user/train/advertising_gt_20

Çıktı:
Found 2 items
-rw-r--r--   1 train supergroup          0 2021-05-21 09:55 /user/train/advertising_gt_20/_SUCCESS
-rw-r--r--   1 train supergroup        752 2021-05-21 09:55 /user/train/advertising_gt_20/part-00000-96c03902-f725-4196-8be2-1062ad4e417a-c000.csv


hdfs dfs -head /user/train/advertising_gt_20/part-00000-96c03902-f725-4196-8be2-1062ad4e417a-c000.csv

Çıktı
1,230.1,37.8,69.2,22.1
16,195.4,47.7,52.9,22.4
18,281.4,39.6,55.8,24.4
31,292.9,28.3,43.2,21.4
37,266.9,43.8,5.0,25.4
40,228.0,37.7,32.0,21.5
43,293.6,27.7,1.8,20.7
48,239.9,41.5,18.5,23.2
53,216.4,41.7,39.6,22.6
54,182.6,46.2,58.7,21.2

Yukarıda gördüğümüz gibi satış değeri 20’den büyük olanları hedef dizin olan /user/train/advertising_gt_20 yazmış.

Peki ya cep telefonu?

Başlıkta dikkatimizi çektiniz hani nerede cep telefonundan başlatma işi? Arkadaşlar http isteği gönderebildiğiniz her yerde artık spark işi başlatabilirsiniz, yeter ki Livy server’a cep telefonunuzun ağ bağlantısı olsun.

Başka bir yazıda görüşmek dileğiyle…

 

Kapak: Reinhart Julian on Unsplash

Yazar Hakkında
Toplam 180 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