全部产品
Search
文档中心

MaxCompute:Gunakan volume eksternal MaxCompute untuk memproses data tak terstruktur

更新时间:Jul 02, 2025

Dalam MaxCompute, volume eksternal berfungsi sebagai sistem file terdistribusi dan menyediakan solusi penyimpanan untuk data tak terstruktur. Volume ini dipetakan ke direktori Object Storage Service (OSS). Anda dapat membuat volume eksternal di MaxCompute dan memasangnya ke direktori OSS. Sistem manajemen izin MaxCompute digunakan untuk mengontrol akses pengguna secara mendetail. Mesin komputasi MaxCompute juga dapat digunakan untuk memproses data dari file dalam volume eksternal. Setiap proyek dapat memiliki beberapa volume eksternal. Topik ini menjelaskan cara menggunakan volume eksternal MaxCompute untuk memproses data tak terstruktur.

Prasyarat

  • Permohonan uji coba penggunaan volume eksternal telah diajukan dan disetujui. Untuk informasi lebih lanjut, lihat Ajukan uji coba fitur baru.

  • Klien MaxCompute versi V0.43.0 atau yang lebih baru telah diinstal. Untuk informasi lebih lanjut, lihat Klien MaxCompute (odpscmd).

    Jika menggunakan SDK untuk Java, versi SDK harus V0.43.0 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Pembaruan versi.

    • OSS telah diaktifkan dan bucket telah dibuat. Untuk informasi lebih lanjut, lihat Buat bucket.

    • Proyek MaxCompute Anda telah diberi otorisasi untuk mengakses OSS. Untuk informasi lebih lanjut tentang cara memberikan otorisasi kepada proyek MaxCompute untuk mengakses OSS, lihat Konfigurasikan metode akses OSS.

    Catatan

    Data dalam volume eksternal disimpan di OSS. Anda tidak dikenakan biaya untuk penyimpanan data dalam volume eksternal di MaxCompute. Namun, biaya komputasi akan dikenakan saat menggunakan mesin komputasi MaxCompute untuk membaca atau menghitung data dalam volume eksternal. Misalnya, biaya komputasi timbul saat menjalankan pekerjaan Spark on MaxCompute atau MapReduce. Hasil komputasi dari mesin MaxCompute, seperti data indeks yang dihasilkan oleh Proxima, disimpan dalam volume eksternal. Anda akan dikenakan biaya penyimpanan untuk data tersebut di OSS.

Pengenalan Cepat

  1. Berikan izin yang diperlukan.

    Catatan

    Anda hanya dapat menggunakan volume eksternal setelah akun Anda diberikan izin berikut: CreateInstance, CreateVolume, List, Read, dan Write. Untuk informasi lebih lanjut tentang izin, lihat Izin MaxCompute.

    1. Jalankan perintah berikut untuk memeriksa apakah akun pengguna memiliki izin CreateVolume:

      SHOW grants FOR <user_name>;
    2. Jika akun pengguna tidak memiliki izin CreateVolume, jalankan perintah berikut untuk memberikan izin CreateVolume kepada akun pengguna:

      GRANT CreateVolume ON project <project_name> TO USER <user_name>;

      Untuk mencabut izin CreateVolume dari akun pengguna, jalankan perintah berikut:

      REVOKE CreateVolume ON project <project_name> FROM USER <user_name>;
    3. Jalankan perintah SHOW GRANTS lagi untuk memeriksa apakah izin CreateVolume telah diberikan kepada akun pengguna.

  2. Buat volume eksternal menggunakan akun pengguna yang diberikan izin CreateVolume.

    Jalankan perintah berikut untuk membuat volume eksternal:

    vfs -create <volume_name>  
        -storage_provider <oss> 
        -url <oss://oss_endpoint/bucket/path>
        -acd <true|false>
        -role_arn <arn:aliyun:xxx/aliyunodpsdefaultrole> 

    Untuk informasi lebih lanjut tentang parameter dan operasi pada volume eksternal, lihat Operasi volume eksternal.

    Path volume eksternal yang dibuat berada dalam format odps://[project_name]/[volume_name]. project_name menentukan nama proyek MaxCompute. volume_name menentukan nama volume eksternal. Path ini dapat digunakan oleh pekerjaan seperti pekerjaan Spark dan MapReduce.

  3. Lihat volume eksternal yang dibuat.

    Jalankan perintah berikut untuk melihat volume eksternal yang dibuat:

    vfs -ls /;

