Kinesis-Datenströme ohne Java-Erfahrung (3.1)

Tutorial: Echtzeitanalyse von Bestandsdaten mithilfe von Kinesis-Datenströmen Ich werde.

Der Zweck besteht darin, sich an die Verwendung von KCL (Kinesis Consumer Library) zu gewöhnen. Da Sie Java ernsthaft berühren werden, ist der Vorbereitungsteil auch vorsichtig ... Wenn Sie darüber nachdenken, ist es ein Teil, der nur mit der Vorbereitung endet

(Ich denke, es ist ein Merkmal von Java, dass die Vorbereitung schwierig ist ...)

Vorbereitung

Die Ausführungsumgebung wird als mac angenommen.

Editor-Installation

Installierte die Community Edition von InteliJ IDEA (weil ich an PyCharm gewöhnt war). Doppelklicken Sie auf den heruntergeladenen, ziehen Sie ihn per Drag & Drop in den Anwendungsordner im geöffneten Fenster.

Java, Maven Installation

Installieren Sie Homebrew im Voraus

brew cask install java  #Sie werden aufgefordert, das Passwort einzugeben. Geben Sie es also ein

#Bestätigung
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)

Überprüfen Sie die Java-Version (derzeit 11 Muster)

PFAD-Einstellung

Wird unten in bash_profile beschrieben

~/.bash_profile


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

Führen Sie nach dem Schreiben source ~ / .bash_profile aus. (Es scheint, dass Sie die Java-Version wechseln können, indem Sie den Wert von -v verschieben.)

Maven Installation

brew install maven

#Bestätigung
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"

Tutorial Quellcode

Es gibt Code in Lernen von Amazon Kinesis Development ... aber ehrlich gesagt wurde er nicht viel aktualisiert.

--master: Richtige Antwort mit allem Code --learning-module-1: Zum Erlernen des Ausfüllens während des Betrachtens des Tutorials Es scheint, dass die Zweigstruktur gesagt wird, aber es scheint, dass die Updates, die mit dem API-Update einhergehen, nur im Hauptzweig wiedergegeben werden. Fahren Sie daher basierend auf dem Hauptzweig fort.

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

Danach wird es in ein geeignetes Verzeichnis verschoben.

Ein Projekt erstellen

Grundeinstellung

Starten Sie IntelliJ

Dann wird das Initialisierungsskript automatisch ausgeführt. Wenn Sie fertig sind, sollten Sie ein Verzeichnis wie das folgende haben, einschließlich der POM-Datei.

image.png

Ich denke auch, dass das Popup ** [Maven-Projekte müssen importiert werden] ** unten rechts angezeigt wird. Wählen Sie also "Auto-Import aktivieren".

Bearbeiten Sie pom.xml

In maven beschreibt pom.xml die erforderlichen Bibliotheken und Erstellungsverfahren. Über die Bibliothek

<dependencies>
  <dependency>
Bibliothek
  </dependency>
  <dependency>
Bibliothek
  </dependency>
     ...
</dependencies>

Es ist ein Formular zum Hinzufügen. (Wenn der automatische Import aktiviert ist, führt IntelliJ eine gute DL aus.)

Die für die Bibliothek für dieses Lernprogramm erforderlichen Bibliotheken

(Ergänzungen, die im Dokument nicht beschrieben sind, ein Schritt nach unten ist eine Abhängigkeit) Suchen Sie unter https://mvnrepository.com nach diesen und fügen Sie die herauskommende XML-Datei ein. Die neueste Version von KCL ist v2, aber dieses Tutorial scheint bei v1 anzuhalten, deshalb habe ich v1.9.3 gewählt. Verwenden des SDK mit Apache Maven

Es ist nur nervig. (Ich frage mich, ob es in Java so etwas wie Pip oder Garn gibt ...)

Platzierung und Änderung des Quellcodes

Kopieren Sie aus dem geklonten Code src / main / ... / stocktrades und darunter in dasselbe Verzeichnis wie App.java, das von IntelliJ erstellt wurde. Wenn die groupId "com.amazonaws.services.kinesis.samples" lautet, sollte sie dieselbe Struktur haben. Daher ist es in Ordnung, wenn Sie die Struktur beibehalten.

Wenn Sie hier in der Menüleiste ** [Build] **> ** [Build Project] ** auswählen, wird in StockTradeRecordProcesser: 28 eine Fehlermeldung angezeigt. Weil es an der Änderung von IF liegt

StockTradeRecordProcesser.java


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

Korrigieren Sie die Zeile, die den Fehler ausgibt. Ich frage mich, ob es weiterhin Warnungen wie "com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker ist veraltet" geben wird, aber dies muss KCL beim Upgrade auf v2 ändern. Es ist wie

Wenn Sie die groupId in etwas anderes ändern, können Sie den auftretenden Fehler durch Wiederholen von Build ersetzen. Klicken Sie für IntelliJ auf die Stelle, an der die rote Linie gezeichnet ist.> Eine rote Miniaturbirne wird angezeigt. Klicken Sie also auf => Paketnamen auf ... setzen. Diese wird automatisch behoben.

Ausführungsbestätigung

Nachdem Sie den Berechtigungsnachweis unter "~ / .aws" platziert haben

Seite schreiben

