Spring Cloud-gegevensstroom met Apache Spark

1. Inleiding

Spring Cloud Data Flow is een toolkit voor het bouwen van gegevensintegratie en realtime gegevensverwerkingspijplijnen.

Pijplijnen zijn in dit geval Spring Boot-applicaties die zijn gebouwd met behulp van Spring Cloud Stream- of Spring Cloud Task-frameworks.

In deze zelfstudie laten we zien hoe u Spring Cloud Data Flow kunt gebruiken met Apache Spark.

2. Gegevensstroom Lokale server

Ten eerste moeten we de Data Flow Server draaien om onze taken te kunnen implementeren.

Om de Data Flow Server lokaal te laten draaien, moeten we een nieuw project maken met de spring-cloud-starter-dataflow-server-local afhankelijkheid:

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

Daarna moeten we de hoofdklasse op de server annoteren met @EnableDataFlowServer:

@EnableDataFlowServer @SpringBootApplication openbare klasse SpringDataFlowServerApplication {openbare statische leegte hoofd (String [] args) {SpringApplication.run (SpringDataFlowServerApplication.class, args); }}

Zodra we deze applicatie hebben uitgevoerd, hebben we een lokale Data Flow-server op poort 9393.

3. Een project aanmaken

We maken een Spark-taak als een zelfstandige lokale applicatie, zodat we geen cluster nodig hebben om deze uit te voeren.

3.1. Afhankelijkheden

Eerst voegen we de Spark-afhankelijkheid toe:

 org.apache.spark spark-core_2.10 2.4.0 

3.2. Een baan creëren

En laten we voor ons werk pi benaderen:

openbare klasse PiApproximation {openbare statische leegte hoofd (String [] args) {SparkConf conf = nieuwe SparkConf (). setAppName ("BaeldungPIApproximation"); JavaSparkContext context = nieuwe JavaSparkContext (conf); int plakjes = args.length> = 1? Integer.valueOf (args [0]): 2; int n = (100000L * plakjes)> Geheel getal.MAX_VALUE? Geheel getal.MAX_VALUE: 100000 * plakjes; Lijst xs = IntStream.rangeClosed (0, n) .mapToObj (element -> Integer.valueOf (element)) .collect (Collectors.toList ()); JavaRDD dataSet = context.parallelize (xs, segmenten); JavaRDD pointsInsideTheCircle = dataSet.map (integer -> {dubbel x = Math.random () * 2-1; dubbel y = Math.random () * 2-1; return (x * x + y * y) integer + integer2 ); System.out.println ("De pi werd geschat als:" + count / n); context.stop (); }}

4. Datastroomschil

Data Flow Shell is een applicatie die zal ons in staat stellen om te communiceren met de server. Shell gebruikt de DSL-opdrachten om gegevensstromen te beschrijven.

Om de Data Flow Shell te gebruiken, moeten we een project maken waarmee we het kunnen uitvoeren. Ten eerste hebben we de spring-cloud-dataflow-shell afhankelijkheid:

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

Nadat we de afhankelijkheid hebben toegevoegd, kunnen we de klasse maken die onze Data Flow-shell zal uitvoeren:

@EnableDataFlowShell @SpringBootApplication openbare klasse SpringDataFlowShellApplication {openbare statische leegte hoofd (String [] args) {SpringApplication.run (SpringDataFlowShellApplication.class, args); }}

5. Implementatie van het project

Om ons project in te zetten, gebruiken we de zogenaamde task runner die beschikbaar is voor Apache Spark in drie versies: TROS, garen, en cliënt. We gaan verder met de lokale cliënt versie.

De taakloper is wat onze Spark-taak beheert.

Om dat te doen, moeten we dat eerst doen registreer onze taak met behulp van Data Flow Shell:

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

Met de taak kunnen we meerdere verschillende parameters specificeren, waarvan sommige optioneel zijn, maar sommige parameters zijn nodig om de Spark-taak correct te implementeren:

  • spark.app-klasse, de hoofdklasse van onze ingezonden baan
  • spark.app-jar, een pad naar de vetpot met ons werk
  • vonk.app-naam, de naam die voor ons werk zal worden gebruikt
  • spark.app-args, de argumenten die aan de baan worden doorgegeven

We kunnen de geregistreerde taak gebruiken spark-client om onze opdracht in te dienen, waarbij u de vereiste parameters niet vergeet:

taak maken spark1 --definition "spark-client \ --spark.app-name = mijn-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 "

Let daar op spark.app-jar is het pad naar de vetpot met ons werk.

Nadat de taak is gemaakt, kunnen we doorgaan met het uitvoeren van de volgende opdracht:

taak lancering spark1

Dit roept de uitvoering van onze taak op.

6. Samenvatting

In deze zelfstudie hebben we laten zien hoe u het Spring Cloud Data Flow-framework gebruikt om gegevens te verwerken met Apache Spark. Meer informatie over het Spring Cloud Data Flow-framework is te vinden in de documentatie.

Alle codevoorbeelden zijn te vinden op GitHub.