Bagikan melalui


panduan peningkatan SQL Server Kluster Big Data Spark 3

Berlaku untuk: SQL Server 2019 (15.x)

Penting

Add-on Kluster Big Data Microsoft SQL Server 2019 akan dihentikan. Dukungan untuk Kluster Big Data SQL Server 2019 akan berakhir pada 28 Februari 2025. Semua pengguna SQL Server 2019 yang ada dengan Jaminan Perangkat Lunak akan didukung penuh pada platform dan perangkat lunak akan terus dipertahankan melalui pembaruan kumulatif SQL Server hingga saat itu. Untuk informasi selengkapnya, lihat posting blog pengumuman dan opsi Big data di platform Microsoft SQL Server.

Artikel ini berisi informasi dan panduan penting untuk memigrasikan beban kerja Apache Spark 2.4 ke Spark versi 3.1. Ini diperlukan untuk meningkatkan dari SQL Server Kluster Big Data CU12 ke CU13, ke atas.

Pengantar Apache Spark 3 di SQL Server Kluster Big Data

Hingga pembaruan kumulatif 12 (CU12), kluster big data bergantung pada baris Apache Spark 2.4, yang mencapai akhir masa pakainya pada Mei 2021. Konsisten dengan komitmen kami terhadap peningkatan berkelanjutan dari kemampuan Big Data dan Pembelajaran Mesin yang dibawa oleh mesin Apache Spark, CU13 menghadirkan rilis Apache Spark saat ini, versi 3.1.2.

Garis besar performa baru

Versi baru Apache Spark ini membawa keuntungan performa dibandingkan beban kerja pemrosesan big data. Menggunakan referensi beban kerja TCP-DS 10TB dalam pengujian kami, kami dapat mengurangi runtime dari 4,19 jam menjadi 2,96 jam, peningkatan 29,36% yang dicapai hanya dengan beralih mesin menggunakan perangkat keras dan profil konfigurasi yang sama pada SQL Server Kluster Big Data, tidak ada pengoptimalan aplikasi tambahan. Rata-rata peningkatan runtime kueri individual adalah 36%.

Menu kirim dengan mengklik dasbor

Panduan peningkatan

Spark 3 adalah rilis utama dan berisi perubahan yang melanggar. Mengikuti praktik terbaik yang ditetapkan yang sama di alam semesta SQL Server, disarankan:

  1. Tinjau artikel ini sepenuhnya.
  2. Tinjau Panduan Migrasi Apache Spark 3 resmi.
  3. Lakukan penyebaran berdampingan dari kluster big data baru versi CU13 dengan lingkungan Anda saat ini.
  4. (Opsional) Manfaatkan kemampuan penyalinan terdistribusi HDFS azdata baru untuk memiliki subset data Anda yang diperlukan untuk validasi.
  5. Validasi beban kerja Anda saat ini dengan Spark 3 sebelum meningkatkan.
  6. Menilai kembali pengoptimalan Spark yang diberlakukan dalam strategi definisi kode dan tabel Anda. Spark 3 menghadirkan pengacakan baru, partisi, dan penyempurnaan Eksekusi Kueri Adaptif. Ini adalah kesempatan besar untuk mengevaluasi kembali keputusan sebelumnya dan mencoba memanfaatkan fitur out-of-the-box mesin yang lebih baru.

Apa yang terjadi selama peningkatan kluster?

Proses peningkatan kluster akan menyebarkan pod Spark dengan versi baru dan runtime yang disegarkan untuk Apache Spark. Setelah peningkatan, tidak akan ada komponen Spark 2.4 lagi.

Perubahan konfigurasi persisten yang dilakukan melalui kerangka kerja konfigurasi akan dipertahankan.

Pustaka pengguna dan artefak yang dimuat langsung ke HDFS akan dipertahankan. Namun, pastikan pustaka dan artefak tersebut kompatibel dengan Spark 3.

Peringatan

Penyesuaian yang dilakukan langsung ke pod akan hilang, pastikan Anda memvalidasi dan menerapkannya kembali jika masih berlaku untuk Spark 3.

Perubahan mencolok

Spark 3 tidak sepenuhnya kompatibel dengan 2.4, perubahan yang melanggar terutama disebabkan oleh tiga bagian:

  • Scala 2.12 yang digunakan oleh Spark 3 tidak kompatibel dengan Scala 2.11 yang digunakan oleh Spark 2.4
  • Perubahan dan penghentian API Spark 3
  • SQL Server Kluster Big Data runtime untuk pembaruan pustaka Apache Spark

Scala 2.12 yang digunakan oleh Spark 3 tidak kompatibel dengan Scala 2.11

Jika menjalankan pekerjaan Spark berdasarkan jar Scala 2.11, diperlukan untuk membangunnya kembali menggunakan Scala 2.12. Scala 2.11 dan 2.12 sebagian besar kompatibel dengan sumber, tetapi tidak kompatibel dengan biner. Untuk informasi selengkapnya, lihat Scala 2.12.0.

