Mode lokal memungkinkan Anda melakukan debug pekerjaan MapReduce di mesin lokal sebelum mengirimkannya ke kluster terdistribusi. Alih-alih melakukan redeploy ke kluster setiap kali terjadi perubahan kode, jalankan pekerjaan secara lokal dengan flag -local dan periksa hasilnya secara langsung.
Cara kerja
Tambahkan flag -local ke perintah jar untuk menjalankan pekerjaan secara lokal. Klien MaxCompute:
Mengunduh metadata dan data dari tabel input, metadata tabel output, serta resource yang diperlukan dari MaxCompute ke direktori lokal bernama
warehouse.Menjalankan beberapa tugas map dan reduce secara berurutan (tidak paralel).
Menulis hasil ke file dalam direktori
warehouse.
Pada eksekusi berikutnya, jika tabel input dan resource sudah ada di warehouse, klien akan membacanya langsung—tanpa perlu mengunduh ulang.
Data hanya dapat diunduh dari MaxCompute untuk pekerjaan MapReduce yang dijalankan dalam mode lokal.
Mode lokal vs. mode terdistribusi
| Dimensi | Mode lokal | Mode terdistribusi |
|---|---|---|
| Baris input | Maksimum 100 baris | Tidak terbatas |
| Ukuran sumber daya | Tidak terbatas | Terbatas (lihat Batas MapReduce) |
| Keamanan | Tidak ada batasan | Sandbox Java berlaku untuk MapReduce dan user-defined function (UDF) |
Jalankan pekerjaan dalam mode lokal
Contoh berikut menjalankan program WordCount terhadap tabel wc_in dan menulis output ke wc_out.
Langkah 1: Jalankan perintah jar
odps:my_project> jar -l com.aliyun.odps.mapred.example.WordCount wc_in wc_outUntuk kode contoh WordCount lengkap, lihat WordCount.
Langkah 2: Periksa output
Eksekusi yang berhasil mencetak ringkasan beserta counter:
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
OKLangkah 3: Verifikasi hasil di direktori warehouse
Eksekusi pertama membuat direktori warehouse di path saat ini dengan struktur berikut:
<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 (resource tabel)
| |____<__ref__>
|
|___ file_resource_name (resource file)Direktori pada level yang sama dengan
my_projectmerepresentasikan proyek.Direktori pada level yang sama dengan
wc_indanwc_outmerepresentasikan tabel data. Data tabel yang dibaca atau ditulis oleh perintahjardisimpan pada level ini.
Verifikasi data input wc_in
File <__schema__> menyimpan metadata tabel. Untuk wc_in:
my_project.wc_in,key:STRING,value:STRINGFile data berisi baris-baris yang diunduh:
0,2Klien mengunduh metadata dan sebagian data tabel dari MaxCompute lalu menyimpannya ke file-file tersebut. Eksekusi berikutnya membaca langsung dari wc_in—tidak perlu unduh ulang.
Verifikasi data output wc_out
Skema untuk wc_out:
my_project.wc_out,key:STRING,cnt:BIGINTSetelah pekerjaan selesai, file data berisi hasil sebagai berikut:
0,1
2,1Format file skema
File <__schema__> mendefinisikan struktur tabel:
project=local_project_name
table=local_table_name
columns=col1_name:col1_type,col2_name:col2_type
partitions=p1:STRING,p2:BIGINT -- opsionalAturan format:
Pisahkan nama kolom dan tipenya dengan tanda titik dua (
:).Pisahkan kolom-kolom dengan koma (
,).Deklarasikan
project_name.table_namedi awal file, dipisahkan dari definisi kolom dengan koma. Contoh:project_name.table_name,col1_name:col1_type,col2_name:col2_type
Catatan penggunaan
Edit file
<__schema__>dandatasecara langsung untuk menyediakan data uji kustom tanpa perlu mengunduh dari MaxCompute.Jika klien mendeteksi bahwa direktori tabel sudah ada di
warehouse, pengunduhan untuk tabel tersebut akan dilewati. Artinya, direktori tabel lokal dapat mereferensikan tabel yang tidak ada di MaxCompute.
Langkah selanjutnya
WordCount — kode contoh lengkap untuk contoh WordCount yang digunakan dalam topik ini
Batas MapReduce — batas ukuran resource dan batasan lain yang berlaku dalam mode terdistribusi