Aliran Data Awan Musim Semi Dengan Apache Spark

1. Pengenalan

Spring Cloud Data Flow adalah alat untuk membina integrasi data dan saluran paip pemprosesan data masa nyata.

Saluran paip, dalam hal ini, adalah aplikasi Spring Boot yang dibina dengan penggunaan kerangka Spring Cloud Stream atau Spring Cloud Task.

Dalam tutorial ini, kami akan menunjukkan cara menggunakan Spring Cloud Data Flow dengan Apache Spark.

2. Pelayan Tempatan Aliran Data

Pertama, kita perlu menjalankan Server Flow Data untuk dapat menyebarkan tugas kita.

Untuk menjalankan Data Flow Server secara tempatan, kita perlu membuat projek baru dengan pergantungan spring-cloud-starter-dataflow-server-local :

 org.springframework.cloud spring-cloud-starter-dataflow-server-local 1.7.4.RELEASE 

Selepas itu, kita perlu memberi penjelasan pada kelas utama di pelayan dengan @EnableDataFlowServer :

@EnableDataFlowServer @SpringBootApplication public class SpringDataFlowServerApplication { public static void main(String[] args) { SpringApplication.run( SpringDataFlowServerApplication.class, args); } }

Sebaik sahaja kami menjalankan aplikasi ini, kami akan mempunyai pelayan Data Flow tempatan di port 9393.

3. Membuat Projek

Kami akan membuat Spark Job sebagai aplikasi tempatan yang berdiri sendiri sehingga kami tidak memerlukan kluster untuk menjalankannya.

3.1. Kebergantungan

Pertama, kami akan menambahkan pergantungan Spark:

 org.apache.spark spark-core_2.10 2.4.0  

3.2. Membuat Kerja

Dan untuk tugas kita, mari kira anggaran:

public class PiApproximation { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("BaeldungPIApproximation"); JavaSparkContext context = new JavaSparkContext(conf); int slices = args.length >= 1 ? Integer.valueOf(args[0]) : 2; int n = (100000L * slices) > Integer.MAX_VALUE ? Integer.MAX_VALUE : 100000 * slices; List xs = IntStream.rangeClosed(0, n) .mapToObj(element -> Integer.valueOf(element)) .collect(Collectors.toList()); JavaRDD dataSet = context.parallelize(xs, slices); JavaRDD pointsInsideTheCircle = dataSet.map(integer -> { double x = Math.random() * 2 - 1; double y = Math.random() * 2 - 1; return (x * x + y * y )  integer + integer2); System.out.println("The pi was estimated as:" + count / n); context.stop(); } }

4. Shell Aliran Data

Data Flow Shell adalah aplikasi yang membolehkan kita berinteraksi dengan pelayan . Shell menggunakan arahan DSL untuk menggambarkan aliran data.

Untuk menggunakan Shell Flow Data, kita perlu membuat projek yang membolehkan kita menjalankannya. Pertama, kita memerlukan pergantungan spring-cloud-dataflow-shell :

 org.springframework.cloud spring-cloud-dataflow-shell 1.7.4.RELEASE 

Setelah menambahkan kebergantungan, kami dapat membuat kelas yang akan menjalankan shell Flow Data kami:

@EnableDataFlowShell @SpringBootApplication public class SpringDataFlowShellApplication { public static void main(String[] args) { SpringApplication.run(SpringDataFlowShellApplication.class, args); } }

5. Melaksanakan Projek

Untuk menggunakan projek kami, kami akan menggunakan pelari tugas yang dipanggil untuk Apache Spark dalam tiga versi: kluster , benang , dan klien . Kami akan meneruskan versi pelanggan tempatan .

Pelari tugas adalah yang menjalankan tugas Spark kami.

Untuk melakukan itu, pertama-tama kita perlu mendaftarkan tugas kita menggunakan Data Flow Shell :

app register --type task --name spark-client --uri maven://org.springframework.cloud.task.app:spark-client-task:1.0.0.BUILD-SNAPSHOT 

Tugas ini membolehkan kita menentukan beberapa parameter yang berbeza, beberapa di antaranya adalah pilihan, tetapi beberapa parameter diperlukan untuk menyebarkan tugas Spark dengan betul:

  • spark.app-class , kelas utama tugas kami yang dihantar
  • spark.app-jar , jalan ke balang lemak yang mengandungi tugas kami
  • spark.app- name , nama yang akan digunakan untuk tugas kita
  • spark.app-args , hujah yang akan diserahkan kepada pekerjaan

Kami dapat menggunakan tugas percubaan-klien terdaftar untuk menyerahkan tugas kami, dan ingat untuk memberikan parameter yang diperlukan:

task create spark1 --definition "spark-client \ --spark.app-name=my-test-pi --spark.app-class=com.baeldung.spring.cloud.PiApproximation \ --spark.app-jar=/apache-spark-job-0.0.1-SNAPSHOT.jar --spark.app-args=10"

Perhatikan bahawa spark.app-jar adalah jalan ke balang lemak dengan tugas kita.

Setelah berjaya membuat tugas, kita dapat meneruskannya dengan perintah berikut:

task launch spark1

Ini akan mendorong pelaksanaan tugas kita.

6. Ringkasan

Dalam tutorial ini, kami telah menunjukkan cara menggunakan rangka kerja Spring Cloud Data Flow untuk memproses data dengan Apache Spark. Maklumat lebih lanjut mengenai rangka kerja Spring Cloud Data Flow boleh didapati dalam dokumentasi.

Semua sampel kod boleh didapati di GitHub.