Perubahan di bawah ini diperlukan:

  1. Ubah versi Scala untuk semua dependensi Scala.
  2. Ubah versi Spark untuk semua dependensi Spark.
  3. Ubah semua dependensi Spark telah menyediakan cakupan kecuali dependensi eksternal seperti spark-sql-kafka-0-10.

Berikut adalah contoh pom.xml seperti di bawah ini:

  <properties>
    <spark.version>3.1.2</spark.version>
    <scala.version.major>2.12</scala.version.major>
    <scala.version.minor>10</scala.version.minor>
    <scala.version>${scala.version.major}.${scala.version.minor}</scala.version>
  </properties>
 
  <dependencies>
 
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
      <scope>provided</scope>
    </dependency>
 
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${scala.version.major}</artifactId>
      <version>${spark.version}</version>
     <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_${scala.version.major}</artifactId>
      <version>${spark.version}</version>
      <scope>provided</scope>
    </dependency>
 
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql-kafka-0-10_${scala.version.major}</artifactId>
      <version>${spark.version}</version>
    </dependency>
    
  </dependencies>

Perubahan dan penghentian API Spark 3

Tinjau Panduan Migrasi Apache Spark 3 resmi, yang mencakup semua perubahan API secara rinci.

Beberapa sorotan yang diambil adalah:

Breaking change Tindakan
spark-submityarn-client parameter dan yarn-clustermodes dihapus di Spark 3 Gunakan spark-submit --master yarn --deploy-mode client atau --deploy-mode cluster sebagai gantinya.
Detail merujuk https://spark.apache.org/docs/latest/running-on-yarn.html
HiveContext kelas dihapus Menggunakan SparkSession.builder.enableHiveSupport() sebagai gantinya
Urutan argumen dibalik dalam metode TRIM Gunakan TRIM(str, trimStr) alih-alih TRIM(trimStr, str)
Karena peningkatan ke Scala 2.12, DataStreamWriter.foreachBatch bukan sumber yang kompatibel dengan program Scala Perbarui kode sumber Scala Anda untuk membedakan antara fungsi Scala dan Java lambda.

SQL Server Kluster Big Data runtime untuk pembaruan pustaka Apache Spark

Seperti yang dibahas oleh runtime SQL Server Kluster Big Data untuk spesifikasi Apache Spark, semua pustaka Python, R, dan Scala default diperbarui pada rilis CU13. Selain itu, banyak pustaka ditambahkan untuk memberikan pengalaman out-of-the-box yang lebih baik.

  1. Pastikan beban kerja Anda berfungsi dengan kumpulan pustaka yang lebih baru.
  2. Tinjau apakah pustaka yang dimuat kustom sekarang menjadi bagian dari garis besar paket default, dan sesuaikan spesifikasi pekerjaan Anda untuk menghapus pustaka kustom untuk memungkinkan pekerjaan menggunakan pustaka yang dikirim.

Pertanyaan Umum

Cara memecahkan masalah aneh java.lang.NoSuchMethodError atau java.lang.ClassNotFoundException

Kesalahan ini kemungkinan besar disebabkan oleh konflik versi Spark atau Scala. Periksa kembali hal di bawah ini dan bangun kembali proyek Anda.

  1. Pastikan semua versi Scala diperbarui.
  2. Pastikan semua dependensi Spark diperbarui dengan versi scala dan versi spark yang benar.
  3. Pastikan semua dependensi Spark telah menyediakan cakupan kecuali spark-sql-kafka-0-10.

SparkUpgradeException karena perubahan mode kalender

Ada perubahan dalam model kalender Spark 3.0. Anda mungkin melihat pengecualian seperti ini saat menulis kolom kalender di Spark SQL:

Caused by: org.apache.spark.SparkUpgradeException: 
You may get a different result due to the upgrading of Spark 3.0:
writing dates before 1582-10-15 or timestamps before 1900-01-01T00:00:00Z into Parquet INT96 files can be dangerous,
as the files may be read by Spark 2.x or legacy versions of Hive later, 
which uses a legacy hybrid calendar that is different from Spark 3.0+'s Proleptic Gregorian calendar. 
See more details in SPARK-31404.
You can set spark.sql.legacy.parquet.int96RebaseModeInWrite to 'LEGACY' to 
rebase the datetime values w.r.t. the calendar difference during writing, to get maximum interoperability. 
Or set spark.sql.legacy.parquet.int96RebaseModeInWrite to 'CORRECTED' to 
write the datetime values as it is, if you are 100% sure that the written files 
will only be read by Spark 3.0+ or other systems that use Proleptic Gregorian calendar.

Solusi: Atur konfigurasi spark.sql.legacy.parquet.int96RebaseModeInWrite ke LEGACY atau CORRECTED, seperti yang dijelaskan di atas. Di bawah ini adalah solusi yang mungkin dalam kode PySpark:

spark.conf.set("spark.sql.legacy.parquet.int96RebaseModeInWrite","CORRECTED")

Langkah berikutnya

Untuk informasi selengkapnya, lihat Memperkenalkan SQL Server Kluster Big Data.