All Products
Search
Document Center

E-MapReduce:Kirim pekerjaan Spark menggunakan spark-submit

Last Updated:Jun 22, 2026

Topik ini menjelaskan cara mengirim pekerjaan Spark dengan alat baris perintah spark-submit EMR Serverless Spark. Contoh ini menggunakan instance ECS untuk terhubung ke EMR Serverless Spark.

Prasyarat

  • Java Development Kit (JDK) 1.8 atau versi yang lebih baru telah diinstal.

  • Jika Anda menggunakan RAM user untuk mengirim pekerjaan Spark, Anda harus menambahkan RAM user tersebut ke ruang kerja EMR Serverless Spark dan memberikan role developer atau lebih tinggi. Untuk informasi selengkapnya, lihat Manage users and roles.

Prosedur

Langkah 1: Unduh dan instal tool spark-submit EMR Serverless

  1. Klik emr-serverless-spark-tool-1.16.0-bin.zip untuk mengunduh paket instalasi.

  2. Unggah paket instalasi ke instance ECS Anda. Untuk informasi selengkapnya, lihat Upload or download files.

  3. Jalankan perintah berikut untuk mengekstrak alat spark-submit EMR Serverless.

    unzip emr-serverless-spark-tool-1.16.0-bin.zip

Langkah 2: Konfigurasikan parameter

Penting

Pada lingkungan tempat Spark diinstal, jika variabel lingkungan SPARK_CONF_DIR telah ditetapkan, Anda harus meletakkan file konfigurasi di direktori yang ditentukan oleh SPARK_CONF_DIR. Misalnya, pada kluster EMR, direktori ini biasanya /etc/taihao-apps/spark-conf. Jika tidak, sistem akan melaporkan error.

  1. Jalankan perintah berikut untuk mengubah konfigurasi dalam file connection.properties.

    vim emr-serverless-spark-tool-1.16.0/conf/connection.properties
  2. Kami merekomendasikan agar Anda mengonfigurasi file seperti pada contoh berikut, dengan parameter dalam format key=value.

    accessKeyId=<ALIBABA_CLOUD_ACCESS_KEY_ID>
    accessKeySecret=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>
    regionId=cn-hangzhou
    endpoint=emr-serverless-spark.cn-hangzhou.aliyuncs.com
    workspaceId=w-xxxxxxxxxxxx
    Penting

    RAM user atau role untuk AccessKey ini harus memiliki otorisasi di RAM dan ditambahkan ke ruang kerja EMR Serverless Spark.

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Wajib

    Deskripsi

    accessKeyId

    Ya

    ID AccessKey dan AccessKey Secret dari akun Alibaba Cloud atau RAM user yang menjalankan pekerjaan Spark.

    Penting

    Saat Anda mengonfigurasi parameter accessKeyId dan accessKeySecret, pastikan user yang terkait dengan AccessKey tersebut memiliki izin baca dan tulis untuk Bucket OSS yang terikat ke ruang kerja. Anda dapat melihat Bucket OSS yang terikat ke ruang kerja di halaman Spark dengan mengklik Details pada kolom Actions ruang kerja tersebut.

    accessKeySecret

    Ya

    regionId

    Ya

    ID wilayah. Contoh ini menggunakan wilayah China (Hangzhou).

    endpoint

    Ya

    Titik akhir EMR Serverless Spark. Untuk informasi selengkapnya, lihat Endpoints.

    Contoh ini menggunakan titik akhir publik untuk wilayah China (Hangzhou). Nilai parameternya adalah emr-serverless-spark.cn-hangzhou.aliyuncs.com.

    Catatan

    Jika instance ECS Anda tidak memiliki akses internet, Anda harus menggunakan titik akhir VPC.

    workspaceId

    Ya

    ID ruang kerja EMR Serverless Spark.

