Aliran Data Awan Musim Semi Dengan Apache Spark

1. Perkenalan

Spring Cloud Data Flow adalah toolkit untuk membangun integrasi data dan pipeline pemrosesan data real-time.

Pipelines, dalam hal ini, adalah aplikasi Spring Boot yang dibuat dengan menggunakan framework Spring Cloud Stream atau Spring Cloud Task.

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

2. Aliran Data Server Lokal

Pertama, kita perlu menjalankan Server Aliran Data untuk dapat menerapkan pekerjaan kita.

Untuk menjalankan Data Flow Server secara lokal, kita perlu membuat proyek baru dengan ketergantungan spring-cloud-starter-dataflow-server-local :

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

Setelah itu, kita perlu menganotasi kelas utama di server dengan @EnableDataFlowServer :

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

Setelah kami menjalankan aplikasi ini, kami akan memiliki server Aliran Data lokal pada port 9393.

3. Membuat Proyek

Kami akan membuat Spark Job sebagai aplikasi lokal mandiri sehingga kami tidak memerlukan cluster apa pun untuk menjalankannya.

3.1. Dependensi

Pertama, kami akan menambahkan dependensi Spark:

 org.apache.spark spark-core_2.10 2.4.0  

3.2. Membuat Pekerjaan

Dan untuk pekerjaan kita, mari kita perkirakan pi:

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. Arus Data Shell

Data Flow Shell adalah aplikasi yang memungkinkan kita berinteraksi dengan server . Shell menggunakan perintah DSL untuk menjelaskan aliran data.

Untuk menggunakan Data Flow Shell, kita perlu membuat proyek yang memungkinkan kita menjalankannya. Pertama, kita membutuhkan dependensi spring-cloud-dataflow-shell :

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

Setelah menambahkan ketergantungan, kita dapat membuat kelas yang akan menjalankan shell Arus Data kita:

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

5. Menerapkan Proyek

Untuk menerapkan proyek kami, kami akan menggunakan apa yang disebut runner tugas yang tersedia untuk Apache Spark dalam tiga versi: cluster , yarn , dan klien . Kami akan melanjutkan dengan versi klien lokal .

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 memungkinkan kita menentukan beberapa parameter berbeda, beberapa di antaranya bersifat opsional, tetapi beberapa parameter diperlukan untuk menerapkan tugas Spark dengan benar:

  • spark.app-class , kelas utama dari pekerjaan yang kami kirimkan
  • spark.app-jar , jalur ke toples lemak yang berisi pekerjaan kita
  • spark.app- name , nama yang akan digunakan untuk pekerjaan kita
  • spark.app-args , argumen yang akan diteruskan ke pekerjaan

Kita dapat menggunakan tugas spark-client terdaftar untuk mengirimkan pekerjaan kita, dengan mengingat 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 bahwa spark.app-jar adalah jalur menuju fat-jar dengan tugas kita.

Setelah berhasil membuat tugas, kita dapat melanjutkan untuk menjalankannya dengan perintah berikut:

task launch spark1

Ini akan meminta pelaksanaan tugas kita.

6. Ringkasan

Dalam tutorial ini, kami telah menunjukkan cara menggunakan framework Spring Cloud Data Flow untuk memproses data dengan Apache Spark. Informasi lebih lanjut tentang kerangka kerja Spring Cloud Data Flow dapat ditemukan di dokumentasi.

Semua contoh kode dapat ditemukan di GitHub.