In contrast to traditional data processing systems that provide one dedicated execution engine, Apache Wayang (incubating) can transparently and seamlessly integrate multiple execution engines and use them to perform a single task. We call this cross-platform data processing. In Wayang, users can specify any data processing application using one of Wayang's APIs and then Wayang will choose the data processing platform(s), e.g., Postgres or Apache Spark, that best fits the application. Finally, Wayang will perform the execution, thereby hiding the different platform-specific APIs and coordinating inter-platform communication.
Apache Wayang (incubating) aims at freeing data engineers and software developers from the burden of learning all different data processing systems, their APIs, strengths and weaknesses; the intricacies of coordinating and integrating different processing platforms; and the inflexibility when trying a fixed set of processing platforms. As of now, Wayang has built-in support for the following processing platforms:
Apache Wayang (incubating) can be used via the following APIs:
For a quick guide on how to run WordCount see here.
For a quick guide on how to use Wayang in your Java/Scala project see here.
You first have to build the binaries as shown here. Once you have the binaries built, follow these steps to install Wayang:
tar -xvf wayang-0.7.1-snapshot.tar.gz
cd wayang-0.7.1-SNAPSHOT
In linux
echo "export WAYANG_HOME=$(pwd)" >> ~/.bashrc
echo "export PATH=${PATH}:${WAYANG_HOME}/bin" >> ~/.bashrc
source ~/.bashrc
In MacOS
echo "export WAYANG_HOME=$(pwd)" >> ~/.zshrc
echo "export PATH=${PATH}:${WAYANG_HOME}/bin" >> ~/.zshrc
source ~/.zshrc
Since Apache Wayang (incubating) is not an execution engine itself but rather manages the execution engines for you, it is important to have the necessary requirements installed.
JAVA_HOME
environment variable.SPARK_HOME
environment variable.HADOOP_HOME
environment variable.To execute your first application with Apache Wayang, you need to execute your program with the 'wayang-submit' command:
bin/wayang-submit org.apache.wayang.apps.wordcount.Main java file://$(pwd)/README.md
Wayang is available via Maven Central. To use it with Maven, include the following code snippet into your POM file:
<dependency>
<groupId>org.apache.wayang</groupId>
<artifactId>wayang-***</artifactId>
<version>0.7.1</version>
</dependency>
Note the ***
: Wayang ships with multiple modules that can be included in your app, depending on how you want to use it:
wayang-core
: provides core data structures and the optimizer (required)wayang-basic
: provides common operators and data types for your apps (recommended)wayang-api-scala-java
: provides an easy-to-use Scala and Java API to assemble Wayang plans (recommended)wayang-java
, wayang-spark
, wayang-graphchi
, wayang-sqlite3
, wayang-postgres
: adapters for the various supported processing platformswayang-profiler
: provides functionality to learn operator and UDF cost functions from historical execution dataNOTE: The module
wayang-api-scala-java
is intended to be used with Java 11 and Scala 2.12.
For the sake of version flexibility, you still have to include in the POM file your Hadoop (hadoop-hdfs
and hadoop-common
) and Spark (spark-core
and spark-graphx
) version of choice.
In addition, you can obtain the most recent snapshot version of Wayang via Sonatype's snapshot repository. Just include:
<repositories>
<repository>
<id>apache-snapshots</id>
<name>Apache Foundation Snapshot Repository</name>
<url>https://repository.apache.org/content/repositories/snapshots</url>
</repository>
</repositories>
Apache Wayang (incubating) is built with Java 11 and Scala 2.12. However, to run Apache Wayang it is sufficient to have just Java 11 installed. Please also consider that processing platforms employed by Wayang might have further requirements.
Java 11
[Scala 2.12]
NOTE: In windows, you need to define the variable
HADOOP_HOME
with the winutils.exe, an not official option to obtain this repository, or you can generate your winutils.exe following the instructions in the repository. Also, you may need to install msvcr100.dllNOTE: Make sure that the JAVA_HOME environment variable is set correctly to Java 11 as the prerequisite checker script currently supports up to Java 11 and checks the latest version of Java if you have higher version installed. In Linux, it is preferably to use the export JAVA_HOME method inside the project folder. It is also recommended running './mvnw clean install' before opening the project using IntelliJ.
If you need to rebuild Wayang, e.g., to use a different Scala version, you can simply do so via Maven:
spark.version
) in the main pom.xml
file.git clone https://github.com/apache/incubator-wayang.git
cd incubator-wayang
./mvnw clean install -DskipTests
NOTE: If you receive an error about not finding
MathExBaseVisitor
, then the problem might be that you are trying to build from IntelliJ, without Maven. MathExBaseVisitor is generated code, and a Maven build should generate it automatically.
NOTE: In the current Maven setup, the version of scala is tied to the Java version, you can compile the profile
scala-11
with Java 8 and profilescala-12
with Java 11.NOTE: For compiling and testing the code it is required to have Hadoop installed on your machine.
NOTE: the
standalone
profile to fix Hadoop and Spark versions, so that Wayang apps do not explicitly need to declare the corresponding dependencies.Also, note the
distro
profile, which assembles a binary Wayang distribution. To activate these profiles, you need to specify them when running maven, i.e.,
./mvnw clean install -DskipTests -P<profile name>
In the incubator-wayang root folder run:
./mvnw test
You can see examples on how to start using Wayang here
Before submitting a PR, please take a look on how to contribute with Apache Wayang contributing guidelines here.
There is also a guide on how to compile your code here.
The list of contributors.
All files in this repository are licensed under the Apache Software License 2.0
Copyright 2020 - 2024 The Apache Software Foundation.
Licensed 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.
The Logo was donated by Brian Vera.