全部产品
Search
文档中心

E-MapReduce:Kirim pekerjaan menggunakan spark-submit

更新时间:Nov 22, 2025

Topik ini menjelaskan cara mengembangkan pekerjaan Spark menggunakan antarmuka baris perintah (CLI) spark-submit EMR Serverless. Contoh berikut menggunakan instance ECS yang terhubung ke EMR Serverless Spark.

Prasyarat

  • Java 1.8 atau versi yang lebih baru telah diinstal.

  • Jika Anda menggunakan Pengguna RAM untuk mengirim pekerjaan Spark, tambahkan Pengguna RAM tersebut ke ruang kerja Serverless Spark dan berikan peran Developer atau peran dengan tingkat otorisasi yang lebih tinggi. Untuk informasi selengkapnya, lihat Mengelola pengguna dan peran.

Prosedur

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

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

  2. Unggah paket instalasi ke instance ECS. Untuk informasi selengkapnya, lihat Mengunggah atau mengunduh file.

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

    unzip emr-serverless-spark-tool-0.11.3-SNAPSHOT-bin.zip

Langkah 2: Konfigurasikan parameter

Penting

Jika variabel lingkungan SPARK_CONF_DIR telah ditetapkan di lingkungan Spark Anda, tempatkan file konfigurasi di direktori yang ditentukan oleh SPARK_CONF_DIR. Jika tidak, akan terjadi kesalahan. Sebagai contoh, dalam kluster EMR, direktori ini biasanya /etc/taihao-apps/spark-conf.

  1. Jalankan perintah berikut untuk memodifikasi konfigurasi dalam connection.properties.

    vim emr-serverless-spark-tool-0.11.3-SNAPSHOT/conf/connection.properties
  2. Konfigurasikan parameter dalam file tersebut. Format parameternya adalah key=value. Kode berikut menunjukkan contohnya.

    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

    Pengguna RAM atau peran yang sesuai dengan AccessKey ini harus diberikan otorisasi RAM dan ditambahkan ke ruang kerja Serverless Spark.

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Wajib

    Deskripsi

    accessKeyId

    Ya

    ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna RAM yang Anda gunakan untuk menjalankan pekerjaan Spark.

    Penting

    Saat Anda mengonfigurasi parameter accessKeyId dan accessKeySecret, pastikan pengguna yang sesuai dengan AccessKey tersebut memiliki izin baca dan tulis pada bucket Object Storage Service (OSS) yang dilampirkan ke ruang kerja. Untuk melihat bucket OSS yang dilampirkan ke ruang kerja, buka halaman Spark dan klik Details di kolom Tindakan ruang kerja tersebut.

    accessKeySecret

    Ya

    regionId

    Ya

    ID wilayah. Topik ini menggunakan wilayah Tiongkok (Hangzhou) sebagai contoh.

    endpoint

    Ya

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

    Topik ini menggunakan titik akhir publik wilayah Tiongkok (Hangzhou) sebagai contoh. Parameter ini diatur ke emr-serverless-spark.cn-hangzhou.aliyuncs.com.

    Catatan

    Jika instance ECS tidak dapat mengakses jaringan publik, gunakan 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-0.11.3-SNAPSHOT
  2. Pilih metode pengiriman berdasarkan jenis pekerjaan.

    Saat mengirim pekerjaan, Anda harus menentukan sumber daya dependensi, seperti paket JAR atau skrip Python. File-file ini dapat disimpan di OSS atau pada disk lokal. Lokasi penyimpanan tergantung pada kasus penggunaan dan persyaratan Anda. Contoh dalam topik ini menggunakan sumber daya yang disimpan di OSS.

    Menggunakan spark-submit

    spark-submit adalah alat pengiriman pekerjaan umum yang disediakan oleh Spark. Alat ini cocok untuk pekerjaan Java, Scala, dan PySpark.

    Pekerjaan Java/Scala

    Contoh ini menggunakan spark-examples_2.12-3.3.1.jar, yaitu contoh sederhana yang disertakan dengan Spark untuk menghitung nilai Pi (π). Anda dapat mengklik spark-examples_2.12-3.3.1.jar untuk mengunduh paket JAR uji dan mengunggahnya ke OSS.

    ./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.3.1.jar \
    10000

    Pekerjaan PySpark

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

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

    • File employee.csv berisi daftar data, termasuk 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

    Bagian berikut menjelaskan parameter-parameter tersebut:

    • Parameter open-source yang kompatibel

      Parameter

      Nilai contoh

      Deskripsi

      --name

      SparkPi

      Nama aplikasi Spark. Parameter ini digunakan untuk mengidentifikasi pekerjaan.

      --class

      org.apache.spark.examples.SparkPi

      Nama kelas entri pekerjaan Spark untuk program Java atau Scala. Parameter ini tidak diperlukan untuk program Python.

      --num-executors

      5

      Jumlah pelaksana untuk pekerjaan Spark.

      --driver-cores

      1

      Jumlah core driver untuk pekerjaan Spark.

      --driver-memory

      1g

      Ukuran memori driver untuk pekerjaan Spark.

      --executor-cores

      2

      Jumlah core pelaksana untuk pekerjaan Spark.

      --executor-memory

      2g

      Ukuran memori pelaksana untuk pekerjaan Spark.

      --files

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

      File sumber daya yang dirujuk oleh pekerjaan Spark. File-file tersebut dapat berupa sumber daya OSS atau file lokal. Pisahkan beberapa file dengan koma (,).

      --py-files

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

      Skrip Python yang dirujuk oleh pekerjaan Spark. Skrip-skrip tersebut dapat berupa sumber daya OSS atau file lokal. Pisahkan beberapa file dengan koma (,). Parameter ini hanya berlaku untuk program PySpark.

      --jars

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

      Paket JAR yang dirujuk oleh pekerjaan Spark. Paket-paket tersebut dapat berupa sumber daya OSS atau file lokal. Pisahkan beberapa file dengan koma (,).

      --archives

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

      Paket arsip yang dirujuk oleh pekerjaan Spark. Paket-paket tersebut dapat berupa sumber daya OSS atau file lokal. Pisahkan beberapa file dengan koma (,).

      --queue

      root_queue

      Nama antrian tempat pekerjaan Spark dijalankan. Nama tersebut harus sama dengan nama antrian di bagian manajemen antrian ruang kerja EMR Serverless Spark.

      --proxy-user

      test

      Nilai parameter ini akan menimpa variabel lingkungan HADOOP_USER_NAME. Perilakunya sama seperti pada versi open-source.

      --conf

      spark.tags.key=value

      Parameter kustom untuk pekerjaan Spark.

      --status

      jr-8598aa9f459d****

      Menampilkan status pekerjaan Spark.

      --kill

      jr-8598aa9f459d****

      Menghentikan pekerjaan Spark.

    • Parameter yang ditingkatkan

      Parameter

      Nilai contoh

      Deskripsi

      --detach

      Tidak perlu nilai

      Jika Anda menggunakan parameter ini, spark-submit langsung keluar setelah mengirim pekerjaan dan tidak menunggu atau menanyakan status pekerjaan.

      --detail

      jr-8598aa9f459d****

      Menampilkan detail pekerjaan Spark.

      --release-version

      esr-4.1.1 (Spark 3.5.2, Scala 2.12)

      Versi Spark. Masukkan versi mesin database yang ditampilkan di Konsol.

      --enable-template

      Tidak perlu nilai

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

      Jika Anda membuat Configuration Template di Configuration Management, Anda dapat menentukan ID templat dengan mengatur parameter spark.emr.serverless.templateId dalam --conf. Pekerjaan kemudian langsung menerapkan templat yang ditentukan. Untuk informasi selengkapnya tentang cara membuat templat, lihat Manajemen konfigurasi.

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

      • Jika Anda hanya menentukan ID templat menggunakan --conf, pekerjaan langsung menerapkan templat yang ditentukan.

      • Jika Anda menentukan keduanya, yaitu --enable-template dan --conf, serta parameter --enable-template dan --conf spark.emr.serverless.templateId ditentukan, maka ID templat dalam --conf akan menimpa templat default.

      • Jika Anda tidak menentukan --enable-template atau --conf spark.emr.serverless.templateId, pekerjaan tidak menerapkan konfigurasi templat apa pun.

      --timeout

      60

      Periode waktu habis pekerjaan. Satuan: detik.

      --workspace-id

      w-4b4d7925a797****

      Menentukan ID ruang kerja pada tingkat pekerjaan. Ini dapat menimpa 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

    Menggunakan spark-sql

    spark-sql adalah alat yang digunakan untuk menjalankan kueri atau skrip SQL. Alat ini cocok untuk skenario di mana Anda menjalankan pernyataan SQL secara langsung.

    • Contoh 1: Jalankan pernyataan SQL secara langsung

      spark-sql -e "SHOW TABLES"

      Perintah ini mencantumkan semua tabel dalam 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 dan 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

    Nilai contoh

    Deskripsi

    -e "<sql>"

    -e "SELECT * FROM table"

    Menjalankan pernyataan SQL langsung dari baris perintah.

    -f <path>

    -f oss://path/script.sql

    Menjalankan file skrip SQL di path yang ditentukan.

Langkah 4: Kueri pekerjaan Spark

Menggunakan CLI

Kueri status pekerjaan Spark

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

Kueri detail pekerjaan Spark

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

Menggunakan UI

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

  2. Pada tab Development Jobs di halaman Job History, Anda dapat melihat pekerjaan yang telah dikirim.

    image

(Opsional) Langkah 5: Hentikan pekerjaan Spark

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

Anda hanya dapat menghentikan pekerjaan yang sedang Berjalan.

Pertanyaan Umum

Bagaimana cara menentukan konektivitas jaringan saat saya mengirim pekerjaan batch menggunakan alat spark-submit?

  1. Persiapkan koneksi jaringan. Untuk informasi selengkapnya, lihat Menambahkan koneksi jaringan.

  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.