Skenario

Gunakan Spark on MaxCompute untuk merujuk atau memproses data OSS berdasarkan volume eksternal

Spark on MaxCompute adalah layanan komputasi yang disediakan oleh MaxCompute dan kompatibel dengan Spark sumber terbuka. Spark on MaxCompute menyediakan kerangka kerja komputasi Spark berdasarkan integrasi sumber daya komputasi, dataset, dan sistem izin. Layanan ini memungkinkan Anda menggunakan metode pengembangan pilihan Anda untuk mengirimkan dan menjalankan pekerjaan Spark. Spark on MaxCompute dapat memenuhi berbagai kebutuhan pemrosesan dan analitik data. Saat menjalankan pekerjaan Spark, sumber daya terkait seperti file dan arsip perlu dimuat. Anda dapat langsung mengakses OSS dari Spark on MaxCompute untuk memuat sumber daya terkait. Untuk informasi lebih lanjut, lihat Akses OSS dari Spark on MaxCompute. Jika Anda perlu melakukan kontrol izin mendetail pada sumber daya dan data, Anda dapat menggunakan volume eksternal untuk melakukan kontrol akses sumber daya berdasarkan sistem izin MaxCompute.

Rujuk sumber daya dalam volume eksternal

Jika menggunakan Spark on MaxCompute, Anda dapat langsung merujuk sumber daya dalam volume eksternal saat pekerjaan dimulai. Sumber daya dalam volume eksternal yang dikonfigurasi menggunakan parameter-parameter otomatis diunduh ke direktori kerja pekerjaan saat pekerjaan dimulai. Jenis sumber daya berikut didukung:

  • File: file dalam format apa pun, seperti .jar atau .py.

  • File arsip: file dalam format .zip, .tar.gz, atau .tar.

File langsung diunduh ke direktori kerja saat ini dari pekerjaan. File arsip diunduh dan diekstraksi ke direktori kerja saat ini dari pekerjaan. Untuk file arsip, dua parameter terkait volume eksternal diperlukan agar program Spark memproses data OSS dalam volume eksternal.

Catatan

Parameter berikut harus dikonfigurasi dalam item konfigurasi Parameters node ODPS Spark DataWorks atau dalam file spark-defaults.conf. Parameter tidak dapat dikonfigurasi dalam kode.

Parameter

Deskripsi

spark.hadoop.odps.cupid.volume.files

File yang diperlukan untuk menjalankan pekerjaan Spark. Anda dapat menentukan beberapa file untuk pekerjaan dan memisahkan nama file dengan koma (,). Setelah Anda menentukan parameter ini, file akan diunduh ke direktori kerja saat ini dari pekerjaan Spark.

  • Format nilai

    odps://[project_name]/[volume_name]/[path_to_file], [path_to_file]

    project_name menentukan nama proyek MaxCompute. volume_name menentukan nama volume eksternal. path_to_file menentukan nama file.

    Penting

    Nilai parameter dapat berisi beberapa tingkat direktori. Anda harus menentukan nama file untuk parameter ini.

  • Konfigurasi contoh

    spark.hadoop.odps.cupid.volume.files=
    odps://mc_project/external_volume/data/mllib/kmeans_data.txt,
    odps://mc_project/external_volume/target/PythonKMeansExample/KMeansModel/data/part-00000-a2d44ac5-54f6-49fd-b793-f11e6a189f90-c000.snappy.parquet

    Setelah Anda menentukan parameter ini, file berikut dihasilkan dalam direktori kerja saat ini dari pekerjaan Spark: kmeans_data.txt dan

    part-00000-a2d44ac5-54f6-49fd-b793-f11e6a189f90-c000.snappy.parquet.

