Flux de données Kinesis à partir de zéro expérience Java (3.1)

Tutoriel: Analyse en temps réel des données boursières à l'aide de Kinesis Data Streams Je vais.

Le but est de s'habituer à l'utilisation de KCL (Kinesis Consumer Library). Puisque vous toucherez sérieusement à Java, la partie de préparation est également soigneusement ...

(Je pense que c'est une caractéristique de Java que la préparation est difficile ...)

Préparation

L'environnement d'exécution est supposé être mac.

Installation de l'éditeur

Installez l'édition communautaire de InteliJ IDEA (car j'étais habitué à PyCharm). Double-cliquez sur celui téléchargé, faites-le glisser et déposez-le dans le dossier de l'application dans la fenêtre ouverte,

Installation de Java, Maven

Installez Homebrew à l'avance

brew cask install java  #Il vous sera demandé de saisir le mot de passe, alors saisissez-le

#Vérification
java -version
> openjdk version "11.0.2" 2019-01-15
> OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
> OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

Vérifiez la version Java (actuellement 11 modèles)

Paramètre PATH

Décrit ci-dessous dans bash_profile

~/.bash_profile


export JAVA_HOME=`/usr/libexec/java_home -v "11"`
PATH=${JAVA_HOME}/bin:${PATH}

Après l'écriture, exécutez source ~ / .bash_profile. (Il semble que vous puissiez changer la version Java en décalant la valeur de -v)

installation de maven

brew install maven

#Vérification
mvn -version
> Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T03:41:47+09:00)
> Maven home: /usr/local/Cellar/maven/3.6.0/libexec
> Java version: 11.0.2, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home
> Default locale: en_JP, platform encoding: UTF-8
> OS name: "mac os x", version: "10.14.2", arch: "x86_64", family: "mac"

Code source du didacticiel

Il y a du code dans Learning Amazon Kinesis Development ... mais honnêtement, il n'a pas été beaucoup mis à jour.

--master: réponse correcte avec tout le code --learning-module-1: Pour apprendre à remplir tout en regardant le tutoriel Il semble que la structure de la branche soit dite, mais il semble que les mises à jour accompagnant la mise à jour de l'API ne soient reflétées que dans la branche principale. Par conséquent, procédez en vous basant sur la branche principale.

git clone https://github.com/aws-samples/amazon-kinesis-learning.git

Après cela, il se déplacera vers un répertoire approprié.

Créer un projet

Réglage initial

Lancez IntelliJ

Ensuite, le script d'initialisation s'exécutera automatiquement. Une fois terminé, vous devriez avoir un répertoire comme celui ci-dessous, y compris le fichier pom.

image.png

