| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| # Overview |
| |
| wasm is an **_EXPERIMENTAL_** simple example that loads and executes a wasm file function. |
| greet.wasm, Cargo.toml and greet.rs were copied from the example provided by the wazero library: |
| https://github.com/tetratelabs/wazero/blob/v1.0.0-pre.3/examples/allocation/rust/greet.go |
| |
| # Usage |
| |
| To run this example in various runners, the following assumes: |
| |
| ``` |
| OUTPUT=<path to output i.e. /tmp/example/output> |
| git clone https://github.com/apache/beam |
| BEAM_HOME=$(pwd)/beam |
| cd $BEAM_HOME/sdks |
| ``` |
| |
| ## Local Runner execution |
| |
| To execute this example on the local runner: |
| |
| ```shell |
| go run ./go/examples/wasm --output=$OUTPUT |
| ``` |
| |
| ## Flink Portable Runner |
| |
| The following describes how to execute this example on the flink portable runner. |
| |
| ### REQUIREMENTS: |
| |
| - [Docker](https://docker.io); MacOS users may consider alternative: https://github.com/abiosoft/colima |
| - Google Cloud Storage (https://cloud.google.com/storage) or S3 (https://aws.amazon.com/s3/) bucket; |
| NOTE this example was only tested on Google Cloud Storage |
| |
| #### 0. Set OUTPUT to a Cloud storage bucket path |
| |
| The example below shows Google Cloud Storage. |
| ``` |
| OUTPUT=gs://<my bucket>/greet |
| ``` |
| |
| #### 1. Find the latest flink runner version |
| |
| ```shell |
| cd $BEAM_HOME |
| ./gradlew :runners:flink:properties --property flink_versions |
| ``` |
| |
| Expected output should include the following, from which you acquire the latest flink runner version. |
| |
| ```shell |
| 'flink_versions: 1.17,1.18,1.19' |
| ``` |
| |
| #### 2. Set to the latest flink runner version i.e. 1.16 |
| |
| ```shell |
| FLINK_VERSION=1.16 |
| ``` |
| |
| #### 3. In a separate terminal, start the flink runner (It should take a few minutes on the first execution) |
| ```shell |
| cd $BEAM_HOME |
| ./gradlew :runners:flink:$FLINK_VERSION:job-server:runShadow |
| ``` |
| |
| Note the JobService host and port from the output, similar to: |
| |
| ```shell |
| INFO: JobService started on localhost:8099 |
| ``` |
| |
| #### 4. Set the JOB_SERVICE variable from the aforementioned output |
| |
| ```shell |
| JOB_SERVICE=localhost:8099 |
| ``` |
| |
| #### 5. Execute this example using the portable flink runner |
| |
| ```shell |
| cd $BEAM_HOME/sdks |
| go run ./go/examples/wasm --runner=universal --endpoint=$JOB_SERVICE --output=$OUTPUT --environment_config=apache/beam_go_sdk:latest |
| ``` |
| |
| ## Dataflow Runner |
| |
| The following describes how to execute this example on Dataflow. |
| |
| ### REQUIREMENTS: |
| |
| - Google Cloud Storage (https://cloud.google.com/storage) bucket |
| |
| #### 1. Set OUTPUT to a Cloud storage bucket path |
| |
| The example below shows Google Cloud Storage. |
| |
| ```shell |
| OUTPUT=gs://<my bucket>/greet |
| ``` |
| |
| #### 2. Set additional variables |
| |
| ```shell |
| PROJECT=<project id> |
| REGION=<region> |
| STAGING=gs://<my bucket>/staging |
| NETWORK=<network> |
| SUBNETWORK=regions/$REGION/subnetworks/<subnetwork> |
| ``` |
| |
| #### 3. Execute this example using Dataflow |
| |
| ``` |
| cd $BEAM_HOME/sdks |
| go run ./go/examples/wasm --runner=dataflow --output=$OUTPUT --environment_config=apache/beam_go_sdk:latest \ |
| --project=$PROJECT --region=$REGION --network=$NETWORK --subnetwork=$SUBNETWORK --staging_location=$STAGING |
| ``` |