extend ../_components/base.pug

block pagetitle
    | Accelerate Existing Hadoop Deployments

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/compute-apis.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/digital-hub.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/hadoop.css?ver=" + config.version)

  



block main
    - global.pageHref = "usecases"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                h1.h1.innerhero__h1 Accelerate Existing Hadoop Deployments
                  <br> 
                  span.with-apache  With Apache Ignite
                .innerhero__descr.pt-2.h5.
                    Achieve the performance acceleration of Hadoop-based<br> application with Ignite as a high-performance data access layer
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--hadoop(src="/public/img/usecases/hadoop/hero-image.svg", alt="hero-image")
    // /.innerhero

    
   

    section.compute2
     .container
       .doop2__block
          h2.compute2__h2 Benefits Of Using Apache Ignite
          .compute2__grid.flexi.hub2__grid.doop2__grid 
               .compute2item.hub2item.doop2__item
                 .compute2-points__item.fz20
                 .compute2item__block
                   h3.fz20.compute2item__title Real-time analytics
                   p.compute2__text.base2__text Apache Ignite enables real-time analytics across Apache Hadoop operational and historical data silos.
             
               .compute2item.hub2item.doop2__item
                 .compute2-points__item.fz20
                 .compute2item__block
                   h3.fz20.compute2item__title Low-latency and high-throughput operations
                   p.compute2__text.base2__text Ignite enables low-latency and high-throughput access while Hadoop continues to be used for long-running OLAP workloads.
                   
            
    // /.compute2

    section.doop3
        .container 
           .doop3__block.flexi
              .doop3__info
                 h2.doop3__h2.h5 How Does Apache Ignite Acceleration Work?
                 p.doop3__text To achieve the performance acceleration of Hadoop-based systems, deploy Ignite as a separate distributed storage that maintains the data sets required for your low-latency operations or real-time reports
                 h2.doop3__h2.h5 There are 3 basic steps:
                 .fz20.doop3__number 01
                 p.doop3__subtext Depending on the data volume and available memory capacity, you can enable<a href="/arch/native-persistence.html" target="_blank"> Ignite native persistence</a> to store historical data sets on disk while dedicating a memory space for operational records. 
                 p.doop3__subtext.pt-1 You can continue to use Hadoop as storage for less frequently used data or for long-running and ad-hoc analytical queries.
                 .fz20.doop3__number 02
                 p.doop3__subtext Your applications and services should use Ignite native APIs to process the data residing in the in-memory cluster. Ignite provides SQL, compute (aka. map-reduce), and machine learning APIs for various data processing needs.
                 .fz20.doop3__number 03
                 p.doop3__subtext Consider using Apache Spark DataFrames APIs if an application needs to run federated or cross-database queries across Ignite and Hadoop clusters.
                 p.doop3__subtext.pt-1 Ignite is <a href="/use-cases/spark-acceleration.html" target="_blank">integrated with Spark</a>, which natively supports Hive/Hadoop. Cross-database queries should be considered only for a limited number of scenarios when neither Ignite nor Hadoop contains the entire data set.
              img.doop3__image(src="/public/img/usecases/hadoop/image.svg", alt="image")
    // /.doop3 
    
    section.doop4
        .container
            h2.doop4__h2.h4 How Can You Split Data And Operations Between Ignite And Hadoop?
            .doop4__block
                .doop4__item
                  p.doop4__text Use Apache Ignite for tasks that require:<br> – Low-latency response time <span class="doop4__grey">(microseconds, milliseconds, seconds)</span>
                  p.doop4__text.pt-1 – High throughput operations <span class="doop4__grey">(thousands and millions of operations per second)</span> <br>– Real-time processing.
                .doop4__item
                  p.doop4__text Continue using Apache Hadoop for: <br>— High-latency operations <span class="doop4__grey">(dozens of seconds, minutes, hours)</span><br>— Batch processing
    // /.doop4

    section.doop5 
        .container
           h2.h4.doop5__h2 5 Steps To Implement The Architecture In Practice
           .doop5__blocks
              .doop5__block
                .doop5__item.post1
                   .doop5__number.h4 01
                   h4.doop5__title Download and install Apache Ignite to your system.
                .doop5__item.post2
                   .doop5__number.h4 02
                   h4.doop5__title Select a list of operations for Ignite.
                   p.doop5__text.pt-2 The best operations are those that require low-latency response time, high-throughput, and real-time analytics.
                .doop5__item.post3
                   .doop5__number.h4 03
                   p.doop5__text <span class="doop5__title">Consider enabling Ignite native persistence,</span> or use Ignite as a pure in-memory cache, or in-memory data grid that persists changes to Hadoop or another external database.
                .doop5__item.post4
                   .doop5__number.h4 04
                   h4.doop5__title Update your applications 
                   p.doop5__text.pt-2 Ensure they use Ignite native APIs to process Ignite data and Spark for federated queries.
                .doop5__item.post5 
                   .doop5__number.h4 05
                   .doop5__titleend If you need to replicate changes between Ignite and Hadoop clusters, use existing change-data-capture solutions:
                   .doop5__part.flexi
                     p Debezium<br>Kafka
                     p.doop5__middle GridGain Data Lake Accelerator<br>Oracle GoldenGate
                     p.doop5__end To write-through changes to Hadoop directly,<br> implement <a href="https://ignite.apache.org/docs/latest/persistence/external-storage" target="_blank">Ignite's CacheStore</a> interface.
                   
                                



    

   
    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Discover our quick start guide and build your first<br> application in 5-10 minutes
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/", target="_blank") Quick Start Guide
            article.nativebotblock.nativebotblock--learn
                h3.h4.nativebotblock__title
                    img(src="/public/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Read the Apache Spark acceleration article
                a.nativebotblock__link.arrowlink(href="/use-cases/spark-acceleration.html") Apache Spark Acceleration Article