spark.hadoop.odps.cupid.volume.archives

File arsip yang diperlukan untuk menjalankan pekerjaan Spark. Anda dapat menentukan beberapa file arsip untuk pekerjaan dan memisahkan nama file dengan koma (,). Setelah Anda menentukan parameter ini, file arsip diunduh dan diekstraksi ke direktori kerja saat ini dari pekerjaan Spark.

  • Format nilai

    odps://[project_name]/[volume_name]/[archive_file_name], [archive_file_name]

    project_name menentukan nama proyek MaxCompute. volume_name menentukan nama volume eksternal. archive_file_name menentukan nama file arsip.

    Penting

    Nilai parameter dapat berisi beberapa tingkat direktori. Anda harus menentukan nama file untuk parameter ini.

  • Secara default, parameter ini dibiarkan kosong.

  • Konfigurasi contoh

    spark.hadoop.odps.cupid.volume.archives = 
    odps://spark_test_wj2/external_volume/pyspark-3.1.1.zip,
    odps://spark_test_wj2/external_volume/python-3.7.9-ucs4.tar.gz

    Setelah Anda menentukan parameter ini, file arsip berikut secara otomatis dihasilkan dalam direktori kerja saat ini dari pekerjaan Spark saat pekerjaan dimulai: pyspark-3.1.1.zip dan

    python-3.7.9-ucs4.tar.gz.

Proses sumber daya OSS dalam volume eksternal

Jika menggunakan Spark on MaxCompute, Anda dapat menggunakan kode untuk mendapatkan sumber daya dalam volume eksternal saat menjalankan pekerjaan Spark. Untuk mendapatkan sumber daya dalam volume eksternal, Anda perlu mengonfigurasi parameter berikut dalam kode pekerjaan Spark.

Parameter

Deskripsi

spark.hadoop.odps.volume.common.filesystem

Menentukan apakah Spark on MaxCompute mengidentifikasi volume eksternal. Atur parameter ini ke true.

Nilai default adalah false, yang menunjukkan bahwa volume eksternal tidak diidentifikasi secara default.

spark.hadoop.odps.cupid.volume.paths

Path volume eksternal yang ingin Anda akses.

  • Format nilai

    odps://[project_name]/[volume_name]/

    project_name menentukan nama proyek MaxCompute. volume_name menentukan nama volume eksternal.

  • Secara default, parameter ini dibiarkan kosong.

spark.hadoop.fs.odps.impl

Kelas implementasi yang digunakan untuk Spark on MaxCompute mengakses OSS.

Atur parameter ini ke org.apache.hadoop.fs.aliyun.volume.OdpsVolumeFileSystem.

spark.hadoop.fs.AbstractFileSystem.odps.impl

Kelas implementasi yang digunakan untuk Spark on MaxCompute mengakses OSS.

Atur parameter ini ke org.apache.hadoop.fs.aliyun.volume.abstractfsimpl.OdpsVolumeFs.

Kode contoh: Gunakan algoritma klastering K-means untuk menghasilkan file data pelatihan bernama kmeans_data.txt dalam direktori odps://ms_proj1_dev/volume_yyy1/. Gunakan file tersebut untuk menghasilkan model dalam direktori odps://ms_proj1_dev/volume_yyy1/target/PythonKMeansExample/KMeansModel. Kemudian, panggil model untuk mengklasifikasikan data pelatihan dan simpan hasilnya dalam direktori odps://ms_proj1_dev/volume_yyy1/target/PythonKMeansExample/KMeansModel/data.

-- Parameter
spark.hadoop.odps.cupid.volume.paths=odps://ms_proj1_dev/volume_yyy1/
spark.hadoop.odps.volume.common.filesystem=true
spark.hadoop.fs.odps.impl=org.apache.hadoop.fs.aliyun.volume.OdpsVolumeFileSystem
spark.hadoop.fs.AbstractFileSystem.odps.impl=org.apache.hadoop.fs.aliyun.volume.abstractfsimpl.OdpsVolumeFs

