<!--
  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.
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    
    
    <script type="text/javascript">
        if(window.location.protocol != 'https:') {
            location.href =   location.href.replace("http://", "https://");
        }
    </script>
    


    <title>Apache Wayang - About</title>
    <link rel="icon" href="https://wayang.apache.org/assets/img/logo/favicon-pluma.ico">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
    <link rel="stylesheet" href="https://wayang.apache.org/assets/css/color.css">
    <link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/>

    <link rel="stylesheet" href="https://wayang.apache.org/assets/css/monokai.css">
    <link rel="stylesheet" href="https://wayang.apache.org/assets/css/home.css">

</head>
<body>



    
    

    
    

    
    

    
    

    
    

    
    
        
    


<nav class="navbar navbar-expand-lg navbar-light bg-light sticky-top shadow-lg">
    <div class="container d-flex justify-content-between w-100">
            <div class="mr-auto p-2 w-100">
                <div class="d-flex">
                    <a class="navbar-brand mr-auto" href="/">
                        <img style="max-height: 75px" src="https://wayang.apache.org/assets/img/logo/logo_400x160.png"/>
                    </a>
                    <button class="navbar-toggler ml-auto align-self-center" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button>
                </div>

            </div>

            <div>
                <div class="p-2 collapse navbar-collapse" id="navbarSupportedContent">
                    <div class="navbar-nav">
                        
                        

                        
                        
                        <li class="nav-item ">
                            <a class="nav-link" href="https://wayang.apache.org/">
                                Home
                            </a>
                        </li>
                        
                        
                        

                        
                        
                        <li class="nav-item ">
                            <a class="nav-link" href="https://wayang.apache.org/about">
                                About
                            </a>
                        </li>
                        
                        
                        

                        
                        
                        <li class="nav-item ">
                            <a class="nav-link" href="https://wayang.apache.org/community">
                                Community
                            </a>
                        </li>
                        
                        
                        

                        
                        
                        <li class="nav-item ">
                            <a class="nav-link" href="https://wayang.apache.org/documentation">
                                Documentation
                            </a>
                        </li>
                        
                        
                        

                        
                        
                        <li class="nav-item ">
                            <a class="nav-link" href="https://wayang.apache.org/publications-home">
                                Publications
                            </a>
                        </li>
                        
                        
                        

                        
                        
                        <li class="nav-item dropdown ">
                            <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
                                Apache
                            </a>
                            <div class="dropdown-menu">
                                
                                <a class="dropdown-item" href="http://www.apache.org/foundation/how-it-works.html">
                                    Apache Software Foundation
                                </a>
                                
                                <a class="dropdown-item" href="http://www.apache.org/licenses/">
                                    Apache License
                                </a>
                                
                                <a class="dropdown-item" href="http://www.apache.org/foundation/sponsorship.html">
                                    Sponsorship
                                </a>
                                
                                <a class="dropdown-item" href="http://www.apache.org/foundation/thanks.html">
                                    Thanks
                                </a>
                                
                            </div>
                        </li>
                        
                        
                    </div>
                </div>
            </div>
        </div>
    </div>



</nav>
<div class="container-fluid p-0">
  <div class="title-post mb-3 mt-n5 d-flex align-items-center shadow" >
    <div class="col pt-4" style="text-align: center">
        <h1 class="mb-n2 mt-1" style="color: white; font-size: 4em">About</h1>
        
    </div>
</div>

<section>
    <div class="container">
        <div class="row" style="margin-top: 15px;">
            <div class="col-md-12 col-sm-12">
                <div style="text-align: justify">
                    <p>Apache Wayang has a three-layer data processing abstraction that sits between user applications and data processing platforms, such as Hadoop and Spark. The figure below depicts the Apache Wayang architecture: (i) an application layer that models all application-specific logic; (ii) a core layer that provides the intermediate representation between applications and processing platforms; and (iii) a platform layer that embraces the underlying processing platforms. Overall, the input of an application layer comprises the logical operators provided by users (or generated by a declarative query parser) and the output is a physical plan (WayangPlan). The WayangPlan is then passed to the core layer where cross-platform optimizations take place to produce an execution plan (ExecutionPlan).<br /><br /> Notice that, in contrast to DBMSs, Apache Wayang decouples physical and execution levels. This separation allows applications to express physical plans in terms of algorithmic needs only, without being tied to a particular processing platform. The salient features of Apache Wayang are cross-platform task execution, high-performance, flexibility, and ease-of-use.</p>


                </div>
            </div>
        </div>
    </div>
