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 tamplate 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 servislerini ç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 öernek 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 151 yazı
Erkan ŞİRİN
Erkan ŞİRİN
2014'ten beri hem akademik alanda hem de sektörde pratik anlamda büyük veri ve veri bilimi ile ilgili çalışmalar yürütmektedir. Büyük veri ve veri bilimi ile ilgili birçok kurum ve şirkete danışmanlık ve eğitimler vermekte, projeler icra etmektedir. Çalışma alanları: büyük veri platformlarının kurulum ve yönetimi, büyük veri üzerinde makine öğrenmesi, olağan dışılık ve sahtecilik tespiti, akan veri işleme ve veri hazırlama sürecidir.
Yorumlar (Yorum yapılmamış)

Bir cevap yazın

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

×

Bir Şeyler Ara