Langkah 3: Kirim pekerjaan Spark

  1. Jalankan perintah berikut untuk masuk ke direktori alat spark-submit EMR Serverless.

    cd emr-serverless-spark-tool-1.16.0
  2. Pilih metode pengiriman berdasarkan jenis pekerjaan Anda.

    Saat mengirim pekerjaan, Anda harus menentukan file sumber daya yang dibutuhkan pekerjaan tersebut, seperti paket JAR atau skrip Python. Anda dapat menyimpan sumber daya ini di OSS atau secara lokal. Topik ini menggunakan sumber daya OSS pada semua contoh.

    spark-submit

    spark-submit adalah alat pengiriman tugas umum yang disediakan oleh Spark untuk tugas Java/Scala dan PySpark.

    Pekerjaan Java/Scala

    Contoh ini menggunakan spark-examples_2.12-3.5.2.jar. Anda dapat mengklik spark-examples_2.12-3.5.2.jar untuk mengunduh paket JAR uji coba, lalu mengunggahnya ke OSS. Paket JAR ini merupakan contoh sederhana bawaan Spark yang menghitung nilai pi (π).

    Catatan

    File spark-examples_2.12-3.5.2.jar harus digunakan dengan versi engine esr-4.x untuk mengirim pekerjaan. Jika Anda menggunakan versi engine esr-5.x, unduh spark-examples_2.13-4.0.1.jar untuk contoh ini.

    ./bin/spark-submit  --name SparkPi \
    --queue dev_queue  \
    --num-executors 5 \
    --driver-memory 1g \
    --executor-cores 2 \
    --executor-memory 2g \
    --class org.apache.spark.examples.SparkPi \
     oss://<yourBucket>/path/to/spark-examples_2.12-3.5.2.jar \
    10000

    Pekerjaan PySpark

    Contoh ini menggunakan DataFrame.py dan employee.csv. Anda dapat mengklik DataFrame.py dan employee.csv untuk mengunduh file uji coba, lalu mengunggahnya ke OSS.

    Catatan
    • DataFrame.py adalah potongan kode yang menggunakan framework Apache Spark untuk memproses data di OSS.

    • employee.csv adalah file data yang berisi nama karyawan, departemen, dan gaji.

    ./bin/spark-submit --name PySpark \
    --queue dev_queue  \
    --num-executors 5 \
    --driver-memory 1g \
    --executor-cores 2 \
    --executor-memory 2g \
    --conf spark.tags.key=value \
    oss://<yourBucket>/path/to/DataFrame.py \
    oss://<yourBucket>/path/to/employee.csv

    Parameter-parameter tersebut dijelaskan di bawah ini.

    • Parameter open source yang didukung

      Parameter

      Contoh

      Deskripsi

      --name

      SparkPi

      Nama aplikasi untuk pekerjaan Spark.

      --class

      org.apache.spark.examples.SparkPi

      Kelas entri untuk pekerjaan Spark. Parameter ini wajib untuk aplikasi Java atau Scala, tetapi tidak diperlukan untuk aplikasi Python.

      --num-executors

      5

      Jumlah executor untuk pekerjaan Spark.

      --driver-cores

      1

      Jumlah core driver untuk pekerjaan Spark.

      --driver-memory

      1g

      Jumlah memori driver untuk pekerjaan Spark.

      --executor-cores

      2

      Jumlah core executor untuk pekerjaan Spark.

      --executor-memory

      2g

      Jumlah memori executor untuk pekerjaan Spark.

      --files

      oss://<yourBucket>/file1,oss://<yourBucket>/file2

      File resource yang dibutuhkan oleh pekerjaan Spark. File dapat disimpan di OSS atau secara lokal. Pisahkan beberapa file dengan koma (,).

      --py-files

      oss://<yourBucket>/file1.py,oss://<yourBucket>/file2.py

      Skrip Python yang dibutuhkan oleh pekerjaan Spark. Skrip dapat disimpan di OSS atau secara lokal. Pisahkan beberapa file dengan koma (,). Parameter ini hanya untuk aplikasi PySpark.

      --jars

      oss://<yourBucket>/file1.jar,oss://<yourBucket>/file2.jar

      Paket JAR yang dibutuhkan oleh pekerjaan Spark. Resource dapat disimpan di OSS atau secara lokal. Pisahkan beberapa file dengan koma (,).

      --archives

      oss://<yourBucket>/archive.tar.gz#env,oss://<yourBucket>/archive2.zip

      File arsip yang dibutuhkan oleh pekerjaan Spark. Resource dapat disimpan di OSS atau secara lokal. Pisahkan beberapa file dengan koma (,).

      --queue

      root_queue

      Nama antrian tempat pekerjaan Spark dijalankan. Nama ini harus sesuai dengan nama antrian di bagian manajemen antrian ruang kerja EMR Serverless Spark Anda.

      --proxy-user

      test

      Nilai yang ditetapkan akan menggantikan variabel lingkungan HADOOP_USER_NAME, dan perilakunya konsisten dengan versi open-source.

      --conf

      spark.tags.key=value

      Parameter kustom untuk pekerjaan Spark.

      --status

      jr-8598aa9f459d****

      Memeriksa status pekerjaan Spark.

      --kill

      jr-8598aa9f459d****

      Menghentikan pekerjaan Spark.

    • Parameter tambahan

      Parameter

      Contoh

      Deskripsi

      --detach

      Tidak memerlukan nilai

      Menyebabkan spark-submit langsung keluar setelah mengirim pekerjaan, tanpa menunggu status pekerjaan.

      --detail

      jr-8598aa9f459d****

      Menampilkan detail pekerjaan Spark.

      --release-version

      esr-4.1.1 (Spark 3.5.2, Scala 2.12)

      Menentukan versi Spark. Masukkan nomor versi engine yang ditampilkan di Konsol.

      --enable-template

      Tidak memerlukan nilai

      Mengaktifkan fitur templat. Pekerjaan kemudian akan menggunakan templat konfigurasi default ruang kerja.

      Jika Anda membuat Configurations di Configuration management, Anda dapat menentukan ID-nya dengan menambahkan spark.emr.serverless.templateId ke parameter --conf. Pekerjaan kemudian langsung menerapkan templat yang ditentukan. Untuk informasi selengkapnya tentang pembuatan templat, lihat Configuration management.

      • Jika Anda hanya menentukan --enable-template, tugas secara otomatis menerapkan templat konfigurasi default ruang kerja.

      • Gunakan hanya --conf untuk menentukan ID templat: Tugas langsung menerapkan ID templat yang ditentukan.

      • Menentukan keduanya --enable-template dan --conf: Jika Anda menentukan keduanya --enable-template dan --conf spark.emr.serverless.templateId, ID templat dalam --conf akan menggantikan templat default.

      • Tidak ada parameter yang ditentukan: Jika Anda tidak menggunakan --enable-template atau menentukan --conf spark.emr.serverless.templateId, pekerjaan tidak akan menerapkan konfigurasi templat apa pun.

      --timeout

      60

      Periode timeout untuk pekerjaan, dalam detik.

      --workspace-id

      w-4b4d7925a797****

      Menentukan ID ruang kerja pada level pekerjaan. Ini menggantikan parameter workspaceId dalam file connection.properties.

    • Parameter open source yang tidak didukung

      • --deploy-mode

      • --master

      • --repositories

      • --keytab

      • --principal

      • --total-executor-cores

      • --driver-library-path

      • --driver-class-path

      • --supervise

      • --verbose

    spark-sql

    spark-sql adalah alat khusus untuk menjalankan query atau skrip SQL secara langsung.

    • Contoh 1: Jalankan pernyataan SQL secara langsung

      spark-sql -e "SHOW TABLES"

      Perintah ini menampilkan semua tabel di database saat ini.

    • Contoh 2: Jalankan file skrip SQL

      spark-sql -f oss://<yourBucketname>/path/to/your/example.sql

      Contoh ini menggunakan example.sql. Anda dapat mengklik example.sql untuk mengunduh file uji coba lalu mengunggahnya ke OSS.

      Contoh isi file example.sql

      CREATE TABLE IF NOT EXISTS employees (
          id INT,
          name STRING,
          age INT,
          department STRING
      );
      INSERT INTO employees VALUES
      (1, 'Alice', 30, 'Engineering'),
      (2, 'Bob', 25, 'Marketing'),
      (3, 'Charlie', 35, 'Sales');
      SELECT * FROM employees;
      

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Contoh

    Deskripsi

    -e "<sql>"

    -e "SELECT * FROM table"

    Menjalankan pernyataan SQL inline dari command line.

    -f <path>

    -f oss://path/script.sql

    Menjalankan file skrip SQL dari path yang ditentukan.

