全部产品
Search
文档中心

MaxCompute:Gunakan Spark pada MaxCompute untuk mengakses sumber data eksternal dari solusi danau data

更新时间:Jun 19, 2025

Spark pada MaxCompute memungkinkan Anda mengakses sumber data eksternal dari solusi danau data. Jika Anda ingin menjalankan pekerjaan Spark di MaxCompute alih-alih di Spark, Anda dapat menggunakan Spark pada MaxCompute untuk mengakses sumber data eksternal tanpa perlu memigrasi pekerjaan Spark ke MaxCompute, sehingga mengurangi biaya pemrosesan data. Topik ini menjelaskan cara menggunakan Spark pada MaxCompute untuk mengakses sumber data eksternal dari solusi danau data.

Akses proyek eksternal berdasarkan sumber data Hadoop

  • Akses proyek eksternal menggunakan SQL MaxCompute

    -- Proyek hadoop_external_project adalah proyek eksternal yang dipetakan ke database Hive dari E-MapReduce (EMR).
    -- Akses tabel non-partisi dalam proyek.
    SELECT * from hadoop_external_project.testtbl;
    -- Akses tabel partisi dalam proyek.
    SELECT * from hadoop_external_project.testtbl_par where b='20220914';
  • Akses proyek eksternal menggunakan Spark pada MaxCompute

    -- Konfigurasikan parameter.
    -- Aktifkan fitur untuk mengakses tabel eksternal dan proyek eksternal. Secara default, fitur yang dapat Anda gunakan untuk mengakses tabel eksternal dan proyek eksternal dinonaktifkan.
    spark.sql.odps.enableExternalTable=true
    spark.sql.odps.enableExternalProject=true;
    -- Tentukan versi Spark.
    spark.hadoop.odps.spark.version=spark-2.4.5-odps0.34.0;
    
    -- Tulis kode.
    import org.apache.spark.sql.SparkSession
    
    object external_Project_ReadTableHadoop {
      def main(args: Array[String]): Unit = {
        val spark = SparkSession
          .builder()
          .appName("external_TableL-on-MaxCompute")
          // Periode timeout untuk join siaran. Nilai defaultnya adalah 300 detik. 
          .config("spark.sql.broadcastTimeout", 20 * 60)
          // Dalam mode ketat, Anda harus menentukan setidaknya satu partisi statis. Dalam mode non-ketat, semua partisi bisa dinamis. 
          .config("odps.exec.dynamic.partition.mode", "nonstrict")
          .config("oss.endpoint","oss-cn-shanghai-internal.aliyuncs.com")
          .getOrCreate()
    
        // Akses proyek eksternal ext_dlf_0713.
        print("=====show tables in hadoop_external_project6=====")
        spark.sql("show tables in hadoop_external_project6").show()
    
        // Baca data dari tabel non-partisi dalam proyek eksternal.
        print("===============hadoop_external_project6.testtbl;================")
        spark.sql("desc extended hadoop_external_project6.testtbl").show()
        print("===============hadoop_external_project6.testtbl;================")
        spark.sql("SELECT * from hadoop_external_project6.testtbl").show()
    
        // Baca data dari tabel partisi dalam proyek eksternal.
        print("===============hadoop_external_project6.testtbl_par;================")
        spark.sql("desc extended hadoop_external_project6.testtbl_par").show()
        print("===============hadoop_external_project6.testtbl;================")
        spark.sql("SELECT * from hadoop_external_project6.testtbl_par where b='20220914'").show()
    
      }
    
    }

Akses proyek eksternal berdasarkan DLF dan OSS

  • Akses proyek eksternal menggunakan SQL MaxCompute

    -- Proyek ext_dlf_0713 adalah proyek eksternal yang dipetakan ke database Data Lake Formation (DLF).
    -- Akses tabel non-partisi dalam proyek.
    SELECT * from ext_dlf_0713.tbl_oss1;
  • Akses proyek eksternal menggunakan Spark pada MaxCompute

    -- Konfigurasikan parameter.
    -- Aktifkan fitur untuk mengakses tabel eksternal dan proyek eksternal. Secara default, fitur yang dapat Anda gunakan untuk mengakses tabel eksternal dan proyek eksternal dinonaktifkan.
    spark.sql.odps.enableExternalTable=true;
    spark.sql.odps.enableExternalProject=true;
    -- Tentukan versi Spark.
    spark.hadoop.odps.spark.version=spark-2.4.5-odps0.34.0;
    -- Tambahkan konfigurasi berikut ke kode jika direktori Object Storage Service (OSS) tempat file data disimpan dibuat menggunakan EMR.
    spark.hadoop.odps.oss.location.uri.style=emr;
    -- Tentukan endpoint OSS saat Anda menggunakan Spark untuk mengakses proyek eksternal berdasarkan OSS.
    spark.hadoop.odps.oss.endpoint=oss-cn-shanghai-internal.aliyuncs.com;
    -- Tentukan wilayah.
    spark.hadoop.odps.region.id=cn-shanghai;
    spark.hadoop.odps.oss.region.default=cn-shanghai;
    
    -- Tulis kode.
    import org.apache.spark.sql.{SaveMode, SparkSession}
    object external_Project_ReadTable {
      def main(args: Array[String]): Unit = {
        val spark = SparkSession
          .builder()
          .appName("external_TableL-on-MaxCompute")
          // Periode timeout untuk join siaran. Nilai defaultnya adalah 300 detik. 
          .config("spark.sql.broadcastTimeout", 20 * 60)
          // Dalam mode ketat, Anda harus menentukan setidaknya satu partisi statis. Dalam mode non-ketat, semua partisi bisa dinamis. 
          .config("odps.exec.dynamic.partition.mode", "nonstrict")
          .config("oss.endpoint","oss-cn-shanghai-internal.aliyuncs.com")
          .getOrCreate()
    
        // Akses proyek eksternal ext_dlf_0713.
        print("=====show tables in ext_dlf_0713=====")
        spark.sql("show tables in ext_dlf_0713").show()
    
        // Baca data dari tabel non-partisi dalam proyek eksternal.
        print("===============ext_dlf_0713.tbl_oss1;================")
        spark.sql("desc extended ext_dlf_0713.tbl_oss1").show()
        print("===============ext_dlf_0713.tbl_oss1;================")
        spark.sql("SELECT * from ext_dlf_0713.tbl_oss1").show()
    
    
      }
    
    }