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 ...)
Die Ausführungsumgebung wird als mac angenommen.
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.
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)
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.)
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"
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.
Starten Sie IntelliJ
com.amazonaws.services.kinesis.samples Als
einstellen.
** [Artefakt-ID] **: Projektname (z. B. kinesis-stocktrade-tutorial
)> ** [Weiter] **/ usr / local / Cellar / maven / 3.6.0 / libexec
)Dann wird das Initialisierungsskript automatisch ausgeführt. Wenn Sie fertig sind, sollten Sie ein Verzeichnis wie das folgende haben, einschließlich der POM-Datei.
Ich denke auch, dass das Popup ** [Maven-Projekte müssen importiert werden] ** unten rechts angezeigt wird. Wählen Sie also "Auto-Import aktivieren".
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 ...)
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.
Nachdem Sie den Berechtigungsnachweis unter "~ / .aws" platziert haben
Ü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] **
** [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.
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.
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