EMR Serverless Spark içindeki yerleşik SQL düzenleyicisini kullanarak Spark SQL işlerini etkileşimli olarak yazın ve çalıştırın. Bir iş çalıştıktan sonra yürütme durumunu, kaynak kullanımını ve günlükleri incelemek için Spark UI'a erişin.
Ön koşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
Bir çalışma alanı. Bkz. Çalışma alanı oluşturma.
Bir SQL oturum örneği. Bkz. SQL oturumlarını yönetme.
Spark SQL işi oluşturma
DLF Katalog parametreleri SparkSession başlatma sırasında yüklenir. Catalog ile ilgili parametrelerin (örneğin spark.sql.catalog.dlf.warehouse) PySpark kodu içinde spark.conf.set() kullanılarak dinamik şekilde ayarlanması etkili olmaz. Bu parametreleri doğru yapılandırmak için bir iş gönderirken bunları başlangıç parametresi olarak belirtin. Örneğin, EMR Serverless Spark konsolunun Configuration bölümüne veya CLI'daki --conf parametresine spark.sql.catalog.dlf.warehouse=oss://your-bucket/warehouse-path ekleyin.
-
Geliştirme sayfasına gidin.
EMR konsolu üzerinde oturum açın.
Sol gezinme bölmesinde EMR Serverless \> Spark seçeneğini seçin.
Spark sayfasında hedef çalışma alanının adını tıklayın.
EMR Serverless Spark sayfasında sol gezinme bölmesinden Development seçeneğini tıklayın.
-
Bir iş oluşturun.
Development sekmesinde
simgesini tıklayın.İletişim kutusunda bir Name girin, Türü SparkSQL olarak ayarlayın ve OK seçeneğini tıklayın.
Sağ üst köşede bir data catalog, veritabanı ve çalışan bir SQL oturum örneği seçin. Yeni bir SQL oturum örneği oluşturmak için açılır listeden Connect to SQL Session seçeneğini belirleyin. Ayrıntılar için bkz. SQL oturumlarını yönetme.
-
Düzenleyiciye SQL deyimlerini girin.
Örnek 1: Temel SQL işlemleri
Veritabanı oluşturun, bu veritabanına geçiş yapın, tablo oluşturun, satır ekleyin ve verileri sorgulayın.
create DATABASE test_sql; use test_sql; CREATE TABLE IF NOT EXISTS my_table (id INT, name STRING); INSERT INTO my_table VALUES(1, 'Alice'),(2, 'Bob'); SELECT * FROM my_table WHERE id > 1;Sonuçlar düzenleyicinin altındaki çıkış panelinde görüntülenir.
#
id
name
1
2
BobÖrnek 2: CSV tabanlı harici tablo
Object Storage Service (OSS) içindeki bir CSV dosyasıyla desteklenen harici bir tablo oluşturun ve analitik sorgusu çalıştırın.
oss://<bucketname>/user/ifadesini gerçek paket yolunuzla değiştirin.-
Harici tabloyu oluşturun. Aşağıdaki alanlara sahip
ordersadlı bir tablo tanımlayın:order_id: Sipariş kimliği.order_date: Sipariş zaman damgası, örneğin'2025-07-01 10:00:00'.order_category: Ürün kategorisi, örneğin'Electronics'veya'Apparel'.order_revenue: Sipariş tutarı.
CREATE TABLE orders ( order_id STRING, -- Order ID order_date STRING, -- Order timestamp order_category STRING, -- Product category order_revenue DOUBLE -- Order amount ) USING CSV OPTIONS ( path 'oss://<bucketname>/user/', header 'true' ); -
Test verilerini ekleyin.
INSERT OVERWRITE TABLE orders VALUES ('o1', '2025-07-01 10:00:00', 'Electronics', 5999.0), ('o2', '2025-07-02 11:30:00', 'Apparel', 299.0), ('o3', '2025-07-03 14:45:00', 'Electronics', 899.0), ('o4', '2025-07-04 09:15:00', 'Home Goods', 99.0), ('o5', '2025-07-05 16:20:00', 'Electronics', 1999.0), ('o6', '2025-07-06 08:00:00', 'Apparel', 199.0), ('o7', '2025-07-07 12:10:00', 'Electronics', 799.0), ('o8', '2025-07-08 18:30:00', 'Home Goods', 59.0), ('o9', '2025-07-09 20:00:00', 'Electronics', 399.0), ('o10', '2025-07-10 07:45:00', 'Apparel', 599.0), ('o11', '2025-07-11 09:00:00', 'Electronics', 1299.0), ('o12', '2025-07-12 13:20:00', 'Home Goods', 159.0), ('o13', '2025-07-13 17:15:00', 'Apparel', 499.0), ('o14', '2025-07-14 21:30:00', 'Electronics', 999.0), ('o15', '2025-07-15 06:10:00', 'Home Goods', 299.0); -
Analitik sorgusu çalıştırın. Aşağıdaki sorgu, 15 günlük dönem için kategori bazında satış performansını döndürür; toplam geliri 1.000'in üzerinde olan kategoriler için sipariş sayısı, toplam GMV (Brüt Satış Değeri), ortalama sipariş tutarı ve en son sipariş zamanı bilgilerini verir. Sonuçlar GMV'ye göre azalan, kategoriye göre artan sıralanır.
SELECT order_category, COUNT(order_id) AS order_count, SUM(order_revenue) AS gmv, AVG(order_revenue) AS avg_order_amount, MAX(order_date) AS latest_order_date FROM orders WHERE CAST(order_date AS TIMESTAMP) BETWEEN '2025-07-01' AND '2025-07-15' GROUP BY order_category HAVING SUM(order_revenue) > 1000 ORDER BY gmv DESC, order_category ASC;
Örnek 3: Hive Parquet tablosu oluşturma (DLF Format Table)
EMR Serverless Spark varsayılan olarak Apache Paimon'u tablo formatı olarak kullanır. Bunun yerine Hive Parquet tablosu oluşturmak için iş başlatma parametrelerindeki varsayılan ayarları geçersiz kılmanız gerekir.
Başlatma parametreleri
Hive Parquet tablosu oluşturmadan önce, Paimon kataloğunun tablo oluşturmayı engellemesini önlemek amacıyla aşağıdaki Spark yapılandırma parametrelerini ekleyin:
spark.sql.catalog.spark_catalog=org.apache.spark.sql.hive.HiveCatalog spark.sql.defaultFileFormat=parquetBu parametreleri EMR Serverless Spark konsolunun Configuration bölümüne veya CLI'daki
--confparametresiyle ekleyebilirsiniz.SQL yöntemi
Hive Parquet tablosu oluşturmak için
CREATE TABLE ... USING PARQUETsözdizimini kullanın.STORED AS PARQUETkullanmayın.CREATE TABLE my_parquet_table ( id INT, name STRING, created_at TIMESTAMP ) USING PARQUET;DataFrame API yöntemi
Verileri Hive Parquet tablosu olarak yazmak için
df.write.format("parquet").saveAsTable(...)kullanın.df.write.format("parquet").saveAsTable("my_parquet_table")NotÇalışma alanınız bir DLF Kataloğu ile ilişkilendirilmişse, meta veri kataloğuyla tutarlılığı sağlamak için tabloları Spark oturumları veya SQL deyimleriyle oluşturmanızı öneririz.
-
(İsteğe bağlı) Sürümleri karşılaştırmak için sağ taraftaki Version Information sekmesini tıklayın. Düzenleyici, sürümler arasındaki SQL kodu farklılıklarını vurgular.
-
İşi çalıştırın ve yayınlayın.
Run seçeneğini tıklayın. Sonuçlar Execution Results sekmesinde görünür. Bir hata oluşursa Execution Issues sekmesini kontrol edin. Sağ taraftaki çalıştırma geçmişi paneli son üç güne ait kayıtları gösterir.
İşin doğru çalıştığını onayladıktan sonra sağ üst köşede Publish seçeneğini tıklayın.
Publish iletişim kutusunda sürüm notlarını girin ve OK seçeneğini tıklayın.
Spark UI'a erişme
Spark UI, görev yürütme durumunu, kaynak kullanımını ve günlük bilgilerini gösterir; bu da Spark işlerinizi analiz etmek ve optimize etmek için kullanışlıdır.
Yürütme sonuçlarından erişim
Bu yöntem için aşağıdaki motor sürümleri veya daha yenisi gereklidir: esr-4.2.0 (esr-4.x), esr-3.2.0 (esr-3.x) veya esr-2.6.0 (esr-2.x).
SQL deyimi çalıştıktan sonra Execution Results sekmesinin alt kısmında Spark UI seçeneğini tıklayın.
Oturum örneğinden erişim
SQL deyimi çalıştıktan sonra oturum örneğini bulun ve
\> Spark UI seçeneğini belirleyin.
Klavye kısayolları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sonraki adımlar
Bir iş akışı oluşturarak işin periyodik olarak çalışmasını zamanlayın. Bkz. İş akışı oluşturma. Tam bir zamanlama örneği için bkz. Spark SQL geliştirmeye hızlı başlangıç.
SSS
Sorgu sonuçları için 10.000 satırlık indirme limiti aşılabiliyor mu?
Hayır. EMR Serverless Spark veri geliştirmede sorgu sonucu indirme işlemi sabit bir platform limitiyle sınırlandırılmıştır. En fazla 10.000 satır indirilebilir ve toplam dosya boyutu 10 MB'yi aşamaz. Bu limit yapılandırma yoluyla değiştirilemez.
Daha büyük veri kümelerini dışa aktarmak için aşağıdaki yöntemlerden birini kullanın:
spark-submit kullanarak bir iş gönderin ve sonuçları Object Storage Service (OSS) veya Hadoop Distributed File System (HDFS) üzerine yazın.
Verileri dışa aktarmak için DataWorks'te çevrimdışı bir senkronizasyon görevi kullanın.
EMR Serverless Spark, Spark History için genel API'ler sunuyor mu?
Evet. EMR Serverless Spark genel API'ler sağlar. Kullanılabilir tüm API işlemlerinin tam listesi için bkz. API'ye genel bakış.