Spark SQL Thrift Server (STS) & Farklı Databaselere Bağlanma

Samet Surmez
3 min readMay 12, 2021

Spark SQL’e opsiyonel bağlanma yöntemlerinden biri olan STS, Spark’ı dağıtık yapıda in-memory sorgu motoru gibi kullanmaya olanak sağlıyor. Bu servis ile sparkda yapısal hale getirilmiş olan veriler ile farklı databaselerde bulunan verilere aynı sessiondan erişebilmek mümkün.

Bu modda son kullanıcılar veya uygulamalar (örneğin BI Toolları), herhangi bir kod yazmaya, veri taşımaya gerek kalmadan SQL sorgularını doğrudan Spark SQL ile çalıştırabilirler. Bunun için sparkla gelen start-thriftserver servisini çalıştırmak yeterli.

start-thriftserver.sh file’ı SPARK_HOME/sbin dizini altında bulabilirsiniz. Default değer olarak hostname :localhost, port numarası olarak 10000 ile çalışır (localhost:10000). Opsiyonel olarak alabileceği parametreleri görebilmek için ise start-thriftserver.sh — help komutunu çalıştırmanız yeterli.

start-thriftserver.sh çalıştırdıktan sonra bağlantıyı test edebilmek için beeline’ı kullanabilirsiniz. Burada önemli nokta kullanacağımız beeline Spark ile gelen SPARK_HOME/bin altındaki beeline dır.

sudo ./start-thriftserver.sh — hiveconf hive.server2.thrift.port=10016

Default port olan 10000 yerine 10016 port’unu kullandım
beeline ile Spark SQL e bağlanma

Artık Spark SQL’e terminal ekranı yerine kullanıcı dostu araçlar ile bağlanabiliriz.(Apache Zeppelin, DBeaver vb.) Yine benzer şekilde OBIEE, Qliksense vb. BI araçları ile de bağlanmak mümkün.

DBeaver ile bağlanma:

Bu mod ile sparkda kullanılan repartition,broatcast gibi performans yöntemlerini hint olarak kullanabiliriz.

SELECT /*+ REPARTITION(3) */ * FROM table;

Bu modda farklı bir databasede bulunan tabloya erişmemiz, sparkda yapısal hale getirdiğimiz veri ile Prestoda olduğu gibi join yapmamız mümkün. Örneğin Oracleda bulunan bir tabloya erişebilmek için:

CREATE TABLE oracle_table
USING org.apache.spark.sql.jdbc
OPTIONS (
dbtable ‘schema_name.table_name’,
driver ‘oracle.jdbc.driver.OracleDriver’,
url ‘jdbc:oracle:thin:username/password@<hostname>:<port>/<db>’);

Spark SQL
Spark SQL

Prestoya alternatif olarak sparkın bu moduyla Spark SQL’i distributed in-memory sorgulama moturu olarak kullanmak mümkün. Veriyi taşımadan, çoklamadan bulunduğu yerden hızlı şekilde analiz edebilirken ek bir kurulum, kod yazmaya da gerek yok. Tek yapılması gereken servisi çalıştırmak. Daha ne olsun. :)

Kaynaklar :

--

--