</section>


<section>
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-sm-12 text-center ">
                <img src="https://wayang.apache.org/assets/img/architecture.png" style="width: 100%;"/>
                <br>
                <em>Architecture of Apache Wayang</em>
            </div>
            <div class="col-md-6 col-sm-12 text-center ">
                <img src="https://wayang.apache.org/assets/img/plan.png" style="width: 100%;"/>
                <br>
                <em>SGD plans</em>
            </div>
        </div>
    </div>
</section>

<div class="subtitle-post d-flex align-items-center mt-5 shadow" >
    <div class="col" style="text-align: center">
        <h1 style="color: white; font-size: 4em">Features</h1>
    </div>
</div>

<section id="feature_about" class="container-fluid">
    
    
    
        <div class="row">
            <div class="container">
                <div class="row d-flex flex-nowrap">
                    <div class="col-sm-12 col-md-3 col-md-push-9 text-center align-self-center p-2 order-2">
                        <div class="service-item">
                            <i class="fas fa-bezier-curve fa-5x"></i>
                            <h4>Cross-platform</h4>
                            <strong>
                                Run a single data analytic task on top of any set of data processing platforms.
                            </strong>
                        </div>
                    </div>
                    <div class="col-sm-12 col-md-9 col-md-pull-3 align-self-center p-2 order-1">
                        <p class="text-justify">
                            The most salient feature of Apache Wayang is its cross-platform optimizer. Besides deciding the best processing platform to run any incoming task, Apache Wayang can run a single task on multiple processing platforms. Overall, it applies an extensible set of graph transformations to a Apache Wayang plan to find alternative execution plans. Then, it compares all execution plans by using a platform-specific cost model. Cost functions can either be given or learned, and are parameterized with respect to the underlying hardware (e.g., number of computing nodes for distributed operators).

                        </p>
                    </div>
                </div>

            </div>

        </div>
        
        
    
        <div class="row">
            <div class="container">
                <div class="row d-flex flex-nowrap">
                    <div class="col-sm-12 col-md-3 col-md-push-9 text-center align-self-center p-2 order-1">
                        <div class="service-item">
                            <i class="fa fa-clock fa-5x"></i>
                            <h4>High-Efficiency</h4>
                            <strong>
                                It selects the best available data processing platform for any incoming query.
                            </strong>
                        </div>
                    </div>
                    <div class="col-sm-12 col-md-9 col-md-pull-3 align-self-center p-2 order-2">
                        <p class="text-justify">
                            Apache Wayang provides a number of optimized operators and novel query optimization process that allows it to efficiently deal with big (as well as small) datasets. Furthermore, as its data processing abstraction is based on UDFs, Apache Wayang lets applications expose semantic properties about their functions, optimization hints (e.g., numbers of iterations), constraints (e.g., physical collocation of operators), and alternative plans. The optimizer then uses those artifacts where available in a best-effort approach.

                        </p>
                    </div>
                </div>

            </div>

        </div>
        
        
    
        <div class="row">
            <div class="container">
                <div class="row d-flex flex-nowrap">
                    <div class="col-sm-12 col-md-3 col-md-push-9 text-center align-self-center p-2 order-2">
                        <div class="service-item">
                            <i class="fa fa-puzzle-piece fa-5x"></i>
                            <h4>Flexibility</h4>
                            <strong>
                                User defined functions (UDFs) as first-class citizens, enabling extensibility and adaptability.
                            </strong>
                        </div>
                    </div>
                    <div class="col-sm-12 col-md-9 col-md-pull-3 align-self-center p-2 order-1">
                        <p class="text-justify">
                            Apache Wayang provides a set of Wayang operators, which applications use to specify their tasks, as well as a set of execution operators, which processing platform provide to run application tasks. The key aspect is that Apache Wayang provides a flexible operator mapping structure allowing developers to add, modify, or delete mappings among Wayang and execution operators. As a result, developers can also add or remove Wayang and execution operators.

                        </p>
                    </div>
                </div>

            </div>

        </div>
        
        
    
        <div class="row">
            <div class="container">
                <div class="row d-flex flex-nowrap">
                    <div class="col-sm-12 col-md-3 col-md-push-9 text-center align-self-center p-2 order-1">
                        <div class="service-item">
                            <i class="fas fa-child fa-5x"></i>
                            <h4>Ease-of-Use</h4>
                            <strong>
                                A simple interface that allows developers to focus only on the logics of their application.
                            </strong>
                        </div>
                    </div>
                    <div class="col-sm-12 col-md-9 col-md-pull-3 align-self-center p-2 order-2">
                        <p class="text-justify">
                            Apache Wayang exposes a simple Java API to developers whereby they can implement their tasks. Developers focus on the logics of their tasks rather than on low-level details specific to data processing platforms. The figure of the SGD plans above shows the Wayang plan for a scalable gradient descent implementation: we clearly see that this tedious implementation task is now much easier!

                        </p>
                    </div>
                </div>

            </div>

        </div>
        
        
    
        <div class="row">
            <div class="container">
                <div class="row d-flex flex-nowrap">
                    <div class="col-sm-12 col-md-3 col-md-push-9 text-center align-self-center p-2 order-2">
                        <div class="service-item">
                            <i class="fa fa-piggy-bank fa-5x"></i>
                            <h4>Cost Saving</h4>
                            <strong>
                                Fast development of data analytic applications.
                            </strong>
                        </div>
                    </div>
                    <div class="col-sm-12 col-md-9 col-md-pull-3 align-self-center p-2 order-1">
                        <p class="text-justify">
                            Users do not have to know the intricacies of the underlying platforms: they focus on the logic of their application only. This not only speeds up the development of applications, but also it is no longer a must to be an expert in big data infrastructures. Apache Wayang takes care of how and on which data processing platforms to deploy your applications.

                        </p>
                    </div>
                </div>

            </div>

        </div>
        
        
    
        <div class="row">
            <div class="container">
                <div class="row d-flex flex-nowrap">
                    <div class="col-sm-12 col-md-3 col-md-push-9 text-center align-self-center p-2 order-1">
                        <div class="service-item">
                            <i class="fa fa-code-branch fa-5x"></i>
                            <h4>Open Source</h4>
                            <strong>
                                All code is on GitHub under Apache License.
                            </strong>
                        </div>
                    </div>
                    <div class="col-sm-12 col-md-9 col-md-pull-3 align-self-center p-2 order-2">
                        <p class="text-justify">
                            Apache Wayang has been open source from its very beginnings and will keep being open source until its very endings. Feel free to download it, try it, and contribute to it. Help us to make it better!

                        </p>
                    </div>
                </div>

            </div>

        </div>
        
        
    
</section>


</div>

<footer class="footer position-sticky sticky-bottom">
    <nav class="navbar navbar-light bg-light"  style="background: #A6A6A6;">
        <div class="container">
            <div class="row">
                <div class="col text-center">
                    <a href="http://incubator.apache.org/" >
                        <img style="max-height: 15vw" src="https://wayang.apache.org/assets/img/egg-logo.png">
                    </a>
                    <br />
                    <p style="text-align: justify">
                        Apache Wayang is an effort undergoing Incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
                    </p>
                    <p class="text-center">
                        Copyright &#169; 2021 The Apache Software Foundation.<br />
                        Licensed under the Apache License, Version 2.0.<br />
                        Apache, the Apache Feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
                    </p>
                </div>
            </div>
        </div>
    </nav>
</footer>


<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>

<script src="https://wayang.apache.org/assets/js/add_numbers.js"></script>
</body>

</html>
