<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2015-11-24
 | Rendered using Apache Maven Fluido Skin 1.3.0
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20151124" />
    <meta http-equiv="Content-Language" content="en" />
    <title>AsterixDB &#x2013; Introduction</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.3.0.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />

      
    <script type="text/javascript" src="./js/apache-maven-fluido-1.3.0.min.js"></script>

                          
        
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

        ga('create', 'UA-41536543-1', 'uci.edu');
        ga('send', 'pageview');</script>
          
            </head>
        <body class="topBarDisabled">
          
                
                    
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                    <a href="http://asterixdb.apache.org/" id="bannerLeft">
                                                                                                <img src="images/asterixlogo.png"  alt="AsterixDB"/>
                </a>
                      </div>
        <div class="pull-right">  </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                  <li id="publishDate">Last Published: 2015-11-24</li>
                      
                
                    
                 <li id="projectVersion" class="pull-right">Version: 0.8.7-incubating</li>
      
                                            <li class="divider pull-right">|</li>
                        
    <li class="pull-right">              <a href="index.html" title="Documentation Home">
        Documentation Home</a>
  </li>

                        </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span3">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Documentation</li>
                                
      <li>
    
                          <a href="install.html" title="Installing and Managing AsterixDB using Managix">
          <i class="none"></i>
        Installing and Managing AsterixDB using Managix</a>
            </li>
                  
      <li class="active">
    
            <a href="#"><i class="none"></i>Deploying AsterixDB using YARN</a>
          </li>
                  
      <li>
    
                          <a href="aql/primer.html" title="AsterixDB 101: An ADM and AQL Primer">
          <i class="none"></i>
        AsterixDB 101: An ADM and AQL Primer</a>
            </li>
                  
      <li>
    
                          <a href="aql/primer-sql-like.html" title="AsterixDB 101: An ADM and AQL Primer (For SQL Fans)">
          <i class="none"></i>
        AsterixDB 101: An ADM and AQL Primer (For SQL Fans)</a>
            </li>
                  
      <li>
    
                          <a href="aql/js-sdk.html" title="AsterixDB Javascript SDK">
          <i class="none"></i>
        AsterixDB Javascript SDK</a>
            </li>
                  
      <li>
    
                          <a href="aql/datamodel.html" title="Asterix Data Model (ADM)">
          <i class="none"></i>
        Asterix Data Model (ADM)</a>
            </li>
                  
      <li>
    
                          <a href="aql/manual.html" title="Asterix Query Language (AQL)">
          <i class="none"></i>
        Asterix Query Language (AQL)</a>
            </li>
                  
      <li>
    
                          <a href="aql/functions.html" title="AQL Functions">
          <i class="none"></i>
        AQL Functions</a>
            </li>
                  
      <li>
    
                          <a href="aql/allens.html" title="AQL Allen's Relations Functions">
          <i class="none"></i>
        AQL Allen's Relations Functions</a>
            </li>
                  
      <li>
    
                          <a href="aql/similarity.html" title="AQL Support of Similarity Queries">
          <i class="none"></i>
        AQL Support of Similarity Queries</a>
            </li>
                  
      <li>
    
                          <a href="aql/externaldata.html" title="Accessing External Data">
          <i class="none"></i>
        Accessing External Data</a>
            </li>
                  
      <li>
    
                          <a href="feeds/tutorial.html" title="Support for Data Ingestion in AsterixDB">
          <i class="none"></i>
        Support for Data Ingestion in AsterixDB</a>
            </li>
                  
      <li>
    
                          <a href="udf.html" title="Support for User Defined Functions in AsterixDB">
          <i class="none"></i>
        Support for User Defined Functions in AsterixDB</a>
            </li>
                  
      <li>
    
                          <a href="aql/filters.html" title="Filter-Based LSM Index Acceleration">
          <i class="none"></i>
        Filter-Based LSM Index Acceleration</a>
            </li>
                  
      <li>
    
                          <a href="api.html" title="HTTP API to AsterixDB">
          <i class="none"></i>
        HTTP API to AsterixDB</a>
            </li>
            </ul>
                
                    
                
          <hr class="divider" />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                                                                                                                         <a href="https://code.google.com/p/hyracks/" title="Hyracks" class="builtBy">
        <img class="builtBy"  alt="Hyracks" src="images/hyrax_ts.png"    />
      </a>
                      </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span9" >
                                  
            <!-- ! 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.
 ! --><h1>Introduction</h1>
