全部产品
Search
文档中心

MaxCompute:Pekerjaan berjalan dalam mode lokal

更新时间:Jul 02, 2025

Topik ini menjelaskan perbedaan antara mode lokal dan mode terdistribusi tempat pekerjaan MapReduce dijalankan, serta memberikan contoh pekerjaan MapReduce dalam mode lokal.

Pengenalan mode lokal

Before you run a job in local mode, Anda dapat menentukan opsi -local dalam perintah JAR untuk mensimulasikan pelaksanaan pekerjaan. Dengan cara ini, Anda dapat melakukan debugging lokal pada pekerjaan tersebut.

During job running, klien mengunduh metadata dan data dari tabel input, metadata dari tabel output, serta sumber daya yang diperlukan untuk debugging lokal dari MaxCompute. Data yang diunduh disimpan ke direktori lokal bernama warehouse.

After the job is completed, hasil komputasi disimpan ke file dalam direktori warehouse. Jika tabel input dan sumber daya yang diperlukan telah diunduh ke direktori warehouse, MapReduce secara langsung merujuk data dan file dalam direktori tersebut lain kali, bukan mengunduh data lagi.

Perbedaan antara mode lokal dan mode terdistribusi

Pekerjaan MapReduce yang berjalan dalam mode lokal memulai beberapa tugas map dan reduce untuk memproses data. Tugas-tugas ini berjalan secara berurutan.

Proses simulasi berbeda dari proses distribusi nyata dalam aspek-aspek berikut:
  • Baris dalam tabel input: Maksimal 100 baris data dapat diunduh dalam mode lokal.
  • Penggunaan Sumber Daya: Dalam mode terdistribusi, MaxCompute membatasi ukuran sumber daya yang dapat dirujuk. Untuk informasi lebih lanjut, lihat Batasan MapReduce. Namun, tidak ada batasan yang diberlakukan pada ukuran sumber daya dalam mode lokal.
  • Keamanan: MaxCompute MapReduce dan fungsi yang ditentukan pengguna (UDF) dibatasi oleh Java sandbox dalam mode terdistribusi. Namun, tidak ada batasan yang diberlakukan dalam mode lokal.

Contoh

Kode berikut menunjukkan contoh pekerjaan MapReduce dalam mode lokal:
    odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_out
    Summary:
    counters: 10
        map-reduce framework
                combine_input_groups=2
                combine_output_records=2
                map_input_bytes=4
                map_input_records=1
                map_output_records=2
                map_output_[wc_out]_bytes=0
                map_output_[wc_out]_records=0
                reduce_input_groups=2
                reduce_output_[wc_out]_bytes=8
                reduce_output_[wc_out]_records=2
    OK

Untuk informasi lebih lanjut tentang kode sampel WordCount, lihat WordCount.

Jika ini adalah pertama kalinya Anda menjalankan perintah debugging lokal, direktori bernama warehouse dibuat di jalur saat ini setelah perintah dieksekusi. Kode berikut menunjukkan struktur direktori warehouse.
<warehouse>
   |____my_project (direktori proyek)
          |____ <__tables__>
          |       |__wc_in (direktori data tabel)
          |       |      |____ data (file)
          |       |      |
          |       |      |____ <__schema__> (file)
          |       |__wc_out (direktori data tabel)
          |               |____ data (file)
          |               |
          |               |____ <__schema__> (file)
          |
          |____ <__resources__>
                  |
                  |___table_resource_name (sumber daya tabel)
                  |         |____<__ref__>
                  |
                  |___ file_resource_name (sumber daya file)
  • Direktori di tingkat yang sama dengan my_project menunjukkan proyek. Direktori di tingkat yang sama dengan wc_in dan wc_out menunjukkan tabel data. Data tabel yang Anda baca atau tulis menggunakan perintah JAR diunduh ke direktori di tingkat ini.
  • File <__schema__> menyimpan metadata tabel. Kode berikut mendefinisikan format file:
      project=nama_proyek_lokal
      table=nama_tabel_lokal
      columns=nama_kolom1:tipe_kolom1,nama_kolom2:tipe_kolom2
      partitions=p1:STRING,p2:BIGINT    -- Dalam contoh ini, Anda tidak perlu menentukan bidang ini.

    Pisahkan nama dan tipe data kolom dengan titik dua (:). Pisahkan kolom dengan koma (,). Nama proyek dan tabel, project_name.table_name, harus dideklarasikan di awal file <__schema__>. Pisahkan deklarasi dan definisi kolom dengan koma (,). Contoh: project_name.table_name,nama_kolom1:tipe_kolom1,nama_kolom2:tipe_kolom2,……

  • File data dalam direktori tables menyimpan data tabel. Jumlah kolom dan data kolom harus sesuai dengan definisi dalam file _schema_. Pisahkan kolom dengan koma (,).
    File _schema_ dalam direktori wc_in berisi data berikut:
    my_project.wc_in,key:STRING,value:STRING
    File data berisi data berikut:
    0,2
    Klien mengunduh metadata dan sebagian data tabel dari MaxCompute, lalu menyimpan data ke file-file di atas. Lain kali Anda menjalankan program contoh ini, klien langsung menggunakan data dalam direktori wc_in, bukan mengunduhnya lagi.
    Catatan Data hanya dapat diunduh dari MaxCompute untuk pekerjaan MapReduce yang berjalan dalam mode lokal.
    File _schema_ dalam direktori wc_out berisi data berikut:
    my_project.wc_out,key:STRING,cnt:BIGINT
    File data berisi data berikut:
      0,1
      2,1
    Klien mengunduh metadata tabel wc_out dari MaxCompute, lalu menyimpan data ke file _schema_. Setelah pekerjaan selesai, hasilnya disimpan ke file data.
    Catatan
    • Anda juga dapat mengedit file _schema_ dan data, lalu menyimpan file tersebut dalam direktori tabel.
    • Jika Anda menjalankan pekerjaan dalam mode lokal dan klien mendeteksi bahwa direktori tabel ada, klien tidak akan mengunduh informasi tabel ini dari MaxCompute. Direktori tabel lokal dapat mencakup tabel yang tidak ada di MaxCompute.