Überprüfen Sie die Funktion, die Dummy-Aktienhandelsdaten in die angegebene Kinesis schreibt. Wählen Sie auf IntelliJ "stocktrades / writer / StockTradesWriter.java" aus, wählen Sie die Menüleiste ** [Ausführen] **> ** [Ausführen ...] ** und wählen Sie im angezeigten Popup "StockTradesWriter" aus. Wählen. Dann

Usage: StockTradesWriter <stream name> <region>

Wird rauskommen. Die Ursache ist, dass nichts an das Argument übergeben wird, also noch einmal Menüleiste ** [Ausführen] **> ** [Konfigurationen bearbeiten] **> ** [StockTradesWriter] **> ** Geben Sie {erstellter Kinesis-Name} {Region} in [Programmargumente] ** ein Nach OK] **

image.png

** [Run] ** der Stock Trades Writer nochmal und

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

Wenn ein solches Protokoll fließt, ist es ein Erfolg.

Leseseite

Lesen Sie den Datensatz von Kinesis und überprüfen Sie die Funktion, mit der Transaktionsinformationen zusammengefasst werden.

Für stocktrades / processor / StockTradesProcessor.java, ** [Run] ** sowie den Reader

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

Wird rauskommen. Sie können für streamname und region dieselben Werte wie auf der Schreibseite festlegen, aber seien Sie vorsichtig, da dies der Anwendungsname ist, der ** der Tabellenname von DynamoDB ist, der von KCL zum Verwalten des Status ** verwendet wird. Wenn Sie es nicht haben, wird es ohne Erlaubnis erstellt, daher können Sie den gleichen Namen wie "Streamname" verwenden. Wenn Sie es erneut wie die Schreibseite und ** [Ausführen] ** einstellen

INFO: Initializing record processor for shard: shardId-000000000057

Wenn eine Anzeige wie diese angezeigt wird, ist sie vorerst ein Erfolg.

Build-Einstellungen hinzufügen

Um Writer und Processor unabhängig voneinander auszuführen, kompilieren Sie sie separat, damit sie unabhängig voneinander ausgeführt werden können. Fügen Sie wie unten gezeigt zu pom.xml hinzu.

pom.xml


<project>
  ...
  <build>
    <pluginManagement><!--Verwalten Sie hier Versionen-->
        ...
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <!--Erstellen Sie ein Paket (jar), das Ausführungsklassen zusammenfasst-->
        <!-- assembly-Das Plugin erstellt eine einzelne ausführbare JAR-Datei mit Abhängigkeitsbibliotheken-->
        <artifactId>maven-assembly-plugin</artifactId>
        ...
        <executions>
          <execution>
            <id>build-writer</id>
            <phase>package</phase><!--Wird gleichzeitig generiert, wenn das MVN-Paket aufgerufen wird-->
            <goals>
              <goal>single</goal><!--Grundziel des Assembly Plugins-->
            </goals>
            <configuration>
              <archive>
                <manifest>
                  <!--Haupt dieses Glases()Geben Sie die zu seinde Datei an-->
                  <mainClass>com.amazonaws.services.kinesis.samples.stocktrades.writer.StockTradesWriter</mainClass>
                </manifest>
              </archive>
              <descriptorRefs>
                <!--Option zum Kombinieren von Projekten und extern abhängigen Bibliotheken in einem Glas-->
                <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>

Wählen Sie nach dem Hinzufügen ** [Projektname] **> ** [Lebenszyklus] **> ** [Paket] ** auf der Registerkarte ** [Maven] ** rechts von IntelliJ aus und klicken Sie auf die Markierung ▶ to, um das Ziel festzulegen `Direkt unten

Wird generiert.

Der Rest entspricht der vorherigen Funktionsprüfung mit IntelliJ

java -jar StockTradesWriter.jar-jar-with-dependencies.jar {streamname} {region}
#In einer anderen Registerkarte
java -jar StockTradesProcessor.jar-jar-with-dependencies.jar {appname} {streamname} {region}

Ich denke, dass Sie den Betrieb überprüfen können, indem Sie ihn am Terminal treffen.


Bisher werde ich etwas über jede Klasse und Methode lernen, die ausgefüllt werden sollte.

Recommended Posts

Kinesis-Datenströme ohne Java-Erfahrung (1)
Kinesis-Datenströme ohne Java-Erfahrung (3.1)
Kinesis-Datenströme ohne Java-Erfahrung (3.2)
Datenverarbeitung mit der Stream-API von Java 8
Verwenden Sie den PostgreSQL-Datentyp (jsonb) aus Java
Informationen zu CLDR-Gebietsschemadaten, die standardmäßig in Java 9 aktiviert sind
Rufen Sie Java von JRuby aus auf
[Java] Datentyp ①-Basistyp
Greifen Sie über Java auf API.AI zu
Von Java zu Ruby !!
[Java] Hauptdatentypen
Java-Grunddatentypen
Java, das Daten von Android zu Jetson Nanos ROS überspringt
Holen Sie sich Wettervorhersagen von Watson Weather Company Data mit einfachem Java
CData Software Hands-on (Abrufen von Kintone-Daten aus der Java-Konsolenanwendung)
CData Software Hands-on (Twitter-Daten von der Java-Konsolenanwendung abrufen)