Topik ini menjelaskan cara menggunakan Eclipse untuk mengembangkan program MaxCompute Graph karena Plugin pengembangan Graph tidak tersedia di MaxCompute.
- Kompilasi kode Graph dan lakukan debugging lokal untuk menguji fungsi dasar.
- Lakukan debugging kluster untuk memverifikasi hasilnya.
Contoh Pengembangan
Topik ini menggunakan algoritma SSSP sebagai contoh untuk menjelaskan cara menggunakan Eclipse dalam mengembangkan dan men-debug program MaxCompute Graph.
- Buat proyek Java bernama graph_examples.
- Tambahkan paket JAR dari direktori lib pada klien MaxCompute ke Java Build Path proyek Eclipse.

- Kembangkan program MaxCompute Graph.
Dalam proses pengembangan sebenarnya, program contoh seperti SSSP pertama-tama disalin lalu dimodifikasi. Dalam contoh ini, jalur paket diubah menjadi package com.aliyun.odps.graph.example.
- Kompilasi dan kemas kode.
Di lingkungan Eclipse, klik kanan direktori kode sumber, yaitu direktori src, dan pilih untuk menghasilkan paket JAR. Pilih jalur penyimpanan paket JAR, misalnya D:\\odps\\clt\\odps-graph-example-sssp.jar.
- Jalankan SSSP pada klien MaxCompute. Untuk informasi lebih lanjut, lihat (Opsional) Kirim Pekerjaan Graph.
Debugging Lokal
MaxCompute Graph mendukung mode debugging lokal. Anda dapat menggunakan Eclipse untuk melakukan debugging dengan breakpoint.
- Unduh paket Maven bernama odps-graph-local.
- Pilih proyek Eclipse, klik kanan file program utama yang berisi fungsi
maindari pekerjaan Graph, dan pilih untuk mengonfigurasi parameter. - Pada tab Arguments, atur Program arguments ke 1 sssp_in sssp_out sebagai parameter input untuk program utama.
- Pada tab Arguments, atur VM arguments menjadi konten berikut:
-Dodps.runner.mode=local -Dodps.project.name=<project.name> -Dodps.end.point=<end.point> -Dodps.access.id=<access.id> -Dodps.access.key=<access.key>
- Dalam mode lokal di mana odps.end.point tidak ditentukan, buat tabel sssp_in dan sssp_out di direktori warehouse dan tambahkan data berikut ke tabel sssp_in:
1,"2:2,3:1,4:4" 2,"1:2,3:2,4:1" 3,"1:1,2:2,5:1" 4,"1:4,2:1,5:1" 5,"3:1,4:1"Untuk informasi lebih lanjut tentang direktori warehouse, lihat Pekerjaan Berjalan dalam Mode Lokal.
- Klik Run untuk menjalankan SSSP pada klien lokal. null Konfigurasikan parameter berdasarkan pengaturan di conf/odps_config.ini pada klien MaxCompute. Parameter di atas sering digunakan. Deskripsi parameter lainnya:
- odps.runner.mode: Nilainya adalah local. Parameter ini diperlukan untuk fitur debugging lokal.
- odps.project.name: Menentukan proyek saat ini. Parameter ini diperlukan.
- odps.end.point: Menentukan titik akhir MaxCompute. Parameter ini opsional. Jika parameter ini tidak ditentukan, metadata dan data tabel atau sumber daya hanya dibaca dari direktori warehouse. Pengecualian dilaporkan jika data tersebut tidak ada di direktori. Jika parameter ini ditentukan, metadata dan data dibaca dari direktori warehouse terlebih dahulu dan kemudian dari server MaxCompute jarak jauh jika data tersebut tidak ada di direktori.
- odps.access.id: Menentukan ID AccessKey yang digunakan untuk mengakses MaxCompute. Parameter ini valid hanya jika odps.end.point ditentukan.
- odps.access.key: Menentukan Rahasia AccessKey yang digunakan untuk mengakses MaxCompute. Parameter ini valid hanya jika odps.end.point ditentukan.
- odps.cache.resources: Menentukan sumber daya yang ingin Anda gunakan. Parameter ini berfungsi sama dengan
-resourcesdari perintah jar. - odps.local.warehouse: Menentukan jalur lokal ke warehouse. Nilai defaultnya adalah ./warehouse.
Output debugging lokal SSSP di Eclipse:Counters: 3 com.aliyun.odps.graph.local.COUNTER TASK_INPUT_BYTE=211 TASK_INPUT_RECORD=5 TASK_OUTPUT_BYTE=161 TASK_OUTPUT_RECORD=5 graph task finishnull Dalam contoh ini, tabel sssp_in dan sssp_out harus ada di direktori warehouse lokal. Untuk informasi lebih lanjut tentang tabel sssp_in dan sssp_out, lihat Tulis Pekerjaan Graph.
Direktori Sementara Pekerjaan Lokal