Langkah 4: Kueri pekerjaan Spark

CLI

Kueri status pekerjaan

cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --status <jr-8598aa9f459d****>

Kueri detail pekerjaan

cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --detail <jr-8598aa9f459d****>

UI

  1. Di halaman EMR Serverless Spark, klik Job History di panel navigasi sebelah kiri.

  2. Di halaman Job History, pada tab Development Job Runs, Anda dapat melihat pekerjaan yang telah dikirim.

    Daftar pekerjaan mencakup kolom Job name/Job run ID, Status, Tags, Submission time, dan Actions. Di kolom Actions, Anda dapat mengklik Stop, Details, atau Spark UI.

(Opsional) Langkah 5: Hentikan pekerjaan Spark

cd emr-serverless-spark-tool-1.16.0
./bin/spark-submit --kill <jr-8598aa9f459d****>
Catatan

Anda hanya dapat menghentikan pekerjaan yang berada dalam status running.

FAQ

Bagaimana cara menentukan koneksi jaringan saat mengirim pekerjaan batch dengan alat spark-submit?

  1. Buat koneksi jaringan. Untuk informasi selengkapnya, lihat Add a network connection.

  2. Dalam perintah spark-submit, gunakan --conf untuk menentukan koneksi jaringan.

    --conf spark.emr.serverless.network.service.name=<networkname>

    Ganti <networkname> dengan nama koneksi jaringan Anda.