<div class="section">
<h2><a name="Table_of_Contents"></a><a name="toc" id="toc">Table of Contents</a></h2>

<ul>
  
<li><a href="#arch">Architecture Overview</a></li>
  
<li><a href="#prereq">Prerequisites</a></li>
  
<li><a href="#tut">Tutorial Installation</a></li>
  
<li><a href="#faq">FAQ and Common Issues</a></li>
  
<li><a href="#detail">Reference guide to AsterixDB&#x2019;s YARN Client</a></li>
</ul>
<p>This is a guide describing how to deploy AsterixDB onto a YARN-based environment.</p></div>
<div class="section">
<h2><a name="AsterixDB_and_the_YARN_environment"></a><a name="arch" id="arch">AsterixDB and the YARN environment</a></h2>
<p>AsterixDB uses a shared-nothing architecture and local file-based storage- not HDFS. Hence we are reliant on the local storage on each node (&#x2018;iodevices&#x2019; in AsterixDB ). In YARN there are 3 main types of storage available: </p>

<ul>
  
<li>HDFS file storage (only suitable for long-lived artifacts, can be slower than local disk)</li>
  
<li>Ephemeral container storage that is cleaned by YARN after a container exits (unsuitable except for transient artifacts)</li>
  
<li>Node-local destinations not managed by YARN, but which are accesable by the container and live beyond its termination.</li>
</ul>
<p>AsterixDB uses only the last type of storage, which is available with both the DefaultContainerExecutor and LinuxContainerExecutor. However keep in mind that with the DefaultContainerExecutor, the directory must be accessable by the same process that the YARN NodeManager is running as, while with the LinuxContainerExecutor it must be accessable by the unix user who is running the job.</p></div>
<div class="section">
<h2><a name="Prerequisites"></a><a name="prereq" id="prereq">Prerequisites</a></h2>
<p>For this tutorial it will be assumed that we have a YARN cluster with the proper environment variables set. To test this, try running the DistributedShell example that is distributed as part of Apache Hadoop. If that sample application can be run successfully then the environment should be acceptable for launching AsterixDB on to your YARN-enabled cluster.</p>
<div class="section">
<h3><a name="Vagrant_and_Puppet_Virtualized_cluster_for_Tutorial"></a>Vagrant and Puppet Virtualized cluster for Tutorial</h3>
<p>For the purposes of this tutorial, a virtualized cluster that matches all of the tutorial configurations can be found at <a class="externalLink" href="https://github.com/parshimers/yarn-sample-cluster">https://github.com/parshimers/yarn-sample-cluster</a>. It requires a machine with about 4-8GB of RAM to run. To start with this cluster, first clone the repository:</p>

<div class="source">
<div class="source">
<pre>    &#x21aa; git clone https://github.com/parshimers/yarn-sample-cluster.git
    Cloning into 'yarn-sample-cluster'...
    remote: Counting objects: 490, done.
    remote: Compressing objects: 100% (315/315), done.
    remote: Total 490 (delta 152), reused 490 (delta 152)
    Receiving objects: 100% (490/490), 521.34 KiB | 201.00 KiB/s, done.
    Resolving deltas: 100% (152/152), done.
    Checking connectivity... done.
</pre></div></div>
<p>If the &#x2018;hostmanager&#x2019; plugin for Vagrant isn&#x2019;t already installed, install it like so:</p>

<div class="source">
<div class="source">
<pre>    &#x21aa; vagrant plugin install vagrant-hostmanager
    Installing the 'vagrant-hostmanager' plugin. This can take a few minutes...
    Installed the plugin 'vagrant-hostmanager (1.5.0)'!
</pre></div></div>
<p>Then start the tutorial cluster. The hostmanger plugin may ask for sudo at some point, because it updates your hosts file to include the virtual machines.</p>

<div class="source">
<div class="source">
<pre>    &#x21aa; vagrant up
    Bringing machine 'nc2' up with 'virtualbox' provider...
    Bringing machine 'nc1' up with 'virtualbox' provider...
    Bringing machine 'cc' up with 'virtualbox' provider...
    ...
</pre></div></div>
<p>Once vagrant returns, the environment will be ready. The working directory with the Vagrantfile is also visible to each of the virtual machines (in the /vagrant directory), so we will unzip the Asterix binaries here as well for easy access. The YARN binary can be found on the AsterixDB <a class="externalLink" href="http://asterixdb.ics.uci.edu/download.html">downloads page</a></p>

<div class="source">
<div class="source">
<pre>&#x21aa; unzip -d asterix-yarn/ asterix-yarn-binary-assembly.zip
...
</pre></div></div>
<p>To log into the node from which we will run the rest of the tutorial, use &#x2018;vagrant ssh&#x2019; to get to the CC node and move to the YARN client&#x2019;s location:</p>

<div class="source">
<div class="source">
<pre>    &#x21aa; vagrant ssh cc
    [vagrant@cc ~]$
    [vagrant@cc ~]$ cd /vagrant/asterix-yarn
    [vagrant@cc asterix-yarn]$ 
</pre></div></div>
<h1><a name="tut" id="tut">Tutorial installation</a></h1></div></div>
<div class="section">
<h2><a name="Configuration"></a>Configuration</h2>
<p>To deploy AsterixDB onto a YARN cluster, we need to construct a configuration file that describes the resources that will be requested from YARN for AsterixDB. </p>

<div class="source">

<div class="source">
<pre>
<img src="images/yarn_clust.png" alt="Illustration of a simple YARN cluster with AsterixDB processes." />
<i>Fig. 1</i>:  Illustration of a simple YARN cluster with AsterixDB processes and their locations
</pre></div>
</div>
<p>This AsterixDB cluster description file corresponds to the above deployed scenario.</p>

<div class="source">
<div class="source">
<pre>    &lt;cluster xmlns=&quot;yarn_cluster&quot;&gt;
        &lt;name&gt;my_awesome_instance&lt;/name&gt;
        &lt;txn_log_dir&gt;/home/yarn/&lt;/txn_log_dir&gt;
        &lt;iodevices&gt;/home/yarn/&lt;/iodevices&gt;
        &lt;store&gt;asterix-data&lt;/store&gt;
        &lt;master_node&gt;
            &lt;id&gt;cc&lt;/id&gt;
            &lt;client_ip&gt;10.10.0.2&lt;/client_ip&gt;
            &lt;cluster_ip&gt;10.10.0.2&lt;/cluster_ip&gt;
            &lt;client_port&gt;1098&lt;/client_port&gt;
            &lt;cluster_port&gt;1099&lt;/cluster_port&gt;
            &lt;http_port&gt;8888&lt;/http_port&gt;
        &lt;/master_node&gt;
        &lt;node&gt;
            &lt;id&gt;nc1&lt;/id&gt;
            &lt;cluster_ip&gt;10.10.0.3&lt;/cluster_ip&gt;
        &lt;/node&gt;
        &lt;node&gt;
            &lt;id&gt;nc2&lt;/id&gt;
            &lt;cluster_ip&gt;10.10.0.4&lt;/cluster_ip&gt;
        &lt;/node&gt;
        &lt;metadata_node&gt;nc1&lt;/metadata_node&gt;
    &lt;/cluster&gt;
</pre></div></div>
<p>In this example we have 3 NCs and one CC. Each node is defined by a unique name (not necessarily hostname) and an IP on which AsterixDB nodes will listen and communicate with eachother. This is the &#x2018;cluster_ip&#x2019; parameter. The &#x2018;client_ip&#x2019; parameter is the interface on which client-facing services are presented, for example the web interface. For the next step this file will be saved as &#x2018;my_awesome_cluster_desc.xml&#x2019; in the configs directory.</p></div>
<div class="section">
<h2><a name="Installing_and_starting_the_instance"></a>Installing and starting the instance</h2>
<p>With this configuration in hand, the YARN client can be used to deploy AsterixDB onto the cluster:</p>

<div class="source">
<div class="source">
<pre>    [vagrant@cc asterix-yarn]$ bin/asterix -n my_awesome_instance -c configs/my_awesome_cluster_desc.xml install
    Waiting for new AsterixDB Instance to start  .
    Asterix successfully deployed and is now running.
</pre></div></div>
<p>The instance will be visible in the YARN RM similar to the below image 
<div class="source"> </p>
<div class="source">
<pre> <img src="images/running_inst.png" alt="Illustration of a simple YARN cluster with AsterixDB processes." /> <i>Fig. 2</i>: Hadoop YARN Resource Manager dashboard with running AsterixDB instance </pre></div> </div>
<p>Once the client returns success, the instance is now ready to be used. We can now use the asterix instance at the CC&#x2019;s IP (10.10.0.2), on the default port (19001).</p>

<div class="source">

<div class="source">
<pre>
<img src="images/asterix_webui.png" alt="Illustration of a simple YARN cluster with AsterixDB processes." />
<i>Fig. 3</i>:  AsterixDB Web User Interface
</pre></div>
</div>
<p>From here, to try things out we could run the ADM &amp; AQL 101 tutorial or any other sample workload.</p></div>
<div class="section">
<h2><a name="Stopping_the_instance"></a>Stopping the instance</h2>
<p>To stop the instance that was just deployed, the <tt>stop</tt> command is used:</p>

<div class="source">
<div class="source">
<pre>    [vagrant@cc asterix-yarn]$ bin/asterix -n my_awesome_instance stop
    Stopping instance my_awesome_instance
</pre></div></div>
<p>This attempts a graceful shutdown of the instance. If for some reason this does not succeed, the <tt>kill</tt> action can be used to force shutdown in a similar fashion:</p>

<div class="source">
<div class="source">
<pre>    [vagrant@cc asterix-yarn]$ bin/asterix -n my_awesome_instance kill
    Are you sure you want to kill this instance? In-progress tasks will be aborted
    Are you sure you want to do this? (yes/no): yes
</pre></div></div></div>
<div class="section">
<h2><a name="Managing_stopped_instances"></a>Managing stopped instances</h2>
<p>After stopping the instance no containers on any YARN NodeManagers are allocated. However, the state of the instance is still persisted on the local disks (and to a lesser extent, HDFS) of each machine where a Node Controller was deployed, in the iodevices and transaction log folders. Every instance, running or not can be viewed via the <tt>describe</tt> action:</p>

<div class="source">
<div class="source">
<pre>    [vagrant@cc asterix-yarn]$ bin/asterix describe
    Existing AsterixDB instances:
    Instance my_awesome_instance is stopped
</pre></div></div></div>
<div class="section">
<h2><a name="Starting_inactive_instances"></a>Starting inactive instances</h2>
<p>To start the instance back up once more, the <tt>start</tt> action is used:</p>

<div class="source">
<div class="source">
<pre>    [vagrant@cc asterix-yarn]$ bin/asterix -n my_awesome_instance start
    Waiting for AsterixDB instance to resume .
    Asterix successfully deployed and is now running.
</pre></div></div></div>
<div class="section">
<h2><a name="Shutting_down_vagrant"></a>Shutting down vagrant</h2>
<p>To stop the virtual machines, issue the vagrant halt command from the host machine in the folder containing the Vagrantfile:</p>

<div class="source">
<div class="source">
<pre>    &#x21aa; vagrant halt
</pre></div></div>
<h1><a name="detail" id="detail">Listing of Commands and Options</a></h1></div>
<div class="section">
<h2><a name="Overview"></a>Overview</h2>
<p>All commands take the format</p>

<div class="source">
<div class="source">
<pre>    asterix [action-specific option] [action]
</pre></div></div>
<div class="section">
<h3><a name="Technical_details"></a>Technical details</h3>
<p>AsterixDB&#x2019;s YARN client is based on static allocation of containers within Node Managers based on IP. The AM and CC processes are currently not integrated in any fashion.</p>
<p>The <tt>asterix</tt> command itself is simply a wrapper/launcher around the AsterixClient java class, that provides time-saving default parameters. It is possible to run the client directly with <tt>java -jar</tt> given the correct options as well.</p></div></div>
<div class="section">
<h2><a name="Actions"></a>Actions</h2>
<p>Below is a description of the various actions available via the AsterixDB YARN client</p>

<table border="0" class="table table-striped">
  <thead>
    
<tr class="a">
      
<th>Action </th>
      
<th>Description </th>
    </tr>
  </thead>
  <tbody>
    
<tr class="b">
      
<td><tt>start</tt> </td>
      
<td>Starts an existing instance specified by the -name flag </td>
    </tr>
    
<tr class="a">
      
<td><tt>install</tt> </td>
      
<td>Deploys and starts an AsterixDB instance described by the config specified in the -c parameter, and named by the -n parameter </td>
    </tr>
    
<tr class="b">
      
<td><tt>stop</tt> </td>
      
<td>Attempts graceful shutdown of an AsterixDB instance specified in the -name parameter </td>
    </tr>
    
<tr class="a">
      
<td><tt>kill</tt> </td>
      
<td>Forcefully stops an instance by asking YARN to terminate all of its containers. </td>
    </tr>
    
<tr class="b">
      
<td><tt>destroy</tt> </td>
      
<td>Remove the instance specified by -name and all of its stored resources from the cluster </td>
    </tr>
    
<tr class="a">
      
<td><tt>describe</tt> </td>
      
<td>Show all instances, running or not, visible to the AsterixDB YARN client </td>
    </tr>
    
<tr class="b">
      
<td><tt>backup</tt> </td>
      
<td>Copies the artifacts from a stopped instance to another directory on HDFS so that the instance can be reverted to that state </td>
    </tr>
    
<tr class="a">
      
<td><tt>restore</tt> </td>
      
<td>Restores an instance to the state saved in a snapshot </td>
    </tr>
    
<tr class="b">
      
<td><tt>lsbackup</tt> </td>
      
<td>Lists the stored snapshots from an instance </td>
    </tr>
    
<tr class="a">
      
<td><tt>rmbackup</tt> </td>
      
<td>Removes a snapshot from HDFS </td>
    </tr>
    
<tr class="b">
      
<td><tt>libinstall</tt></td>
      
<td>Installs an external library or UDF for use in queries </td>
    </tr>
  </tbody>
</table></div>
<div class="section">
<h2><a name="Options"></a>Options</h2>
<p>Below are all availabe options, and which actions they can be applied to</p>

<table border="0" class="table table-striped">
  <thead>
    
<tr class="a">
      
<th>Option </th>
      
<th>Long Form </th>
      
<th>Short Form </th>
      
<th>Usage </th>
      
<th>Applicability </th>
    </tr>
  </thead>
  <tbody>
    
<tr class="b">
      
<td>Configuration Path </td>
      
<td><tt>-asterixConf</tt> </td>
      
<td><tt>-c</tt> </td>
      
<td><tt>-c [/path/to/file]</tt>. Path to an AsterixDB Cluster Description File </td>
      
<td>Only required with <tt>create</tt> . A configuration in DFS defines the existance of an instance. </td>
    </tr>
    
<tr class="a">
      
<td>Instance Name </td>
      
<td><tt>-name</tt> </td>
      
<td><tt>-n</tt> </td>
      
<td><tt>-n [instance name]</tt> Name/Identifier for instance. </td>
      
<td>Required for all actions except <tt>describe</tt> and <tt>lsbackup</tt> </td>
    </tr>
    
<tr class="b">
      
<td>Asterix Binary Path </td>
      
<td><tt>-asterixTar</tt> </td>
      
<td><tt>-tar</tt> </td>
      
<td><tt>-tar [/path/to/binary]</tt> Path to asterix-server binary. </td>
      
<td>This is the AsterixDB server binary that is distributed and run on the DFS. Usually set by default via the launcher script and cached for each instance. Can be manually set, only used in <tt>create</tt> and <tt>install</tt> with <tt>-r</tt> </td>
    </tr>
    
<tr class="a">
      
<td>Force </td>
      
<td><tt>-force</tt> </td>
      
<td><tt>-f</tt> </td>
      
<td><tt>-f</tt>. Use at your own risk. Disables any sanity-checking during an action. </td>
      
<td>Can be applied to any action, but is mostly useful in cases where an instance cannot be removed properly via <tt>destroy</tt> and cleanup of DFS files is desired. </td>
    </tr>
    
<tr class="b">
      
<td>Refresh </td>
      
<td><tt>-refresh</tt> </td>
      
<td><tt>-r</tt> </td>
      
<td><tt>-r</tt>. Replaces cached binary with one mentioned in <tt>-tar</tt>. </td>
      
<td>This only has an effect with the <tt>start</tt> action. It can be used to replace/upgrade the binary cached for an instance on the DFS. </td>
    </tr>
    
<tr class="a">
      
<td>Base Parameters </td>
      
<td><tt>-baseConf</tt> </td>
      
<td><tt>-bc</tt> </td>
      
<td><tt>-bc [path/to/params]</tt>. Specifies parameter file to use during instance creation/alteration. </td>
      
<td>This file specifies various internal properties of the AsterixDB system, such as Buffer Cache size and Page size, among many others. It can be helpful to tweak parameters in this file, however caution should be exercised in keeping them at sane values. Only used during <tt>alter</tt> and <tt>create</tt>. </td>
    </tr>
    
<tr class="b">
      
<td>External library path </td>
      
<td><tt>-externalLibs</tt> </td>
      
<td><tt>-l</tt> </td>
      
<td><tt>-l [path/to/library]</tt>. Specifies an external library to upload to an existing instance. </td>
      
<td>Only used in <tt>libinstall</tt>. Specifies the file containing the external function to install </td>
    </tr>
    
<tr class="a">
      
<td>External library dataverse. </td>
      
<td><tt>-libDataverse</tt> </td>
      
<td><tt>-ld</tt> </td>
      
<td><tt>-ld [existing dataverse name]</tt> </td>
      
<td>Only used in <tt>libinstall</tt>. Specifies the dataverse to install the library in an <tt>-l</tt> option to. </td>
    </tr>
    
<tr class="b">
      
<td>Snapshot ID </td>
      
<td><tt>-snapshot</tt> </td>
      
<td>[none] </td>
      
<td><tt>-snapshot [backup timestamp/ID]</tt> </td>
      
<td>Used with <tt>rmbackup</tt> and <tt>restore</tt> to specify which backup to perform the respective operation on. </td>
    </tr>
  </tbody>
</table>
<h1><a name="faq" id="faq">Frequently Asked Questions and Common Issues</a></h1>
<div class="section">
<h3><a name="Q:_Where_are_the_AsterixDB_logs_located"></a>Q: Where are the AsterixDB logs located?</h3>
<p>A: YARN manages the logs for each container. They are visible in the YARN Resource Manager&#x2019;s web interface or through the hadoop command line utilities ( see <a class="externalLink" href="http://hortonworks.com/blog/simplifying-user-logs-management-and-access-in-yarn/">http://hortonworks.com/blog/simplifying-user-logs-management-and-access-in-yarn/</a> for more details). </p></div>
<div class="section">
<h3><a name="Q:_Why_does_AsterixDB_fail_to_start_and_the_logs_contain_errors_like_Container_is_running_beyond_virtual_memory_limits._"></a>Q: Why does AsterixDB fail to start, and the logs contain errors like &#x2018;Container is running beyond virtual memory limits.&#x2019; ?</h3>
<p>A: This is a quirk of YARN&#x2019;s memory management that can be observed on certain operating systems (mainly CentOS). It is benign unless it causes problems of this type. A work around is to set <tt>yarn.nodemanager.vmem-check-enabled</tt> to <tt>false</tt> in the yarn-site.xml configuration for Hadoop YARN. This makes the NodeManagers avoid checking the virtual memory entirely and instead rely on resident set size to check memory usage among containers.</p></div>
<div class="section">
<h3><a name="Q:_How_do_I_upgrade_my_existing_instance"></a>Q: How do I upgrade my existing instance?</h3>
<p>A: This is a complex question. Generally, one can use the <tt>refresh</tt> option to upgrade the version of an extant AsterixDB instance. However one must be cautious- we do not guarantee ABI compatability between releases. Therefore extreme caution should be exercised when attempting to upgrade this way!</p></div>
<div class="section">
<h3><a name="Q:_Does_AsterixDB_work_on_YARN_for_Windows"></a>Q: Does AsterixDB work on YARN for Windows?</h3>
<p>A: In general, yes! It has been done without much real issue. However it is a infrequent use case, so expect the deployment to have some hiccups. We&#x2019;re always listening on the <a class="externalLink" href="mailto:users@asterixdb.incubator.apache.org">users@asterixdb.incubator.apache.org</a> mailing list for any issues.</p></div></div>
                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
              <div class="row span12">Copyright &copy;                    2015
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                    
      </div>

                                                                  <?xml version="1.0" encoding="UTF-8"?>
<div class="row-fluid">Apache AsterixDB, AsterixDB, Apache, the Apache
        feather logo, and the Apache AsterixDB project logo are either
        registered trademarks or trademarks of The Apache Software
        Foundation in the United States and other countries.
        All other marks mentioned may be trademarks or registered
        trademarks of their respective owners.</div>
                  
        
                </div>
    </footer>
  </body>
</html>