- counters: Menyimpan informasi counter yang dihasilkan selama pekerjaan berjalan.
- inputs: Menyimpan data input pekerjaan. Data dibaca dari direktori warehouse lokal terlebih dahulu. Jika tidak ada data yang tersedia, SDK MaxCompute membaca data dari server jika odps.end.point ditentukan. Direktori input hanya membaca 10 rekaman data secara default. Ambang batas ini dapat diubah dengan menggunakan parameter
-Dodps.mapred.local.record.limit, dengan nilai maksimum 10000. - outputs: Menyimpan data output pekerjaan. Jika tabel output ada di direktori warehouse lokal, hasil di outputs akan menimpa data di tabel itu setelah pekerjaan selesai.
- resources: Menyimpan sumber daya yang digunakan oleh pekerjaan. Mirip dengan data input, data sumber daya dibaca dari direktori warehouse lokal terlebih dahulu. Jika tidak ada data yang tersedia, SDK MaxCompute membaca data dari server jika odps.end.point ditentukan.
- job.xml: Menyimpan konfigurasi pekerjaan.
- superstep: Menyimpan pesan persisten dari setiap iterasi.
Debugging Kluster
Setelah debugging lokal, Anda dapat mengirimkan pekerjaan ke kluster untuk pengujian.
- Konfigurasikan klien MaxCompute.
- Jalankan perintah
add jar /path/work.jar -f;untuk memperbarui paket JAR. - Jalankan perintah jar untuk mengeksekusi pekerjaan dan periksa log operasional serta keluaran perintah.
Optimasi Kinerja
setSplitSize(long): Menentukan ukuran split tabel input. Satuannya adalah MB. Nilainya harus lebih besar dari 0. Nilai defaultnya adalah 64.setNumWorkers(int): Menentukan jumlah pekerja untuk pekerjaan. Nilainya berkisar dari 1 hingga 1000. Nilai defaultnya adalah 1. Jumlah pekerja ditentukan oleh byte input pekerjaan dansplitSize.setWorkerCPU(int): Menentukan sumber daya CPU dari Map. Nilainya berkisar dari 50 hingga 800. Nilai defaultnya adalah 200. Satu inti CPU berisi 100 sumber daya.setWorkerMemory(int): Menentukan sumber daya memori dari Map. Satuannya adalah MB. Memori berkisar dari 256 hingga 12288. Nilai defaultnya adalah 4096.setMaxIteration(int): Menentukan jumlah maksimum iterasi. Nilai defaultnya adalah -1. Jika nilainya kurang dari atau sama dengan 0, pekerjaan tidak berhenti ketika jumlah maksimum iterasi tercapai.setJobPriority(int): Menentukan prioritas pekerjaan. Nilainya berkisar dari 0 hingga 9. Nilai defaultnya adalah 9. Semakin besar nilainya, semakin rendah prioritasnya.
- Gunakan
setNumWorkersuntuk meningkatkan jumlah pekerja. - Gunakan
setSplitSizeuntuk mengurangi ukuran split dan meningkatkan kecepatan pemuatan data. - Tingkatkan sumber daya CPU atau memori untuk pekerja.
- Tetapkan jumlah maksimum iterasi. Untuk aplikasi yang tidak memerlukan hasil yang tepat, Anda dapat mengurangi jumlah iterasi untuk mempercepat proses eksekusi.
setNumWorkers dan setSplitSize dapat digunakan bersama-sama untuk mempercepat pemuatan data. Anggaplah nilai setNumWorkers sama dengan nilai workerNum, nilai setSplitSize sama dengan nilai splitSize, dan total jumlah byte input adalah nilai inputSize. Jumlah rekaman data split dihitung dengan menggunakan rumus berikut: splitNum = inputSize/splitSize. Hubungan antara workerNum dan splitNum: - Jika nilai
splitNumsama dengan nilaiworkerNum, setiap pekerja memuat satu rekaman data split. - Jika nilai
splitNumlebih besar dari nilaiworkerNum, setiap pekerja memuat satu atau lebih rekaman data split. - Jika nilai
splitNumlebih kecil dari nilaiworkerNum, setiap pekerja mengunggah satu atau tanpa rekaman data split.
Oleh karena itu, Anda dapat menyesuaikan workerNum dan splitSize untuk mendapatkan kecepatan pemuatan data yang sesuai. Dalam dua kasus pertama, data dimuat lebih cepat. Dalam fase iterasi, Anda hanya perlu menyesuaikan workerNum. Jika Anda mengatur runtime partitioning ke False, kami merekomendasikan agar Anda menggunakan setSplitSize untuk menyesuaikan jumlah pekerja atau memastikan bahwa kondisi dalam dua kasus pertama terpenuhi. Dalam kasus ketiga, beberapa pekerja tidak memuat rekaman data split. Oleh karena itu, Anda dapat menyisipkan set odps.graph.split.size=<m>; set odps.graph.worker.num=<n>; sebelum perintah jar untuk mencapai efek yang sama dengan setNumWorkers dan setSplitSize.
- Gunakan combiner untuk mengumpulkan pesan dari rekaman data split yang sesuai dengan kunci untuk mengurangi jumlah pesan yang dihasilkan.
Pengembang dapat mendefinisikan combiner untuk mengurangi memori dan lalu lintas jaringan yang dikonsumsi oleh penyimpanan pesan, yang mengurangi durasi eksekusi pekerjaan.
- Tingkatkan logika bisnis. Jika volume data besar, membaca data di disk mungkin memakan waktu pemrosesan. Oleh karena itu, Anda dapat mengurangi byte data yang dibaca untuk meningkatkan throughput keseluruhan. Ini meningkatkan kinerja pekerjaan. Untuk mengurangi byte data, gunakan salah satu metode berikut:
- Kurangi input data: Untuk beberapa aplikasi pengambilan keputusan, memproses data sampel hanya memengaruhi presisi hasil, bukan akurasi keseluruhan. Dalam hal ini, Anda dapat melakukan sampling data khusus dan mengimpor data ke tabel input untuk diproses.
- Hindari membaca bidang yang tidak digunakan: Kelas TableInfo dari kerangka kerja MaxCompute Graph mendukung membaca kolom tertentu yang ditransfer dengan menggunakan array nama kolom, bukan membaca seluruh tabel atau partisi. Ini mengurangi volume data input dan meningkatkan kinerja pekerjaan.
Paket JAR Bawaan
-libjars untuk menentukannya dalam perintah: - commons-codec-1.3.jar
- commons-io-2.0.1.jar
- commons-lang-2.5.jar
- commons-logging-1.0.4.jar
- commons-logging-api-1.0.4.jar
- guava-14.0.jar
- json.jar
- log4j-1.2.15.jar
- slf4j-api-1.4.3.jar
- slf4j-log4j12-1.4.3.jar
- xmlenc-0.52.jar