In diesem Artikel wird erläutert, wie Sie eine einfache Batch-Anwendung mit dem Java-Batch-Framework Asakusa Framework erstellen. Offiziell gibt es Asakusa Framework Tutorial, aber in diesem Artikel können Sie Asakusa problemlos entwickeln. Ziel ist es, Ihnen einen Überblick über die Operation zu geben und Ihnen ein Gefühl dafür zu geben.
Wir haben den Betrieb in der folgenden Umgebung bestätigt.
(Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass JDK und Gradle installiert sind.)
Die eingeführte Beispielanwendung ist eine einfache Anwendung, die eine Eingabedatei liest (Inhalt ist nur "Hallo"), den Inhalt auf "Hallo, Welt!" Aktualisiert und die Datei ausgibt. Das DFD-Format ist wie folgt.
Erstellen Sie den folgenden Ordner und verwenden Sie ihn als Projektordner für die Beispielanwendung.
C:¥asakusa-develop¥helloworld
Erstellen Sie eine Gradle-Build-Skriptdatei (build.gradle
) unter dem erstellten Projektordner.
Diese Beispielanwendung ist als Asakusa Vanilla konfiguriert und kann auf der Windows-JVM ausgeführt werden.
Es ist auch möglich, Anwendungen für Hadoop und M3BP zu generieren, indem Sie die Einstellungen hier ändern.
Weitere Informationen zu dem von Ihnen erstellten Gradle-Skript finden Sie in der Asakusa Gradle Plugin-Referenz (http://docs.asakusafw.com/latest/release/ja/html/application/gradle-plugin-reference.html).
build.gradle
group 'com.example'
buildscript {
repositories {
maven { url 'http://asakusafw.s3.amazonaws.com/maven/releases' }
maven { url 'http://asakusafw.s3.amazonaws.com/maven/snapshots' }
}
dependencies {
classpath group: 'com.asakusafw.gradle', name: 'asakusa-distribution', version: '0.10.0'
}
}
apply plugin: 'asakusafw-sdk'
apply plugin: 'asakusafw-organizer'
apply plugin: 'asakusafw-vanilla'
apply plugin: 'eclipse'
asakusafwOrganizer {
vanilla.enabled true
profiles.prod {
hadoop.embed true
}
}
Der folgende Gradle-Befehl generiert eine Konfigurationsdatei, die als Eclipse-Projekt importiert werden kann. (Unter dem Projektordner ausführen)
C:¥asakusa-develop¥helloworld>gradle eclipse
Wenn Sie IntelliJ IDEA verwenden möchten, lesen Sie bitte den offiziellen Using IntelliJ IDEA. Wenn Sie Eclipse verwenden, sollten Sie Shafu (Eclipse-Plug-In für die Asakusa-Entwicklung) verwenden.
DMDL (Data Model Definition Language) Erstellen Sie eine Skriptdatei, um das Datenmodell zu definieren.
Im folgenden Skript heißen die Eingabe- und Ausgabemodelle "Eingabe" bzw. "Ausgabe" und Direct I / O CSV. /csv-format.html) ist für die Eingabe und Ausgabe festgelegt.
Erstellen Sie den folgenden Ordner und erstellen Sie eine Skriptdatei (models.dmdl
) darunter.
C:¥asakusa-develop¥helloworld¥src¥main¥dmdl
models.dmdl
@directio.csv
input = {
value : TEXT;
};
@directio.csv
output = {
value : TEXT;
};
Wenn Sie den folgenden Gradle-Befehl ausführen, wird basierend auf der erstellten Skriptdatei eine Datenmodellklasse generiert, die von Asakusa Framework verwendet werden kann. (Unter dem Projektordner ausführen)
C:¥asakusa-develop¥helloworld>gradle compileDMDL
Erstellen Sie den folgenden Ordner und erstellen Sie die Klasse "com.example.operator.HelloWorldOperator" darunter.
Da die Verarbeitung des zu implementierenden Operators die Verarbeitung des Hinzufügens eines Werts (, World!
) Zum Wert der Eingabedatei @ Update
ist /dsl/operators.html#update-operator) Implementiert den Operator.
Weitere Informationen zu Betreibern finden Sie in der Asakusa DSL-Betreiberreferenz (http://docs.asakusafw.com/latest/release/ja/html/dsl/operators.html).
Die Klasse com.example.modelgen.dmdl.model.Input
ist eine automatisch aus der DMDL generierte Klasse.
C:¥asakusa-develop¥helloworld¥src¥main¥java
java:com.example.operator.HelloWorldOperator
package com.example.operator;
import com.asakusafw.vocabulary.operator.Update;
import com.example.modelgen.dmdl.model.Input;
public abstract class HelloWorldOperator {
@Update
public void appendMessage(Input input) {
input.setValueAsString(input.getValueAsString() + ", World!");
}
}
Erstellen Sie eine Eingabedefinitionsklasse und eine Ausgabedefinitionsklasse. Es erbt und implementiert "AbstractInputCsvInputDescription" bzw. "AbstractOutputCsvOutputDescription". Diese Klassen werden auch automatisch aus DMDL generiert. Weitere Informationen zu Datei-E / A-Klassen finden Sie im Direct I / O-Benutzerhandbuch - Datei-E / A (http://docs.asakusafw.com/latest/release/ja/html/directio/user-guide.html#id41) ) Kann erwähnt werden.
java:com.example.jobflow.InputFile
package com.example.jobflow;
import com.example.modelgen.dmdl.csv.AbstractInputCsvInputDescription;
public class InputFile extends AbstractInputCsvInputDescription {
@Override
public String getBasePath() {
return "input";
}
@Override
public String getResourcePattern() {
return "hello.csv";
}
}
java:com.example.jobflow.OutputFile
package com.example.jobflow;
import com.example.modelgen.dmdl.csv.AbstractOutputCsvOutputDescription;
public class OutputFile extends AbstractOutputCsvOutputDescription {
@Override
public String getBasePath() {
return "output";
}
@Override
public String getResourcePattern() {
return "helloworld.csv";
}
}
In der folgenden Jobflussklasse wird die Eingabedefinitionsklasse (InputFile
) in Import
des Datenflusses im Konstruktor und die Ausgabedefinitionsklasse ( OutputFile
) in Export
festgelegt.
Beschreiben Sie den Datenfluss in der Beschreibungsmethode. Im Beispiel ist das Eingabemodell ("Eingabe") mit dem Aktualisierungsoperator ("appendMessage") verbunden und das Ergebnis wird an das Ausgabemodell ("Ausgabe") ausgegeben.
Weitere Informationen finden Sie unter Asakusa DSL-Benutzerhandbuch - Flow DSL.
java:com.example.jobflow.HelloWorldJob
package com.example.jobflow;
import com.asakusafw.vocabulary.flow.Export;
import com.asakusafw.vocabulary.flow.FlowDescription;
import com.asakusafw.vocabulary.flow.Import;
import com.asakusafw.vocabulary.flow.In;
import com.asakusafw.vocabulary.flow.JobFlow;
import com.asakusafw.vocabulary.flow.Out;
import com.asakusafw.vocabulary.flow.util.CoreOperatorFactory;
import com.example.modelgen.dmdl.model.Input;
import com.example.modelgen.dmdl.model.Output;
import com.example.operator.HelloWorldOperatorFactory;
import com.example.operator.HelloWorldOperatorFactory.AppendMessage;
@JobFlow(name = "helloWorldJob")
public class HelloWorldJob extends FlowDescription {
final In<Input> input;
final Out<Output> output;
public HelloWorldJob(
@Import(name = "input", description = InputFile.class)
In<Input> input,
@Export(name = "output", description = OutputFile.class)
Out<Output> output) {
this.input = input;
this.output = output;
}
@Override
protected void describe() {
CoreOperatorFactory core = new CoreOperatorFactory();
HelloWorldOperatorFactory operator = new HelloWorldOperatorFactory();
AppendMessage appendedMessage = operator.appendMessage(input);
output.add(core.restructure(appendedMessage.out, Output.class));
}
}
Die folgende Stapelklasse führt nur die Jobflussklasse (HelloWorldJob
) aus.
Informationen zu Stapelklassen finden Sie unter Asakusa DSL-Benutzerhandbuch - Stapel-DSL. ..
java:com.example.batch.HelloWorldBatch
package com.example.batch;
import com.asakusafw.vocabulary.batch.Batch;
import com.asakusafw.vocabulary.batch.BatchDescription;
import com.example.jobflow.HelloWorldJob;
@Batch(name = "example.helloWorld")
public class HelloWorldBatch extends BatchDescription {
@Override
protected void describe() {
run(HelloWorldJob.class).soon();
}
}
Bis zu diesem Punkt denke ich, dass der Untergebene des Quellordners die folgende Struktur hat.
Generieren Sie mit dem folgenden Gradle-Befehl eine Beispielarchivdatei für die Anwendungsbereitstellung. (Unter dem Projektordner ausführen)
C:¥asakusa-develop¥helloworld>gradle assemble
Wenn die Ausführung erfolgreich ist, wird die Bereitstellungsarchivdatei im Ordner "build" erstellt.
C:¥asakusa-develop¥helloworld¥build¥asakusafw-helloworld.tar.gz
Da wir diesmal unter Windows bereitstellen (für den kommerziellen Gebrauch werden wir in einer Hadoop- oder M3BP-Umgebung bereitstellen ...), fügen Sie der Windows-Umgebungsvariablen "ASAKUSA_HOME" hinzu.
Variable | Wert |
---|---|
ASAKUSA_HOME | C:¥asakusa-develop¥asakusa |
Extrahieren Sie die generierte Bereitstellungsarchivdatei (asakusafw-helloworld.tar.gz
) unter ASAKUSA_HOME.
Führen Sie den folgenden Befehl unter ASAKUSA_HOME aus.
C:¥asakusa-develop¥asakusa>java -jar tools¥bin¥setup.jar
setup: C:¥asakusa-develop¥asakusa
framework version: 0.10.0
installation path is not a POSIX file system: C:¥asakusa-develop¥asakusa
Stellen Sie die Batch-Eingabedatei im folgenden Ordner bereit. Standardmäßig wird es im Ordner "target \ testing \ directio" unter dem Basisverzeichnis des Benutzers bereitgestellt.
Stellen Sie sicher, dass es mit dem in der Eingabedefinitionsklasse festgelegten basePath
(Rückgabewert der getBasePath
-Methode) und resourcePattern
(Rückgabewert der getResourcePattern
-Methode) übereinstimmt.
C:¥...<Benutzer-Home-Verzeichnis>...¥target¥testing¥directio¥input¥
hello.csv
Hello
In diesem Beispiel wird Asakusa CLI verwendet (für kommerzielle Zwecke [YAESS](http: // docs) Es wird unter .asakusafw.com / latest / release / ja / html / yaess / index.html) ausgeführt und fügt der Windows-Umgebungsvariablen PATH den folgenden Wert hinzu.
%ASAKUSA_HOME%¥bin
Führen Sie die Stapelanwendung mit dem folgenden Befehl aus.
asakusa run vanilla.example.helloWorld
Stellen Sie sicher, dass die folgenden Dateien als Ausführungsergebnis ausgegeben werden.
C:¥...<Benutzer-Home-Verzeichnis>...¥target¥testing¥directio¥output¥
helloworld.csv
"Hello, World!"
Die Version von Asakusa Framework wurde ebenfalls zu 0.10.0 und der Schwellenwert für Entwicklung und Betrieb wurde gesenkt. Deshalb habe ich beschlossen, sie zu diesem Zeitpunkt zusammenzufassen und diesen Artikel zu schreiben. Wie war es? Es gibt viele Dinge, die ich noch nicht geschrieben habe, aber ich hoffe, sie im nächsten Artikel vorstellen zu können.
Recommended Posts