Webinar: Building Your First Apache Apex Application - YouTube
OS
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
Java
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
$ javac -version
javac 1.8.0_131
git
$ git version
git version 2.7.4
Maven
$ mvn --version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: ISO-8859-1
OS name: "linux", version: "4.4.0-57-generic", arch: "amd64", family: "unix"
Hadoop
$ hadoop version
Hadoop 2.8.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 91f2b7a13d1e97be65db92ddabc627cc29ac0009
Compiled by jdu on 2017-03-17T04:12Z
Compiled with protoc 2.5.0
From source with checksum 60125541c2b3e266cbf3becc5bda666
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.8.0.jar
git clone
Klonen Sie zunächst das erforderliche Repository. Es gibt drei zu verwenden: "Apex-Core", "Apex-Malhar" und "DataTorrent / Beispiele". Erstellen Sie ein Apex-Verzeichnis in Ihrem Zuhause und arbeiten Sie dort.
~
$ mkdir apex
$ cd apex
~/apex
$ git clone [email protected]:apache/apex-core.git
$ git clone [email protected]:apache/apex-malhar.git
$ git clone [email protected]:DataTorrent/examples.git
Erstellen und installieren Sie "Apex-Core" und "Apex-Malhar" auf Maven. Überspringen Sie laufende Tests mit -DskipTests
und es wird (etwas) schneller abgeschlossen. Es braucht Zeit, also warten Sie eine Weile: Kaffee:
~/apex
$ ls
apex-core apex-malhar examples
$ cd apex-core
~/apex/apex-core
$ mvn clean install -DskipTests
~/apex
$ cd apex-malhar
~/apex/apex-malhar
$ mvn clean install -DskipTests
Halten Sie die Tools bereit, während Sie auf den Abschluss des Builds warten. Es gibt ein Skript namens "Aliase" in "DataTorrent / examples". Laden Sie es also und stellen Sie es zur Verfügung.
~/apex
$ source examples/tutorials/topnwords/scripts/aliases
Der Inhalt von "Aliasen" ist wie folgt.
~/apex/examples/tutorials/topnwords/scripts/aliases
# bash aliases and functions useful for working on input and out directories
#
# input and output directories
in=/tmp/test/input-dir out=/tmp/test/output-dir
# list files in input directory
alias ls-input="hdfs dfs -ls $in"
# list files in output directory
alias ls-output="hdfs dfs -ls $out"
# clean input directory
alias clean-input="hdfs dfs -rm $in/*"
# clean output directory
alias clean-output="hdfs dfs -rm $out/*"
# convenient alias to run dtcli from code repository
alias dtcli3="$HOME/src/incubator-apex-core/engine/src/main/scripts/dtcli"
# copy local file (argument) to input directory
function put-file ( ) {
hdfs dfs -put "$1" "$in"
}
# make local copy of output file (argument) from output directory
function get-file ( ) {
hdfs dfs -get "$out/$1" "$1".out
}
Machen Sie es einfach zu kopieren und rufen Sie "newapp" zu "~ / apex" auf.
~/apex
$ cp examples/tutorials/topnwords/scripts/newapp .
Es ist nur ein "mvn" -Befehl, und Sie können "myapexapp" nach Bedarf neu schreiben.
~/apex/examples/tutorials/topnwords/scripts/newapp
#!/bin/bash
# script to create a new project
# change project name and archetype version as needed
name=myapexapp
version=3.3.0-incubating
mvn -B archetype:generate \
-DarchetypeGroupId=org.apache.apex \
-DarchetypeArtifactId=apex-app-archetype \
-DarchetypeVersion=$version \
-DgroupId=com.example \
-Dpackage=com.example.$name \
-DartifactId=$name \
-Dversion=1.0-SNAPSHOT
Führen Sie newapp
aus, um ein Projekt zu erstellen. Wenn Y ::
erscheint, geben Sie dort ein (Turn!).
~/apex
$ bash newapp
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
...
$ ls
apex-core apex-malhar examples myapexapp newapp
$ cd myapexapp
Überprüfen Sie nach dem Erstellen des Projekts den Quellcode.
~/apex/myapexapp
$ find src -name "*.java"
src/main/java/com/example/myapexapp/Application.java
src/main/java/com/example/myapexapp/RandomNumberGenerator.java
src/test/java/com/example/myapexapp/ApplicationTest.java
Diesmal brauche ich keinen Unit-Test, also lasse ich ihn. Auf diese Weise werden die Tests nicht ausgeführt, wenn Sie beim Erstellen -DskipTests
vergessen. Dieses Mal habe ich es in / tmp
gespeichert, aber Sie können es natürlich löschen.
~/apex/myapexapp
$ mv src/test/java/com/example/myapexapp/ApplicationTest.java /tmp
Führen Sie den Code für "DataTorrent / examples" ein. Wechseln Sie zunächst in das Quellverzeichnis.
~/apex/myapexapp
$ cd src/main/java/com/example/myapexapp
Bringen Sie den Quellcode für "Tutorial / Topnwords" ein. Gibt die Häufigkeit des Auftretens jedes Wortes im Eingabesatz aus. Details werden weggelassen.
$ ls
Application.java RandomNumberGenerator.java
$ ls ~/apex/examples/tutorials/topnwords/webinar/
ApplicationWordCount.java WCPair.java WordReader.java
FileWordCount.java WindowWordCount.java properties-SortedWordCount.xml
LineReader.java WordCountWriter.java
$ cp ~/apex/examples/tutorials/topnwords/webinar/*.java .
$ ls
Application.java LineReader.java WindowWordCount.java
ApplicationWordCount.java RandomNumberGenerator.java WordCountWriter.java
FileWordCount.java WCPair.java WordReader.java
Wir brauchen auch eine Eigenschaftendatei, also kopieren Sie diese auch in "Ressourcen".
$ cd ../../../../resources/META-INF
$ cp ~/apex/examples/tutorials/topnwords/webinar/properties-SortedWordCount.xml .
$ ls
properties-SortedWordCount.xml properties.xml
Wechseln Sie in das oberste Verzeichnis der Anwendung und erstellen Sie. Nach dem Erstellen wird "myapexapp-1.0-SNAPSHOT.apa" im "Ziel" -Verzeichnis erstellt.
$ cd ~/apex/myapexapp
~/apex/myapexapp
$ mvn clean package -DskipTests
$ ls target
antrun generated-resources maven-archiver site
archive-tmp generated-sources maven-status test-classes
classes generated-test-sources myapexapp-1.0-SNAPSHOT.apa
deps javadoc-bundle-options myapexapp-1.0-SNAPSHOT.jar
Verwenden Sie die Apex CLI-Tools (https://apex.apache.org/docs/apex/apex_cli/#apex-cli-commands), um die erstellte Anwendung auszuführen. Es befindet sich unter "Apex-Core", also führen Sie es im "myapexapp" -Verzeichnis aus.
~/apex/myapexapp
$ ../apex-core/engine/src/main/scripts/apex
Apex CLI 3.7.0-SNAPSHOT 02.06.2017 @ 09:02:30 JST rev: 22feeed branch: master
apex>
Geben Sie dann launch target / myapexapp-1.0-SNAPSHOT.apa
ein, um es auszuführen. Sie werden gefragt, ob Sie "MyFirstApplication" oder "SortedWordCount" ausführen möchten. Wenn Sie also 2 auswählen, wird die Anwendung ausgeführt und "appId" ausgegeben.
apex> launch target/myapexapp-1.0-SNAPSHOT.apa
1. MyFirstApplication
2. SortedWordCount
Choose application: 2
{"appId": "application_1496704660177_0001"}
apex (application_1496704660177_0001) >
Erstellen Sie zunächst ein Eingabe- / Ausgabeverzeichnis mit "hdfs dfs".
$ hdfs dfs -mkdir -p /tmp/test/input-dir
$ hdfs dfs -mkdir -p /tmp/test/output-dir
Derzeit gibt es noch nichts.
$ ls-input
...Es wird nichts angezeigt
$ ls-output
...Es wird nichts angezeigt
Legen Sie eine Textdatei mit "put-file", definiert durch "Aliase", in das Eingabeverzeichnis. Dieses Mal habe ich einen englischen Satz unter https://www.dummytextgenerator.com erstellt und als dummy.txt
gespeichert.
$ ls -lh ~/*.txt
/home/user/dummy.txt
$ put-file ~/dummy.txt
Wenn Sie "ls-input" ausführen, finden Sie dieselbe Textdatei wie zuvor.
$ ls-input
Found 1 items
-rw-r--r-- 1 vagrant supergroup 15167 2017-06-06 04:34 /tmp/test/input-dir/dummy.txt
Wenn Sie "ls-output" ausführen, wird die Ausgabedatei erstellt. Überprüfen Sie daher den Inhalt.
$ ls-output
Found 1 items
-rwxrwxrwx 1 vagrant supergroup 3028 2017-06-06 04:34 /tmp/test/output-dir/dummy.txt
$ hdfs dfs -cat /tmp/test/output-dir/dummy.txt | head
t : 75
you : 43
re : 29
sixth : 22
seasons : 22
creature : 22
every : 22
moved : 20
together : 20
subdue : 20
Die Häufigkeit des Auftretens von Wörtern wurde korrekt ausgegeben!
Recommended Posts