spark.hadoop.odps.access.id=xxxxxxxxx
spark.hadoop.odps.access.key=xxxxxxxxx
spark.hadoop.fs.oss.endpoint=oss-cn-beijing-internal.aliyuncs.com
spark.hadoop.odps.cupid.resources=ms_proj1_dev.jindofs-sdk-3.8.0.jar
spark.hadoop.fs.oss.impl=com.aliyun.emr.fs.oss.JindoOssFileSystem

spark.hadoop.odps.cupid.resources=public.python-2.7.13-ucs4.tar.gz
spark.pyspark.python=./public.python-2.7.13-ucs4.tar.gz/python-2.7.13-ucs4/bin/python
spark.hadoop.odps.spark.version=spark-2.4.5-odps0.34.0

-- Kode
from numpy import array
from math import sqrt

from pyspark import SparkContext
from pyspark.mllib.clustering import KMeans, KMeansModel

if __name__ == "__main__":
    sc = SparkContext(appName="KMeansExample")  # SparkContext

    # Muat dan analisis data
    data = sc.textFile("odps://ms_proj1_dev/volume_yyy1/kmeans_data.txt")
    parsedData = data.map(lambda line: array([float(x) for x in line.split(' ')]))

    # Bangun model (kelompokkan data)
    clusters = KMeans.train(parsedData, 2, maxIterations=10, initializationMode="random")

    # Evaluasi pengelompokan dengan menghitung Within Set Sum of Squared Errors
    def error(point):
        center = clusters.centers[clusters.predict(point)]
        return sqrt(sum([x**2 for x in (point - center)]))

    WSSSE = parsedData.map(lambda point: error(point)).reduce(lambda x, y: x + y)
    print("Within Set Sum of Squared Error = " + str(WSSSE))

    # Simpan dan muat model
    clusters.save(sc, "odps://ms_proj1_dev/volume_yyy1/target/PythonKMeansExample/KMeansModel")

    print(parsedData.map(lambda feature: clusters.predict(feature)).collect())

    sameModel = KMeansModel.load(sc, "odps://ms_proj1_dev/volume_yyy1/target/PythonKMeansExample/KMeansModel")
    
    print(parsedData.map(lambda feature: sameModel.predict(feature)).collect())
    sc.stop()

Setelah Anda menjalankan kode, Anda dapat melihat data hasil dalam direktori OSS yang dipetakan ke volume eksternal.

Gunakan Proxima CE untuk melakukan vektorisasi di MaxCompute

