Cet article explique comment créer une application batch simple avec le framework Java batch Asakusa Framework. Officiellement, il existe Asakusa Framework Tutorial, mais dans cet article, vous pouvez facilement développer Asakusa. Le but est de vous donner un aperçu de l'opération et de vous en donner une idée.
Nous avons confirmé l'opération dans l'environnement suivant.
(Avant d'essayer les étapes ci-dessous, veuillez installer le JDK et Gradle.)
L'exemple d'application introduit est une application simple qui lit un fichier d'entrée (le contenu est uniquement «Hello»), met à jour le contenu en «Hello, World!», Et génère le fichier. Le format DFD est le suivant.
Créez le dossier suivant et utilisez-le comme dossier de projet pour l'exemple d'application.
C:¥asakusa-develop¥helloworld
Créez un fichier de script de construction Gradle (build.gradle
) sous le dossier de projet créé.
Cet exemple d'application est configuré comme Asakusa Vanilla afin de pouvoir être exécuté sur une JVM Windows.
Il est également possible de générer des applications pour Hadoop et M3BP en modifiant les paramètres ici.
Pour plus d'informations sur le script Gradle que vous avez créé, consultez la référence du plug-in Asakusa Gradle (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
}
}
La commande Gradle suivante génère un fichier de configuration qui peut être importé en tant que projet Eclipse. (Exécuter sous le dossier du projet)
C:¥asakusa-develop¥helloworld>gradle eclipse
Si vous souhaitez utiliser IntelliJ IDEA, veuillez vous référer au site officiel Utilisation d'IntelliJ IDEA. Si vous utilisez Eclipse, pensez à utiliser Shafu (plug-in Eclipse pour le développement Asakusa).
DMDL (Data Model Definition Language) Créez un fichier script pour définir le modèle de données.
Dans le script ci-dessous, les modèles d'entrée et de sortie sont respectivement nommés ʻinput et ʻoutput
, et [Direct I / O CSV](http://docs.asakusafw.com/latest/release/ja/html/directio /csv-format.html) est défini pour effectuer l'entrée et la sortie.
Créez le dossier suivant et créez un fichier de script (models.dmdl
) en dessous.
C:¥asakusa-develop¥helloworld¥src¥main¥dmdl
models.dmdl
@directio.csv
input = {
value : TEXT;
};
@directio.csv
output = {
value : TEXT;
};
Lorsque vous exécutez la commande Gradle suivante, une classe de modèle de données pouvant être utilisée par Asakusa Framework est générée en fonction du fichier de script créé. (Exécuter sous le dossier du projet)
C:¥asakusa-develop¥helloworld>gradle compileDMDL
Créez le dossier suivant et créez la classe com.example.operator.HelloWorldOperator
en dessous.
Puisque le traitement de l'opérateur à implémenter est le traitement de l'ajout d'une valeur (, World!
) A la valeur du fichier d'entrée, [@ Update
](http://docs.asakusafw.com/latest/release/ja/html /dsl/operators.html#update-operator) Implémente l'opérateur.
Pour plus d'informations sur les opérateurs, consultez la référence des opérateurs DSL Asakusa (http://docs.asakusafw.com/latest/release/ja/html/dsl/operators.html).
La classe com.example.modelgen.dmdl.model.Input
est une classe générée automatiquement à partir du DMDL.
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!");
}
}
Créez une classe de définition d'entrée et une classe de définition de sortie. Il hérite et implémente respectivement ʻAbstractInputCsvInputDescription et ʻAbstractOutputCsvOutputDescription
. Ces classes sont également générées automatiquement à partir de DMDL.
Pour plus d'informations sur les classes d'E / S de fichier, voir Direct I / O User Guide-File I / O (http://docs.asakusafw.com/latest/release/ja/html/directio/user-guide.html#id41 ) Peut être mentionné.
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";
}
}
Dans la classe de flux de travaux suivante, la classe de définition d'entrée (ʻInputFile) est définie dans ʻImport
du flux de données dans le constructeur, et la classe de définition de sortie (ʻOutputFile) est définie dans ʻExport
.
Décrivez le flux de données dans la méthode de description. Dans l'exemple, le modèle d'entrée (ʻinput) est connecté à l'opérateur de mise à jour (ʻappendMessage
) et le résultat est sorti vers le modèle de sortie (ʻoutput`).
Pour plus d'informations, reportez-vous au Guide de l'utilisateur Asakusa DSL --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));
}
}
La classe de traitement par lots suivante exécute uniquement la classe de flux de travaux (HelloWorldJob
).
Pour plus d'informations sur les classes de lots, reportez-vous au Guide de l'utilisateur Asakusa DSL-Batch 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();
}
}
Jusqu'à présent, je pense que le subordonné du dossier source a la structure suivante.
Générez un exemple de fichier d'archive de déploiement d'application avec la commande Gradle suivante. (Exécuter sous le dossier du projet)
C:¥asakusa-develop¥helloworld>gradle assemble
Si l'exécution réussit, le fichier d'archive de déploiement sera créé dans le dossier build
.
C:¥asakusa-develop¥helloworld¥build¥asakusafw-helloworld.tar.gz
Puisque nous déployons sur Windows cette fois (pour un usage commercial, nous déploierons sur l'environnement Hadoop ou M3BP ...) Ajoutez ʻASAKUSA_HOME` à la variable d'environnement Windows.
variable | valeur |
---|---|
ASAKUSA_HOME | C:¥asakusa-develop¥asakusa |
Extrayez le fichier d'archive de déploiement généré (ʻasakusafw-helloworld.tar.gz`) sous ASAKUSA_HOME. Exécutez la commande suivante sous ASAKUSA_HOME.
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
Déployez le fichier d'entrée par lots dans le dossier suivant. Par défaut, il est déployé sous le dossier target \ testing \ directio
sous le répertoire de base de l'utilisateur.
Assurez-vous qu'il correspond à basePath
(valeur de retour de la méthode getBasePath
) et resourcePattern
(valeur de retour de la méthode getResourcePattern
) définies dans la classe de définition d'entrée.
C:¥...<Répertoire de base de l'utilisateur>...¥target¥testing¥directio¥input¥
hello.csv
Hello
Dans cet exemple, Asakusa CLI est utilisé (à des fins commerciales, [YAESS](http: // docs) Il sera exécuté sur .asakusafw.com / latest / release / ja / html / yaess / index.html)) et ajoutera la valeur suivante à la variable d'environnement Windows PATH.
%ASAKUSA_HOME%¥bin
Exécutez l'application par lots avec la commande suivante.
asakusa run vanilla.example.helloWorld
Confirmez que les fichiers suivants sont générés comme résultat de l'exécution.
C:¥...<Répertoire de base de l'utilisateur>...¥target¥testing¥directio¥output¥
helloworld.csv
"Hello, World!"
La version d'Asakusa Framework est également devenue 0.10.0, et le seuil de développement et d'exploitation a été abaissé, j'ai donc décidé de le résumer à ce moment et j'ai écrit cet article. Il y a beaucoup de choses que je n'ai pas encore écrites, mais j'espère les présenter dans le prochain article.
Recommended Posts