
<!DOCTYPE html>

<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Object store for Hadoop">
    <meta name="keywords" content="hadoop, ozone, hdds, objectstore, scale"/>
    <meta name="robots" content="index,follow"/>
    <meta name="language" content="en"/>

    <title>Apache Ozone</title>

    <base href="https://ozone.apache.org/">

    <link rel="canonical" href="https://ozone.apache.org">

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
          integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
    <link rel="stylesheet" href="style.css">

    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="manifest" href="/site.webmanifest">
    <link rel="mask-icon" href="/safari-pinned-tab.svg">
    <link rel="shortcut icon" href="/favicon.ico">
    <meta name="msapplication-TileColor" content="#da532c">
    <meta name="theme-color" content="#ffffff">

    
    <script>
      var _paq = window._paq = window._paq || [];
      

       
      _paq.push(['disableCookies']);
      

      _paq.push(['trackPageView']);
      _paq.push(['enableLinkTracking']);
      (function() {
        var u="//analytics.apache.org/";
        _paq.push(['setTrackerUrl', u+'matomo.php']);
        _paq.push(['setSiteId', '34']);
        var d=document, g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
        g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
      })();
    </script>
    

</head>

<body>


<div class="topnav">
    <div class="container">
        <ul class="breadcrumb col-md-4">
            <li>
                <img class="asf-logo" src="asf_feather.png"/>
                <a href="https://www.apache.org">Apache Software Foundation</a>
            </li>
        </ul>
        <div class="col-md-8">
            <ul class="pull-right breadcrumb">
                <li><a href="https://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                <li><a href="https://www.apache.org/events/current-event">Events</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                <li><a href="https://www.apache.org/security/">Security</a></li>
                <li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li>
        </ul>
        </div>
    </div>

    <nav class="navbar navbar-default navbar-static-top" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <ul class="nav navbar-nav navbar-brand">
                    <li>
                        <img src="ozone-logo.png" alt="Ozone logo"/>
                        <a href="https://ozone.apache.org/">Apache Ozone&trade;</a>
                    </li>
                </ul>
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                        data-target="#ozone-menu" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
            </div>

            <div id="ozone-menu" class="collapse navbar-collapse">
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="faq">FAQ</a></li>
                    <li><a href="downloads">Download</a></li>
                    <li><a href="docs">Documentation</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
                         <ul class="dropdown-menu">
                            <li><a href="community">Get involved</a></li>
                            <li><a href="events">Events</a></li>
                         </ul>
                    </li>
                    <li><a href="https://github.com/apache/ozone">Source</a></li>
                    <li><a href="https://cwiki.apache.org/confluence/display/OZONE">Wiki</a></li>
                </ul>
            </div>

    </nav>

    <div style="max-height: 200px; overflow: hidden;">
      <img src="sunrise-ozone.jpg" style="width: 100%; left:0px;"/>
    </div>

</div>

</div>

<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Release 0.3.0-alpha available</h1>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p><img src="releases/0.3.0.png" alt="arches-haiku"></p>
<p>Apache Hadoop Ozone 0.3.0-alpha is released.</p>
<ul>
<li>A new S3 compatible rest server is added. Ozone can be used from any
S3 compatible tools (<a href="https://hadoop.apache.org/ozone/docs/0.3.0-alpha/s3.html">docs</a>, <a href="https://issues.apache.org/jira/browse/HDDS-434">HDDS-434</a>)</li>
<li>Ozone Hadoop file system URL prefix is renamed from o3:// to o3fs://
(<a href="https://issues.apache.org/jira/browse/HDDS-651">HDDS-651</a>)</li>
<li>Extensive testing and stability improvements of OzoneFs.</li>
<li>Spark, YARN and Hive support and stability improvements.</li>
<li>Improved Pipeline handling and recovery.</li>
<li>Separated/dedicated classpath definitions for all the Ozone
components. (<a href="https://issues.apache.org/jira/browse/HDDS-447">HDDS-447</a>)</li>
</ul>
<p>This is an alpha release.</p>
<!-- raw HTML omitted -->

</div>
<div class="col-md-4" style="padding: 20px;">
    
       <p>
           <a href="https://www.apache.org/dyn/closer.cgi/hadoop/ozone/ozone-0.3.0-alpha/hadoop-ozone-0.3.0-alpha.tar.gz"
              class="btn btn-success">Download tar.gz</a></p>
       <p>
           (<a href="https://downloads.apache.org/hadoop/ozone/ozone-0.3.0-alpha/hadoop-ozone-0.3.0-alpha.tar.gz.mds">checksum</a>
           <a href="https://downloads.apache.org/hadoop/ozone/ozone-0.3.0-alpha/hadoop-ozone-0.3.0-alpha.tar.gz.asc">signature</a>)
       </p>
       <p>
           <a href="https://www.apache.org/dyn/closer.cgi/hadoop/ozone/ozone-0.3.0-alpha/hadoop-ozone-0.3.0-alpha-src.tar.gz"
              class="btn btn-warning">Download src</a></p>
       <p>
           (<a href="https://downloads.apache.org/hadoop/ozone/ozone-0.3.0-alpha/hadoop-ozone-0.3.0-alpha-src.tar.gz.mds">checksum</a>
           <a href="https://downloads.apache.org/hadoop/ozone/ozone-0.3.0-alpha/hadoop-ozone-0.3.0-alpha-src.tar.gz.asc">signature</a>)
       </p>
        
    
    <p><small>2018 Nov 22 </small></p>

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

<footer>
    <div class="container">

        <div class="col-md-12 trademark">
            <p>© 2024 The Apache Software Foundation <a href="http://apache.org">The Apache Software Foundation</a>,<br/>
                Apache, Apache Hadoop, Apache Ozone, the Apache feather logo, are trademarks of The Apache Software Foundation.
            <p>
        </div>
    </div>
</footer>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
        integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
        crossorigin="anonymous"></script>


</body>
</html>

