This example shows how to exercise the path matching functionality of the
Location Library in a streaming environment.
The example map-matches data coming from the sample-streaming-layer that
contains SDII messages. The catalog that contains this layer is defined in the
sdii-catalog entry in config/here/pipeline-config.conf. The example writes the
result of the computation to the out-data streaming layer in the catalog you
will create.
The StreamPathMatcherExample class does the following:
- Get the Flink
StreamExecutionEnvironment - Add a
SdiiMessageMapFunction, the FlinkSourceFunctionthat provides data from the input streaming layer and deserializes it - Add a
PathMatcherMapFunction, the FlinkSourceFunctionthat does the path matching - Put the result descriptions into the catalog you will create, as well as print them to the standard output
Before you execute the instructions in the next sections of this document, read
the Prerequisites for the Location Library
examples.
To run the example, you need access to the following catalogs:
To run this example, you need two sets of credentials:
- Platform credentials: To get access to platform data and resources.
- Repository credentials: To download HERE Data SDK for Java & Scala libraries and Maven archetypes to your environment.
For more details on how to set up your credentials, see the Identity & Access Management Developer Guide.
For more details on how to verify that your platform credentials are configured correctly, see the Verify Your Credentials tutorial.
In the commands that follow, replace the variable placeholders with the following values:
$PROJECT_HRNis your project'sHRN(returned by theolp project createcommand).$OLP_EMAILis a single contact e-mail address for the pipeline.$COVERAGEis a two-letter code for country and region (in this case,DEfor Germany)$INPUT_SDII_CATALOGis the HRN of the public sdii-catalog catalog in your pipeline configuration (HERE environment.$INPUT_OPTIMIZED_MAP_CATALOGis the HRN of the public optimized-map-catalog catalog in your pipeline configuration (HERE environment.
Note: We recommend that you set values to variables, so that you can easily copy and execute the following commands.
As mentioned above we will use two public input catalogs, however we need to create our own output catalog to store the
results of the Stream Path Matcher example.
To run this compiler locally, use a local output catalog as described below. For more information about local catalogs, see the SDK tutorial about local development and testing and the OLP CLI documentation.
- Use
the
olp local catalog createcommand to create a local catalog.
olp local catalog create path-matcher-java path-matcher-java --summary "Output catalog for Stream Path Matcher example" \
--description "Output catalog for Stream Path Matcher example"The local catalog will have the HRN hrn:local:data:::path-matcher-java.
- Use
the
olp local catalog layer addcommand to add onestreamlayer to your catalog:
olp local catalog layer add hrn:local:data:::path-matcher-java out-data out-data --stream --summary "Layer for output partitions" \
--description "Layer for output partitions" --coverage $COVERAGEFirst, we're going to run the example using a Flink local environment, suitable for local development and debugging.
- Compile and execute the example.
For the HERE platform environment:
To run your Flink application locally with Java 17, you should provide --add-opens=java.base/java.util=ALL-UNNAMED to the command arguments.
mvn compile exec:exec \
-Dexec.args="--add-opens=java.base/java.util=ALL-UNNAMED -cp %classpath -Dpipeline-config.file=config/here/local-pipeline-config.conf -Dpipeline-job.file=config/here/pipeline-job.conf com.here.platform.example.location.java.flink.StreamPathMatcherExample"- Open a different terminal and let a few partitions stream out of the layer. They consist of small, one-line messages.
The following command prints
10messages specified by the--limitparameter or messages coming within900seconds separated by--delimeter=\\nparameter.
olp local catalog layer stream get hrn:local:data:::path-matcher-java out-data --delimiter=\\n --limit=10 --timeout=900The command should return the following results:
Result for id 818bad2e-6d18-43ae-9396-86d9a8c9ab84: matched 4 points out of 4
Result for id f319318f-a161-4e65-8017-db0588c5470b: matched 69 points out of 70
Result for id 5a095919-49c1-48ef-8be0-d867d176170b: matched 6 points out of 6
Result for id f99bca1a-18a8-4f3d-81df-7ae7742b68b1: matched 92 points out of 92
Result for id 05aa970f-4222-4708-a2a4-3b20b5943d9c: matched 103 points out of 103
Result for id 5f19487e-0390-458d-8e71-1b0d3c2c6050: matched 96 points out of 98
Result for id e315d58c-f64a-42fe-928d-96851ad8c975: matched 7 points out of 7
Result for id 4cddbdbc-152d-4c14-8c19-0deb077026a5: matched 199 points out of 199
Result for id 6417cb50-267b-4ec3-8256-47d6ea661d1f: matched 69 points out of 70
Result for id f1185134-9af1-4514-b3e3-dae7708f810f: matched 6 points out of 6
Result for id bd69c6c6-4d0b-419d-9ae2-51fb0d7365c7: matched 72 points out of 72
- End stream example process after partitions were retrieved.
To follow this example, you will need a project. A project is a collection of platform resources (catalogs, pipelines, and schemas) with controlled access. You can create a project through the platform portal.
Alternatively, use the OLP
CLI olp project create
command to create the project:
olp project create $PROJECT_ID $PROJECT_NAMEThe command returns the HERE Resource Name (HRN) of your new project. Note down this HRN as you will need it later in this tutorial.
You do not have to provide a
--scopeparameter if your app has a default scope. For details on how to set a default project scope for an app, see the Specify a default Project for Apps chapter of the Identity & Access Management Developer Guide.
For more information on how to work with projects, see the Organize your work in projects tutorial.
The catalog you need to create is used to store the results of the Stream Path Matcher example.
Use the HERE platform portal to create the output catalog in your project and add the following layers:
| Layer ID | Layer Type | Content Type | Content Encoding | Coverage |
|---|---|---|---|---|
| out-data | Stream | application/x-protobuf | uncompressed | DE |
Alternatively, you can use the OLP CLI to create the catalog and the corresponding layers.
- Use
the
olp catalog createcommand to create the catalog. Make sure to note down the HRN returned by the following command for later use:
olp catalog create $CATALOG_ID $CATALOG_ID --summary "Output catalog for Stream Path Matcher example" \
--description "Output catalog for Stream Path Matcher example" \
--scope $PROJECT_HRN- Use
the
olp catalog layer addcommand to add a stream layer to your catalog:
olp catalog layer add $CATALOG_HRN out-data out-data --stream --summary "Layer for output partitions" \
--description "Layer for output partitions" --coverage $COVERAGE \
--scope $PROJECT_HRNIf a billing tag is required in your realm, use the
--billing-tags: "YOUR_BILLING_TAG"parameter.
- Update the output catalog HRN in the
pipeline-config.conffile
The config/here/pipeline-config.conf (for the HERE platform environment) file contains
the permanent configuration of the data sources for the example.
Pick the file that corresponds to your platform environment and replace YOUR_OUTPUT_CATALOG_HRN placeholder
with the HRN of your Stream Path Matcher catalog.
To find the HRN, in the HERE platform portal, navigate to your catalog. The HRN is displayed in the upper left corner of the page.
- Use
the
olp project resource linkcommand to link the HERE Sample SDII Messages - Berlin and HERE Optimized Map for Location Library catalog to your project.
olp project resource link $PROJECT_HRN $INPUT_SDII_CATALOG
olp project resource link $PROJECT_HRN $INPUT_OPTIMIZED_MAP_CATALOG- For more details on catalog commands, see Catalog Commands.
- For more details on layer commands, see Layer Commands.
- For more details on project commands, see Project Commands.
- For instructions on how to link a resource to a project, see Project Resource Link command.
Generate a "fat jar" for StreamPathMatcherExample that will be sent to the platform later
mvn -Pplatform packageYou can use the OLP CLI to create pipeline components and activate the pipeline version with the following commands:
- Create pipeline components:
olp pipeline create $COMPONENT_NAME_Pipeline --email $OLP_EMAIL --scope $PROJECT_HRN
olp pipeline template create $COMPONENT_NAME_Template stream-7.0 $PATH_TO_JAR \
com.here.platform.example.location.java.flink.StreamPathMatcherExample \
--input-catalog-ids="$PATH_TO_CONFIG_FOLDER/pipeline-config.conf" \
--scope $PROJECT_HRN
olp pipeline version create $COMPONENT_NAME_version $PIPELINE_ID $PIPELINE_TEMPLATE_ID \
"$PATH_TO_CONFIG_FOLDER/pipeline-config.conf" \
--scope $PROJECT_HRN- Make sure logs are produced with info level
olp pipeline version log level set $PIPELINE_ID $PIPELINE_VERSION_ID --root info --scope $PROJECT_HRNIf the operation is successful, you should be able to see the log level you just set:
olp pipeline version log level get $PIPELINE_ID $PIPELINE_VERSION_ID \
--scope $PROJECT_HRN- Activate the pipeline version:
olp pipeline version activate $PIPELINE_ID $PIPELINE_VERSION_ID --input-catalogs "$PATH_TO_CONFIG_FOLDER/pipeline-job.conf" --scope $PROJECT_HRNSince this is a Flink application, this means that it runs until you stop it. In order to stop the application after you have checked its operation, execute the following command:
olp pipeline version cancel $PIPELINE_ID $PIPELINE_VERSION_ID --scope $PROJECT_HRN
Partitions consist of small, one-line messages.
The following command prints 10 messages specified by the --limit parameter or messages coming within 900 seconds
separated by --delimeter=\\n parameter.
olp catalog layer stream get $CATALOG_HRN out-data --delimiter=\\n --limit=10 --timeout=900 --scope $PROJECT_HRNThe command should return the following results:
Result for id 818bad2e-6d18-43ae-9396-86d9a8c9ab84: matched 4 points out of 4
Result for id f319318f-a161-4e65-8017-db0588c5470b: matched 69 points out of 70
Result for id 5a095919-49c1-48ef-8be0-d867d176170b: matched 6 points out of 6
Result for id f99bca1a-18a8-4f3d-81df-7ae7742b68b1: matched 92 points out of 92
Result for id 05aa970f-4222-4708-a2a4-3b20b5943d9c: matched 103 points out of 103
Result for id 5f19487e-0390-458d-8e71-1b0d3c2c6050: matched 96 points out of 98
Result for id e315d58c-f64a-42fe-928d-96851ad8c975: matched 7 points out of 7
Result for id 4cddbdbc-152d-4c14-8c19-0deb077026a5: matched 199 points out of 199
Result for id 6417cb50-267b-4ec3-8256-47d6ea661d1f: matched 69 points out of 70
Result for id f1185134-9af1-4514-b3e3-dae7708f810f: matched 6 points out of 6
Result for id bd69c6c6-4d0b-419d-9ae2-51fb0d7365c7: matched 72 points out of 72