Bagian ini memberikan instruksi dan contoh untuk menggunakan Proxima CE melakukan vektorisasi di MaxCompute.

  1. Instal paket sumber daya Proxima CE.

  2. Jalankan tugas.

    • Batasan:

      • SDK Proxima untuk Java memungkinkan Anda menjalankan perintah tugas pada klien MaxCompute yang berjalan di sistem operasi Linux atau macOS.

        Catatan

        Saat menjalankan Proxima CE, dua jenis tugas terlibat: tugas lokal dan tugas MaxCompute. Tugas lokal adalah tugas yang tidak melibatkan SQL, MapReduce, dan tugas Graph di MaxCompute. Tugas MaxCompute adalah tugas yang dieksekusi berdasarkan mesin komputasi MaxCompute seperti SQL, MapReduce, dan Graph. Kedua jenis tugas tersebut dapat dijalankan secara bergantian. Setelah Anda menjalankan Proxima CE, ia pertama-tama mencoba memuat kernel Proxima pada mesin lokal tempat Proxima CE dijalankan menggunakan klien MaxCompute. Jika kernel Proxima berhasil dimuat, modul tertentu dijalankan pada mesin lokal untuk memanggil fungsi-fungsi berbasis kernel Proxima. Jika operasi pemuatan gagal, kesalahan dilaporkan. Namun, operasi selanjutnya tidak terpengaruh secara negatif, dan modul-modul tersebut memanggil fungsi lain sebagai gantinya. Paket JAR berisi dependensi terkait Linux. Oleh karena itu, paket JAR tidak dapat dijalankan pada klien MaxCompute di sistem operasi Windows.

      • Anda tidak dapat menggunakan node MapReduce DataWorks untuk mengeksekusi tugas. Hal ini karena versi klien MaxCompute bawah yang terintegrasi dengan node MapReduce sedang ditingkatkan, dan tugas gagal dieksekusi. Kami sarankan Anda menggunakan klien MaxCompute untuk mengirimkan tugas.

    • Persiapan data:

      -- Buat tabel input.
      CREATE TABLE doc_table_float_smoke(pk STRING, vector STRING) PARTITIONED BY (pt STRING);
      CREATE TABLE query_table_float_smoke(pk STRING, vector STRING) PARTITIONED BY (pt STRING);
      
      -- Masukkan data ke dalam tabel doc_table_float_smoke (tabel dasar).
      ALTER TABLE doc_table_float_smoke add PARTITION(pt='20230116');
      INSERT OVERWRITE TABLE doc_table_float_smoke PARTITION (pt='20230116') VALUES
      ('1.nid','1~1~1~1~1~1~1~1'),
      ('2.nid','2~2~2~2~2~2~2~2'),
      ('3.nid','3~3~3~3~3~3~3~3'),
      ('4.nid','4~4~4~4~4~4~4~4'),
      ('5.nid','5~5~5~5~5~5~5~5'),
      ('6.nid','6~6~6~6~6~6~6~6'),
      ('7.nid','7~7~7~7~7~7~7~7'),
      ('8.nid','8~8~8~8~8~8~8~8'),
      ('9.nid','9~9~9~9~9~9~9~9'),
      ('10.nid','10~10~10~10~10~10~10~10');
      
      -- Masukkan data ke dalam tabel query_table_float_smoke (tabel kueri).
      ALTER TABLE query_table_float_smoke add PARTITION(pt='20230116');
      INSERT OVERWRITE TABLE query_table_float_smoke PARTITION (pt='20230116') VALUES
      ('q1.nid','1~1~1~1~2~2~2~2'),
      ('q2.nid','4~4~4~4~3~3~3~3'),
      ('q3.nid','9~9~9~9~5~5~5~5');
    • Kode tugas contoh:

      jar -libjars proxima-ce-aliyun-1.0.0.jar 
      -classpath proxima-ce-aliyun-1.0.0.jar com.alibaba.proxima2.ce.ProximaCERunner 
      -doc_table doc_table_float_smoke 
      -doc_table_partition 20230116 
      -query_table query_table_float_smoke 
      -query_table_partition 20230116 
      -output_table output_table_float_smoke 
      -output_table_partition 20230116 
      -data_type float 
      -dimension 8 
      -topk 1 
      -job_mode train:build:seek:recall 
      -external_volume shanghai_vol_ceshi
      -owner_id 1248953xxx
      ;
    • Hasil contoh: Jalankan pernyataan select * from output_table_float_smoke where pt='20230116'; untuk menanyakan data dari tabel hasil.

      +------------+------------+------------+------------+
      | pk         | knn_result | score      | pt         |
      +------------+------------+------------+------------+
      | q1.nid     | 2.nid      | 4.0        | 20230116   |
      | q1.nid     | 1.nid      | 4.0        | 20230116   |
      | q1.nid     | 3.nid      | 20.0       | 20230116   |
      | q2.nid     | 4.nid      | 4.0        | 20230116   |
      | q2.nid     | 3.nid      | 4.0        | 20230116   |
      | q2.nid     | 2.nid      | 20.0       | 20230116   |
      | q3.nid     | 7.nid      | 32.0       | 20230116   |
      | q3.nid     | 8.nid      | 40.0       | 20230116   |
      | q3.nid     | 6.nid      | 40.0       | 20230116   |
      +------------+------------+------------+------------+