De plus, je pense qu'il y a un pop-up qui dit ** [Les projets Maven doivent être importés] ** en bas à droite, alors sélectionnez ʻActiver l'importation automatique`.

Modifier pom.xml

Dans maven, pom.xml décrit les bibliothèques requises et les procédures de construction. À propos de la bibliothèque

<dependencies>
  <dependency>
Bibliothèque
  </dependency>
  <dependency>
Bibliothèque
  </dependency>
     ...
</dependencies>

C'est un formulaire à ajouter. (Si l'importation automatique est activée, IntelliJ fera un bon DL)

Les bibliothèques requises pour la bibliothèque pour ce tutoriel

(Les ajouts qui ne sont pas décrits dans le document et ceux qui sont une étape vers le bas sont des dépendances Recherchez-les sur https://mvnrepository.com et collez le xml qui est sorti. La dernière version de KCL est la v2, mais ce tutoriel semble s'arrêter à la v1, j'ai donc choisi la v1.9.3. Utilisation du SDK avec Apache Maven

C'est juste ennuyeux. (Je me demande s'il y a quelque chose comme pip ou yarn en Java ...)

Placement et modification du code source

À partir du code cloné, copiez src / main / ... / stocktrades et ci-dessous dans le même répertoire que App.java créé par IntelliJ. Si le groupId est com.amazonaws.services.kinesis.samples, il doit avoir la même structure, donc ce n'est pas grave si vous gardez la structure.

Si vous sélectionnez ** [Build] **> ** [Build Project] ** dans la barre de menu, vous obtiendrez une erreur dans StockTradeRecordProcesser: 28. Parce que c'est dû au changement de IF

StockTradeRecordProcesser.java


import com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShutdownReason;

Corrigez la ligne qui donne l'erreur. Je me demande s'il continuera à y avoir des avertissements tels que com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker est obsolète, mais c'est ce que KCL doit changer lors de la mise à niveau vers la v2, C'est comme

En outre, si vous modifiez le groupId en autre chose, vous pouvez remplacer l'erreur qui se produit en répétant Build. Pour IntelliJ, cliquez là où la ligne rouge est dessinée> une ampoule miniature rouge apparaîtra, alors cliquez sur => Définir le nom du paquet sur ... et il sera corrigé automatiquement.

Confirmation d'exécution

Après avoir placé les informations d'identification sous ~ / .aws

Côté écriture

Vérifiez la fonction qui écrit les données de négociation boursières factices dans le Kinesis spécifié. Sélectionnez stocktrades / writer / StockTradesWriter.java sur IntelliJ, sélectionnez la barre de menu ** [Exécuter] **> ** [Exécuter ...] **, et sélectionnez StockTradesWriter dans la fenêtre contextuelle qui apparaît. Sélectionner. Puis

Usage: StockTradesWriter <stream name> <region>

Sortira. La cause est que rien n'est passé à l'argument, donc encore Barre de menus ** [Exécuter] **> ** [Modifier les configurations] **> ** [StockTradesWriter] **> ** Entrez {created Kinesis name} {region} dans [Program Arguments] ** Après ok] **

image.png

** [Exécutez] ** le Stock Trades Writer à nouveau et

INFO: Putting trade: ID 1: BUY 2383 shares of DIS for $114.35
Feb 11, 2019 9:45:47 PM com.amazonaws.services.kinesis.samples.stocktrades.writer.StockTradesWriter sendStockTrade
INFO: Putting trade: ID 2: SELL 1022 shares of JNJ for $93.94
Feb 11, 2019 9:45:47 PM com.amazonaws.services.kinesis.samples.stocktrades.writer.StockTradesWriter sendStockTrade
INFO: Putting trade: ID 3: BUY 7069 shares of WMT for $97.06
Feb 11, 2019 9:45:48 PM com.amazonaws.services.kinesis.samples.stocktrades.writer.StockTradesWriter sendStockTrade
INFO: Putting trade: ID 4: BUY 5939 shares of GOOG for $437.30

Si un journal comme celui-ci coule, c'est un succès.

Côté lecture

Lisez l'enregistrement de Kinesis et vérifiez la fonction qui regroupe les informations de transaction.

Pour stocktrades / processor / StockTradesProcessor.java, ** [Run] ** ainsi que le lecteur

Usage: StockTradesProcessor <application name> <stream name> <region>

Sortira. Vous pouvez définir les mêmes valeurs pour streamname et region que du côté écriture, mais soyez prudent car il s'agit du nom de l'application, qui est ** le nom de table de DynamoDB utilisé par KCL pour gérer l'état **. Si vous ne l'avez pas, il sera créé sans autorisation, donc je pense que vous pouvez utiliser le même nom que streamname. Si vous le définissez à nouveau comme le côté écriture et ** [Exécuter] **

INFO: Initializing record processor for shard: shardId-000000000057

Si un affichage comme celui-ci apparaît, c'est un succès pour le moment.

Ajouter des paramètres de construction

Afin d'exécuter Writer et Processor indépendamment, compilez-les séparément afin qu'ils puissent fonctionner indépendamment. Ajoutez à pom.xml comme indiqué ci-dessous.

pom.xml


<project>
  ...
  <build>
    <pluginManagement><!--Gérez les versions ici-->
        ...
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <!--Créer un package (jar) qui résume les classes d'exécution-->
        <!-- assembly-plugin crée un fichier jar exécutable unique comprenant des bibliothèques de dépendances-->
        <artifactId>maven-assembly-plugin</artifactId>
        ...
        <executions>
          <execution>
            <id>build-writer</id>
            <phase>package</phase><!--Généré en même temps lors de la frappe du package mvn-->
            <goals>
              <goal>single</goal><!--objectif de base du plugin d'assemblage-->
            </goals>
            <configuration>
              <archive>
                <manifest>
                  <!--Principal de ce pot()Spécifiez le fichier à-->
                  <mainClass>com.amazonaws.services.kinesis.samples.stocktrades.writer.StockTradesWriter</mainClass>
                </manifest>
              </archive>
              <descriptorRefs>
                <!--Possibilité de combiner des projets et des bibliothèques externes en un seul pot-->
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
              <finalName>StockTradesWriter</finalName>
            </configuration>
          </execution>
          <execution>
            <id>build-processor</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <archive>
                <manifest>
                  <mainClass>com.amazonaws.services.kinesis.samples.stocktrades.processor.StockTradesProcessor</mainClass>
                </manifest>
              </archive>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
              <finalName>StockTradesProcessor</finalName>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Après l'ajout, sélectionnez ** [Nom du projet] **> ** [Cycle de vie] **> ** [package] ** dans l'onglet ** [Maven] ** à droite d'IntelliJ, puis cliquez sur la marque ▶ ️ pour cible Directement en dessous

Est généré.

Le reste est identique à la vérification des opérations avec IntelliJ plus tôt

java -jar StockTradesWriter.jar-jar-with-dependencies.jar {streamname} {region}
#Dans un autre onglet
java -jar StockTradesProcessor.jar-jar-with-dependencies.jar {appname} {streamname} {region}

Je pense que vous pouvez vérifier le fonctionnement en le frappant au terminal.


Jusqu'à présent, je vais en apprendre davantage sur chaque classe et méthode qui auraient dû être remplies.

Recommended Posts

Flux de données Kinesis à partir de zéro expérience Java (1)
Flux de données Kinesis à partir de zéro expérience Java (3.1)
Flux de données Kinesis à partir de zéro expérience Java (3.2)
Traitement des données à l'aide de l'API de flux de Java 8
Utiliser le type de données PostgreSQL (jsonb) à partir de Java
À propos des données locales CLDR activées par défaut à partir de Java 9
Appeler Java depuis JRuby
[Java] Type de données ①-Type de base
Accédez à API.AI depuis Java
De Java à Ruby !!
[Java] Principaux types de données
Types de données de base Java
Java qui ignore les données d'Android vers le ROS de Jetson Nano
Obtenez les prévisions météorologiques de Watson Weather Company Data avec Java simple
Logiciel pratique CData (obtenir des données kintone à partir de l'application console Java)
Logiciel pratique CData (obtenir des données Twitter à partir de l'application console Java)