The trucking data simulator allows you to do the following:
- Generate streaming events for different sensors on a truck
- Control the number of trucks/drivers on the road
- Control the number of events generated by each truck
- Use real trucking routes with real lat/long locations for the truck
- Control the output of the event (csv, json)
- Control what metadata goes into the event (schema metadata)
- Control where the event is generated (in a file, as an event into Kafka)
Out of the box, it supports two event types representing 2 different sesnsors that would be on a truck:
-
Truck Geo Event
- Sample Raw Event:
2016-10-19 14:54:38.18|truck_geo_event|40|23|Jeff Markham|1090292248|Peoria to Ceder Rapids Route 2|Normal|40.7|-89.52|1|
- Truck Speed Event
2016-10-19 14:54:38.197|truck_speed_event|40|23|Jeff Markham|1090292248|Peoria to Ceder Rapids Route 2|73|
- Java 8
- setup your JAVA_HOME to point to java 8
- Put JAVA_HOME on your PATH
- Install Maven
- Put Maven on your PATH
- Git
- Clone the repo and the build the libraries
git clone https://github.com/georgevetticaden/hdp.git
cd hdp/app-utils/hdp-app-utils/
mvn clean install -DskipTests=true
cd ../hdp-app-utils/../../reference-apps/iot-trucking-app/
mvn clean install -DskipTests=true
cd trucking-data-simulator
mvn clean compile assembly:single
cd target
- Download the Data-Loader.zip.
- Unzip it to the location where you want to run the simulator. Lets call the directory you unzip it to as: $DATA_LOADER_HOME.
- untar the route.tar.gz file (tar -zxvf $DATA_LOADER_HOME/routes.tar.gz)
The simulator has a number of different runners based on the type of output you want generated. The below walks through some of the scenarios
- Command:
nohup java -cp \
data-loader-jar-with-dependencies.jar \
hortonworks.hdf.sam.refapp.simulator.SimulationRegistrySerializerRunnerApp \
20000 \
hortonworks.hdf.sam.refapp.simulator.impl.domain.transport.Truck \
hortonworks.hdf.sam.refapp.simulator.impl.collectors.FileEventWithSchemaIdCollector \
1 \
$DATA_LOADER_HOME/routes/midwest/ \
10000 \
/tmp/truck-sensor-data/all-streams-with-schemaid-embedded.txt \
$REST_URL_TO_SCHEMA_REGISTRY \
ALL_STREAMS &
-
Details
- Each Truck (13 trucks total) will generate 20000 events.
- Each event will be prepended with schema-id and schema-version
- Each truck will wait 10 seconds before its route is finished before going on the road again.
- All of these events will be streamed into the following file: /tmp/truck-sensor-data/all-streams-with-schemaid-embedded.txt
-
Sample Output
<schema-id>9<schema-id><schema-version>1<schema-version>|2017-05-01 12:30:42.086|truck_geo_event|69|13|Suresh Srinivas|6|Des Moines to Chicago|Lane Departure|41.62|-93.58|1|
<schema-id>10<schema-id><schema-version>1<schema-version>|2017-05-01 12:30:42.099|truck_speed_event|69|13|Suresh Srinivas|6|Des Moines to Chicago|104|
- Command:
nohup java -cp \
data-loader-jar-with-dependencies.jar \
hortonworks.hdf.sam.refapp.simulator.SimulationRunnerApp \
20000 \
hortonworks.hdf.sam.refapp.simulator.impl.domain.transport.Truck \
hortonworks.hdf.sam.refapp.simulator.impl.collectors.FileEventCollector \
1 \
$DATA_LOADER_HOME/routes/midwest/ \
10000 \
/tmp/truck-sensor-data/all-streams.txt \
ALL_STREAMS &
-
Details
- Each Truck (13 trucks total) will generate 20000 events.
- Each truck will wait 10 seconds before its route is finished before going on the road again.
- All of these events will be streamed into the following file: /tmp/truck-sensor-data/all-streams.txt
-
Sample Output
2017-05-01 12:38:42.747|truck_geo_event|101|13|Suresh Srinivas|12|Des Moines to Chicago|Unsafe tail distance|41.62|-93.58|1|
2017-05-01 12:38:42.799|truck_speed_event|101|13|Suresh Srinivas|12|Des Moines to Chicago|80|
2017-05-01 12:38:42.8|truck_geo_event|102|10|George Vetticaden|4|Saint Louis to Tulsa|Normal|38.64|-90.18|1|
2017-05-01 12:38:42.801|truck_speed_event|102|10|George Vetticaden|4|Saint Louis to Tulsa|65|
nohup java -cp \
data-loader-jar-with-dependencies.jar \
hortonworks.hdf.sam.refapp.simulator.SimulationRegistrySerializerRunnerApp \
20000 \
hortonworks.hdf.sam.refapp.simulator.impl.domain.transport.Truck \
hortonworks.hdf.sam.refapp.simulator.impl.collectors.FileEventSerializedWithRegistryCollector \
1 \
$DATA_LOADER_HOME/routes/midwest/ \
10000 \
/tmp/truck-sensor-data/all-streams-serialized-with-hwx-registry.txt \
$REST_URL_TO_SCHEMA_REGISTRY \
ALL_STREAMS &
-
Details
- Each Truck (13 trucks total) will generate 20000 events.
- Each event is serialized into Avro using the HWX Schema Registry
- Each truck will wait 10 seconds before its route is finished before going on the road again.
- All of these events will be streamed into the following file: /tmp/truck-sensor-data/all-streams-serialized-with-hwx-registry.txt
-
Sample Output
^A^@^@^@^@^@^@^@ ^@^@^@^A^@.2017-05-01 13:13:16.499^^truck_geo_eventL^X^PJoe Witt^B,Saint Louis to Memphis^\Lane Departure<8f>Âõ(\OC@<9a><99><99><99><99><89>VÀ^B^A^@^@^@^@^@^@^@
^@^@^@^A^@.2017-05-01 13:13:17.119"truck_speed_eventL^X^PJoe Witt^B,Saint Louis to Memphis¦^A^A^@^@^@^@^@^@^@ ^@^@^@^A^@