Go Cross-Language IO Quickstart
danoliveira@
Cross-Language Overview
Portable Pipeline (Single Language)
Pipeline Construction
Workers
Runner
Go Pipeline Code
Job Service
Go SDK Harness
Portable Pipeline (Multi Language)
Pipeline Construction
Workers
Runner
Go Pipeline Code
Job Service
Go SDK Harness
Java Expansion Service
Java SDK Harness
Expansion Service
Artifacts
Pipeline Code
Job Service
SDK Harness
Artifact Staging Service
Stage
Retrieve
Cross-Language SDK Harnesses
Codebase
XLang Entrypoints
User adds xlang transform to pipeline. How is it represented?
Go Representation
Expansion
Native Artifacts
First, how do artifacts work in native pipelines?
XLang Artifacts: Overview
XLang artifacts work as follows:
XLang Artifacts: Resolving
XLang Artifacts: Portable
XLang Artifacts: Dataflow
Proto Pipeline
Configuration Details
--sdk_harness_container_image_override= \�".*java.*,us.gcr.io/myproject/danoliveira/beam_java11_sdk:timestamp"
Dataflow-Specific Details
XLang IO Integration Tests
Dev Workflows
Start an Expansion Service Manually
Testing:
IOs:
$ ./gradlew :sdks:java:testing:expansion-service:runTestExpansionService \
-PconstructionService.port=8097
$ ./gradlew :sdks:java:io:expansion-service:runExpansionService \
-PconstructionService.port=8097
Running XLang Integration Test Suites
$ ./gradlew :sdks:go:test:dataflowValidatesRunner
$ ./gradlew :sdks:go:test:flinkValidatesRunner
$ ./gradlew :sdks:go:test:ulrValidatesRunner
… etc.
Building Containers
$ ./gradlew :sdks:go:container:docker -Pdocker-tag=2.35.0.dev
$ ./gradlew :sdks:java:container:java11:docker
$ ./gradlew :sdks:java:container:java8:docker
$ ./gradlew :sdks:java:container:java11:docker -Pdocker-repository-root=us.gcr.io/myproject/danoliveira -Pdocker-tag=testing�$ gcloud docker -- push us.gcr.io/myproject/danoliveira/beam_java11_sdk:testing
… etc.
Running a Specific XLang Integration Test
Easy setup:
Harder setup:
Dataflow Configuration
--sdk_harness_container_image_override= \�".*java.*,us.gcr.io/myproject/danoliveira/beam_java11_sdk:timestamp"
Running a Custom XLang Pipeline
Example: Wordcount on Portable Runners
$ cd sdks/go/examples/xlang/wordcount
$ ./wordcount --runner=universal --endpoint=localhost:8099 --expansion_addr=localhost:8095
Example: Pipeline on Dataflow
This is an example of a pipeline I’ve been testing recently:
$ ./bigquery --output=gs://danoliveira/sandbox/out.txt --runner=dataflow \�--expansion_addr=localhost:8095 --project=myproject \�--region=us-central1 --environment_type=DOCKER \�--staging_location=gs://danoliveira/sandbox/bq-test-storage/staging \�--temp_location=gs://danoliveira/sandbox/bq-test-storage/temp \�--environment_config=us.gcr.io/myproject/danoliveira/beam_go_sdk:bqtest \�--sdk_harness_container_image_override=".*java.*,us.gcr.io/myproject/danoliveira/beam_java11_sdk:bqtest"
Debugging
A Warning
Expansion Errors
Stepping Through Expansion Service
Proto Errors
Incorrect proto submitted to Job Server
SDK Harness Errors
Errors occurring in execution time, but in SDK Harness
Artifact Errors
Errors occurring due to incorrect artifact resolution or staging
Step-Through Debugging
Annoying to set up, but almost always worth it
IntelliJ Debug Integration Test Example