You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2011/10/13 21:14:00 UTC

svn commit: r1183037 [1/4] - in /incubator/accumulo/site/trunk: ./ cgi-bin/ content/ content/accumulo/ content/accumulo/css/ content/accumulo/images/ content/accumulo/user_manual_1.3-incubating/ content/accumulo/user_manual_1.4-incubating/ lib/ templates/

Author: kturner
Date: Thu Oct 13 19:13:58 2011
New Revision: 1183037

URL: http://svn.apache.org/viewvc?rev=1183037&view=rev
Log:
initial checkin of web site

Added:
    incubator/accumulo/site/trunk/
    incubator/accumulo/site/trunk/cgi-bin/
    incubator/accumulo/site/trunk/content/
    incubator/accumulo/site/trunk/content/accumulo/
    incubator/accumulo/site/trunk/content/accumulo/css/
    incubator/accumulo/site/trunk/content/accumulo/css/accumulo.css
    incubator/accumulo/site/trunk/content/accumulo/images/
    incubator/accumulo/site/trunk/content/accumulo/images/accumulo-logo.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/images/apache-incubator-logo.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/images/master.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/images/overview.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/index.mdtext
    incubator/accumulo/site/trunk/content/accumulo/mailing_list.mdtext
    incubator/accumulo/site/trunk/content/accumulo/notable_features.mdtext
    incubator/accumulo/site/trunk/content/accumulo/screenshots.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Design.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Shell.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Administration.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Analytics.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Contents.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/High_Speed_Ingest.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Introduction.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Security.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Shell_Commands.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Table_Configuration.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Table_Design.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Writing_Accumulo_Clients.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/accumulo_user_manual.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/data_distribution.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/failure_handling.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/img1.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/img2.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/img3.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/img4.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/img5.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/index.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Accumulo_Design.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Accumulo_Shell.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Administration.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Analytics.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Contents.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/High_Speed_Ingest.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Introduction.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Security.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Shell_Commands.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Table_Configuration.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Table_Design.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/Writing_Accumulo_Clients.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/accumulo_user_manual.mdtext
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/data_distribution.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/failure_handling.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/img1.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/img2.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/img3.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/img4.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/img5.png   (with props)
    incubator/accumulo/site/trunk/content/accumulo/user_manual_1.4-incubating/index.mdtext
    incubator/accumulo/site/trunk/lib/
    incubator/accumulo/site/trunk/lib/path.pm
    incubator/accumulo/site/trunk/lib/view.pm
    incubator/accumulo/site/trunk/templates/
    incubator/accumulo/site/trunk/templates/sidenav.mdtext
    incubator/accumulo/site/trunk/templates/single_narrative.html
    incubator/accumulo/site/trunk/templates/skeleton.html   (with props)

Added: incubator/accumulo/site/trunk/content/accumulo/css/accumulo.css
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/css/accumulo.css?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/css/accumulo.css (added)
+++ incubator/accumulo/site/trunk/content/accumulo/css/accumulo.css Thu Oct 13 19:13:58 2011
@@ -0,0 +1,144 @@
+/*
+* 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.
+*/
+body {
+    color: white;
+    font-family: Verdana,Geneva,sans-serif;
+    font-size: 10pt;
+    margin: 0;
+}
+#banner {
+    margin-top: 0;
+    min-width: 850px;
+    padding: 20px;
+}
+#logo {
+    float: left;
+}
+#bannertext {
+    margin-right: 150px;
+    text-align: center;
+}
+.clear {
+    clear: both;
+}
+a {
+    color: #107EC0;
+}
+a:visited {
+    color: #107EC0;
+}
+a:hover {
+    background-color: #E6EBED;
+    color: #107EC0;
+}
+a img {
+    border: medium none;
+}
+h1, h2, h3, h4, h5, h6 {
+    border-bottom: 2px dashed #666666;
+    color: black;
+    text-transform: uppercase;
+}
+#content {
+    color: #333333;
+    margin: 0 150px 20px 220px;
+    padding: 0 8px 40px;
+}
+#content h1 {
+    font-size: 1.4em;
+    padding: 15px;
+}
+#content h2 {
+    border-bottom: 1px dashed #666666;
+    font-size: 1.2em;
+    margin-top: 2em;
+}
+#content h3, h4, h5, h6 {
+    border-bottom: medium none;
+    font-size: 1em;
+    margin-bottom: 0;
+}
+.codehilite {
+    background-color: #FFFFFF;
+    border-radius: 10px 10px 10px 10px;
+    padding: 0.01em 1em;
+}
+#navigation {
+    -moz-border-bottom-colors: none;
+    -moz-border-image: none;
+    -moz-border-left-colors: none;
+    -moz-border-right-colors: none;
+    -moz-border-top-colors: none;
+    background: none repeat scroll 0 0 #F5F8FA;
+    border-color: #E6EBED #E6EBED #E6EBED -moz-use-text-color;
+    border-radius: 0 10px 10px 0;
+    border-style: solid solid solid none;
+    border-width: 1px 1px 1px medium;
+    color: #000033;
+    float: left;
+    font-size: 0.9em;
+    margin: 0 0 20px;
+    padding: 15px 15px 5px 25px;
+    width: 170px;
+}
+#navigation img {
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+}
+#navigation h1 {
+    border-bottom: 2px dashed #666666;
+    color: #000000;
+    font-size: 1em;
+    margin-bottom: 0;
+    margin-top: 0.8em;
+    padding: 0;
+}
+#navigation ul {
+    list-style: none outside none;
+    margin: 0;
+    padding: 0;
+}
+#navigation li {
+    border-bottom: 1px solid #CCCCCC;
+    margin: 0.2em 0;
+    padding: 0;
+}
+#navigation li a {
+    margin: 0;
+    text-decoration: none;
+}
+#navigation li a:hover {
+    background: none repeat scroll 0 0 transparent;
+    color: #193240;
+}
+#footer {
+    border-top: 1px solid #CCCCCC;
+    color: #666666;
+    font-size: 0.8em;
+    margin: 20px 150px 20px 250px;
+    padding: 0 8px;
+    text-align: center;
+}
+dd {
+}
+dl {
+}
+dt {
+    display: inline;
+    float: left;
+}

Added: incubator/accumulo/site/trunk/content/accumulo/images/accumulo-logo.png
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/images/accumulo-logo.png?rev=1183037&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/accumulo/site/trunk/content/accumulo/images/accumulo-logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/accumulo/site/trunk/content/accumulo/images/apache-incubator-logo.png
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/images/apache-incubator-logo.png?rev=1183037&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/accumulo/site/trunk/content/accumulo/images/apache-incubator-logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/accumulo/site/trunk/content/accumulo/images/master.png
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/images/master.png?rev=1183037&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/accumulo/site/trunk/content/accumulo/images/master.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/accumulo/site/trunk/content/accumulo/images/overview.png
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/images/overview.png?rev=1183037&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/accumulo/site/trunk/content/accumulo/images/overview.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/accumulo/site/trunk/content/accumulo/index.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/index.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/index.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/index.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,22 @@
+Title: Apache Accumulo (Incubating)
+Accumulo is a sorted, distributed key/value store based on Google's
+[BigTable][1] design.  It is built on top of Apache [Hadoop][2],
+[Zookeeper][3], and [Thrift][4].  It features a few novel improvements on the
+BigTable design in the form of cell-level access labels and a server-side
+programming mechanism that can modify key/value pairs at various points in the
+data management process.  Other notable improvements and feature are outlined
+[here](notable_features.html).
+
+Google published the design of BigTable in 2006.  Several other open source
+projects have implemented aspects of this design including [HBase][5], [Hypertable][6],
+and [Cassandra][7].  Accumulo began its development in 2008 and became an [Apache 
+Podling][8] in 2011.
+
+[1]: http://labs.google.com/papers/bigtable.html "BigTable"
+[2]: http://hadoop.apache.org/                   "Hadoop"
+[3]: http://zookeeper.apache.org                 "Zookeeper"
+[4]: http://thrift.apache.org                    "Thrift"
+[5]: http://hbase.apache.org                     "HBase"
+[6]: http://hypertable.org                       "Hypertable"
+[7]: http://cassandra.apache.org                 "Cassandra"
+[8]: http://incubator.apache.org/                "Apache Incubator"
\ No newline at end of file

Added: incubator/accumulo/site/trunk/content/accumulo/mailing_list.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/mailing_list.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/mailing_list.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/mailing_list.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,38 @@
+Title: Mailing Lists
+
+### Users
+
+  - [Subscribe][1]
+  - [Post][2]
+  - [Unsubscribe][3]
+  - [Archive][4]
+
+### Developers
+
+This list is for anyone interested in contributing or following development activities.
+
+  - [Subscribe][5]
+  - [Post][6]
+  - [Unsubscribe][7]
+  - [Archive][8]
+
+### Commits
+
+This list is for following svn commits.
+
+  - [Subscribe][9]
+  - [Unsubscribe][10]
+  - [Archive][11]
+
+  [1]: mailto:accumulo-users-subscribe@incubator.apache.org
+  [2]: mailto:accumulo-users@incubator.apache.org
+  [3]: mailto:accumulo-users-unsubscribe@incubator.apache.org
+  [4]: http://mail-archives.apache.org/mod_mbox/incubator-accumulo-users
+  [5]: mailto:accumulo-dev-subscribe@incubator.apache.org
+  [6]: mailto:accumulo-dev@incubator.apache.org
+  [7]: mailto:accumulo-dev-unsubscribe@incubator.apache.org
+  [8]: http://mail-archives.apache.org/mod_mbox/incubator-accumulo-dev
+  [9]: mailto:accumulo-commits-subscribe@incubator.apache.org
+  [10]: mailto:accumulo-commits-unsubscribe@incubator.apache.org
+  [11]: http://mail-archives.apache.org/mod_mbox/incubator-commits-dev
+

Added: incubator/accumulo/site/trunk/content/accumulo/notable_features.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/notable_features.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/notable_features.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/notable_features.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,356 @@
+Title: Notable Features
+
+## Categories
+
+* [Table Design and Configuration](#design)
+* [Integrity/Availability](#integrity)
+* [Performance](#performance)
+* [Testing](#testing)
+* [Client API](#client)
+* [Extensible Behaviors](#behaviors)
+* [General Administration](#admin)
+* [Internal Data Management](#internal_dm)
+* [On-demand Data Management](#ondemand_dm)
+
+***
+
+## Table Design and Configuration <a id="design"></a>
+
+### Iterators
+
+A server-side programming mechanism to encode functions such as filtering and
+aggregation within the data management steps (scopes where data is read from or
+written to disk) that happen in the tablet server.
+
+### Cell labels
+
+An additional portion of the Key that sorts after the column qualifier and
+before the timestamp. It is called column visibility and enables expressive
+cell-level access control. Authorizations are passed with each query to control
+what data is returned to the user. The column visibilities are boolean AND and
+OR combinations of arbitrary strings (such as "(A&B)|C") and authorizations
+are sets of strings (such as {C,D}).
+
+### Constraints
+
+Configurable conditions under which writes to a table will be rejected.
+Constraints are written in Java and configurable on a per table basis.
+
+### Sharding
+
+Through the use of specialized iterators, Accumulo can be a parallel sharded
+document store. For example wikipedia could be stored and searched for
+documents containing certain words.
+
+### Large Rows
+
+When reading rows, there is no requirement that an entire row fits into memory.
+
+
+## Integrity/Availability <a id="integrity"></a>
+
+### Master fail over
+
+Multiple masters can be configured.  Zookeeper locks are used to determine
+which master is active.  The remaining masters simply wait for the current
+master to lose its lock.  Current master state is held in the metadata table
+and Zookeeper (see [FATE](#fate)).
+
+### Write ahead log
+
+Tablet servers send mutations to loggers, not HDFS.  Each mutation is written
+to multiple loggers, before being committed.  In normal configurations, loggers
+are run on every server that runs a tablet server.  When a log is needed for
+recovery, it is copied into HDFS.  For efficient recovery, the log is sorted as
+it is copied.
+
+### Logical time
+
+A mechanism to ensure that server set times never go backwards, even when time
+across the cluster is incorrect. This ensures that updates and deletes are not
+lost. If a tablet is served on machine with time a year in the future, then the
+tablet will continue to issue new timestamps a year in the future even when it
+moves to another server. In this case the timestamps preserve ordering, but
+lose their meaning. In addition to logical time, Accumulo has master
+authoritative time. The master averages the time of all of the tablet servers
+and sends this back to the tablet servers. Tablet servers use this information
+to adjust the timestamps they issue. So logical time ensures ordering is
+always correct and master authoritative time tries to ensure that timestamps
+are meaningful.
+
+### Logical Time for bulk import (1.4)
+
+Logical time as described above works with streaming (batch) ingest, where the
+tablet server assigns the timestamp.  Logical time is also important for bulk
+imported data, for which the client code may be choosing a timestamp.  Accumulo
+1.4 uses specialized system iterators to lazily set times in a bulk imported
+file.  This mechanism guarantees that times set by unsynchronized multi-node
+applications (such as those running on MapReduce) will maintain some semblance
+of causal ordering.  This mitigates the problem of the time being wrong on the
+system that created the file for bulk import. These times are not set when the
+file is imported, but whenever it is read by scans or compactions. At import, a
+time is obtained and always used by the specialized system iterator to set that
+time.
+
+### FATE (1.4)
+
+Fault Tolerant Executor. A framework for executing operations in a fault
+tolerant manner. In the previous release, if the master process died in the
+middle of creating a table it could leave the system in an inconsistent state.
+With this new framework, if the master dies in the middle of create table it
+will continue on restart. Also the client requesting the create table operation
+will never know anything happened. The framework serializes work in Zookeeper
+before attempting to do the work. Clients start a FATE transaction, seed it
+with work, and then wait for it to finish. Most table operations are executed
+using this framework. Persistent, per table, read-write locks are created in
+Zookeeper to synchronize operations across process faults.
+
+### Scalable master
+
+Stores its metadata in an Accumulo table and Zookeeper.
+
+### Isolation
+
+Scans will not see data inserted into a row after the scan of that row begins.
+
+## Performance <a id="performance"></a>
+
+### Relative encoding
+
+If consecutive keys have identical portions (row, colf, colq, or colvis), there
+is a flag to indicate that a portion is the same as that of the previous key.
+This is applied when keys are stored on disk and when transferred over the
+network.
+
+### Native In-Memory Map
+
+By default data written is stored outside of Java managed memory into a C++ STL
+map of maps.  It maps rows to columns to values.  This hierarchical structure
+improves performance of inserting a mutation with multiple column values in a
+single row. A custom STL allocator is used to avoid the global malloc lock and
+memory fragmentation.
+
+### Scan pipeline
+
+A long running Accumulo scan will eventually cause multiple threads to start.
+One server thread to read data from disk, one server thread to serialize and
+send data, and one client thread to deserialize and read data. When pipelining
+kicks in, it substantially increases scan speed while maintaining key order. It
+does not activate for short scans.
+
+### Caching
+
+Recently scanned data is cached into memory.  There are separate caches for
+indexes and data.  Caching can be turned on and off for individual tables.
+
+### Multi-level RFile Index (1.4)
+
+RFiles store an index of the last key in each block. For large files the index
+can become quite large. When the index is large a lot of memory is consumed and
+files take a long time to open. To avoid this problem, RFiles in 1.4 have a
+multi-level index tree. Index blocks can point to other index blocks or data
+blocks. The entire index never has to be resident, even when the file is
+written. When an index block exceeds the configurable size threshold, its
+written out between data blocks. The size of index blocks is configurable on a
+per table basis.
+
+## Testing <a id="testing"></a>
+
+### Mock
+
+The Accumulo client API has a mock implementation that is useful writing unit
+test against Accumulo. Mock Accumulo is in memory and in process.
+
+### Functional Test
+
+Small, system-level tests of basic Accumulo features run in a test harness,
+external to the build and unit-tests.  These tests start a complete Accumulo
+instance, and require Hadoop and Zookeeper to be running.  They attempt to
+simulate the basic functions of Accumulo, as well as common failure conditions,
+such as lost disks, killed processes, and read-only file systems.
+
+### Scale Test
+
+A test suite that verifies data is not lost at scale. This test runs many
+ingest clients that continually create linked lists containing 25 million
+nodes. At some point the clients are stopped and a map reduce job is run to
+ensure no linked list has a hole. A hole indicates data was lost by Accumulo.
+The Agitator can be run in conjunction with this test to randomly kill tablet
+servers. This test suite has uncovered many obscure data loss bugs.  This test
+also helps find bugs that impact uptime and stability when run for days or
+weeks.
+
+### Random Walk Test
+
+A test suite that looks for unexpected system states that may emerge in
+plausible real-world applications.  Application components are defined as test
+nodes (such as create table, insert data, scan data, delete table, etc.), and
+are programmed as Java classes that implement a specified interface.  The nodes
+are connected together in a graph specified in an XML document. Many processes
+independently and concurrently execute a random walk of the test graphs. Some
+of the test graphs have a concept of correctness and can verify data over time.
+Other tests have no concept of data correctness and have the simple goal of
+crashing Accumulo. Many obscure bugs have been uncovered by this testing
+framework and subsequently corrected.
+
+## Client API <a id="client"></a>
+
+### [Batch Scanner][4]
+
+Takes a list of Ranges, batches them to the appropriate tablet servers, and
+returns data as it is received (i.e. not in sorted order).
+
+### [Batch Writer][4]
+
+Clients buffer writes in memory before sending them in batches to the
+appropriate tablet servers.
+
+### [Bulk Import][6]
+
+Instead of writing individual mutations to Accumulo, entire files of sorted key
+value pairs can be imported. These files are moved into the Accumulo directory
+and referenced by Accumulo. This feature is useful for ingesting a large amount
+of data. This method of ingest usually offers higher throughput at the cost of
+higher latency for data availability for scans.  Usually the data is sorted
+using map reduce and then bulk imported. This method of ingest also allows for
+flexibility in resource allocation.  The nodes running map reduce to sort data
+could be different from the Accumulo nodes.
+
+### [Map Reduce][4]
+
+Accumulo can be a source and/or sink for map reduce jobs.
+
+
+## Extensible Behaviors <a id="behaviors"></a>
+
+### Pluggable balancer
+
+Users can provide a balancer plugin that decides how to distribute tablets
+across a table.  These plugins can be provided on a per table basis.  This is
+useful for ensuring a particular table's tablets are placed optimally for
+tables with special query needs.  The default balancer randomly spreads each
+table's tablets across the cluster.  It takes into account where a tablet was
+previously hosted to leverage locality.  When a tablet splits, the default
+balancer moves one child to another tablet server.  The assumption here is that
+splitting tablets are being actively written to, so this keeps write load evenly
+spread.
+
+### Pluggable memory manager
+
+The plugin that decides when and what tablets to minor compact is configurable.
+The default plugin compacts the largest tablet when memory is over a certain
+threshold.  It varies the threshold over time depending on minor compaction
+speed.  It flushes tablets that are not written to for a configurable time
+period.
+
+### Pluggable logger assignment strategy
+
+The plugin that decided which loggers should be assigned to which tablet
+servers is configurable.
+
+## General Administration <a id="admin"></a>
+
+### Monitor page
+
+A simple web server provides basic information about the system health and
+performance.  It displays table sizes, ingest and query statistics, server
+load, and last-update information.  It also allows the user to view recent
+diagnostic logs and [traces](#tracing5).
+
+### Tracing
+
+It can be difficult to determine why some operations are taking longer than
+expected. For example, you may be looking up items with very low latency, but
+sometimes the lookups take much longer. Determining the cause of the delay is
+difficult because the system is distributed, and the typical lookup is fast.
+Accumulo has been instrumented to record the time that various operations take
+when tracing is turned on. The fact that tracing is enabled follows all the
+requests made on behalf of the user throughout the distributed infrastructure
+of Accumulo, and across all threads of execution.
+
+### Online reconfiguration
+
+System and per table configuration is stored in Zookeeper. Many, but not all,
+configuration changes take effect while Accumulo is running. Some do not take
+effect until server processes are restarted.
+
+### Table renaming
+
+Tables can be renamed easily because Accumulo uses internal table IDs and
+stores mappings between names and IDs in Zookeeper.
+
+## Internal Data Management <a id="internal_dm"></a>
+
+### Locality groups
+
+Groups columns within a single file. There is a default locality group so that
+not all columns need be specified. The locality groups can be restructured
+while the table is online and the changes will take effect on the next
+compaction.  A tablet can have files with different locality group
+configurations.  In this case scans may be suboptimal, but correct, until
+compactions rewrite all files.  After reconfiguring locality groups, a user can
+force a table to compact in order to write all data into the new locality
+groups.  Alternatively, the change could be allowed to happen over time as
+writes to the table cause compactions to happen.
+
+### Smart compaction algorithm
+
+It is inefficient to merge small files with large files.  Accumulo merges files
+only if all files are larger than a configurable ratio (default is 3)
+multiplied by the largest file size.  If this cannot be done with all the
+files, the largest file is removed from consideration, and the remaining files
+are considered for compaction.  This is done until there are no files to merge.
+
+### Merging Minor Compaction (1.4)
+
+When a max number of files per tablet is reached, minor compactions will merge
+data from the in-memory map with the smallest file instead of creating new
+files.  This throttles ingest.  In previous releases new files were just created
+even if major compactions were falling behind and the number of tablets per file
+was growing.  Without this feature, ingest performance can roughly continue at a
+constant rate, even as scan performance decreases because tablets have too many
+files.
+
+## On-demand Data Management <a id="ondemand_dm"></a>
+
+### Compactions
+
+Ability to force tablets to compact to one file. Even tablets with one file are
+compacted.  This is useful for improving query performance, permanently
+applying iterators, or using a new locality group configuration.  One example
+of using iterators is applying a filtering iterator to remove data from a
+table. 
+
+### Split points
+
+Arbitrary split points can be added to an online table at any point in time.
+This is useful for increasing ingest performance on a new table. It can also be
+used to accommodate new data patterns in an existing table.
+
+### Tablet Merging (1.4)
+
+Tablet merging is a new feature. Merging of tablets can be requested in the
+shell; Accumulo does not merge tablets automatically.
+
+### Table Cloning (1.4)
+
+Allows users to quickly create a new table that references an existing table's
+data and copies its configuration. A cloned table and its source table can be
+mutated independently. Testing was the motivating reason behind this new
+feature. For example to test a new filtering iterator, clone the table, add the
+filter to the clone, and force a major compaction.
+
+### Compact Range (1.4)
+
+Compact each tablet that falls within a row range down to a single file.  
+
+### Delete Range (1.4)
+
+Added an operation to efficiently delete a range of rows from a table. Tablets
+that fall completely within a range are simply dropped. Tablets overlapping the
+beginning and end of the range are split, compacted, and then merged.  
+
+[2]: /accumulo/user_manual_1.3-incubating/Security.html
+[4]: /accumulo/user_manual_1.3-incubating/Writing_Accumulo_Clients.html
+[6]: /accumulo/user_manual_1.3-incubating/High_Speed_Ingest.html#SECTION00830000000000000000
+

Added: incubator/accumulo/site/trunk/content/accumulo/screenshots.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/screenshots.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/screenshots.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/screenshots.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,9 @@
+Title: Screenshots
+
+The following is a screenshot of the Accumulo monitor overview web page.  Accumulo was running on a five node cluster.  The continuous ingest test suite was running to generate load. 
+
+<img src=/accumulo/images/overview.png />
+
+The following screenshot shows the monitor master page.  This page gives information about individual tables within accumulo.  Continuous ingest is running against the table ci.
+
+<img src=/accumulo/images/master.png />

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Design.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Design.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Design.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Design.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,96 @@
+Title: Accumulo User Manual: Accumulo Design
+<a id=CHILD_LINKS></a>**Subsections**
+
+* [Data Model][1]
+* [Architecture][2]
+* [Components][3]
+* [Data Management][4]
+* [Tablet Service][5]
+* [Compactions][6]
+* [Fault-Tolerance][7]
+
+* * *
+
+## <a id=SECTION00300000000000000000></a> Accumulo Design
+
+## <a id=SECTION00310000000000000000></a> Data Model
+
+Accumulo provides a richer data model than simple key-value stores, but is not a fully relational database. Data is represented as key-value pairs, where the key and value are comprised of the following elements: 
+
+![converted table][8]
+
+All elements of the Key and the Value are represented as byte arrays except for Timestamp, which is a Long. Accumulo sorts keys by element and lexicographically in ascending order. Timestamps are sorted in descending order so that later versions of the same Key appear first in a sequential scan. Tables consist of a set of sorted key-value pairs. 
+
+## <a id=SECTION00320000000000000000></a> Architecture
+
+Accumulo is a distributed data storage and retrieval system and as such consists of several architectural components, some of which run on many individual servers. Much of the work Accumulo does involves maintaining certain properties of the data, such as organization, availability, and integrity, across many commodity-class machines. 
+
+## <a id=SECTION00330000000000000000></a> Components
+
+An instance of Accumulo includes many TabletServers, write-ahead Logger servers, one Garbage Collector process, one Master server and many Clients. 
+
+### <a id=SECTION00331000000000000000></a> Tablet Server
+
+The TabletServer manages some subset of all the tablets (partitions of tables). This includes receiving writes from clients, persisting writes to a write‐ahead log, sorting new key‐value pairs in memory, periodically flushing sorted key‐value pairs to new files in HDFS, and responding to reads from clients, forming a merge‐sorted view of all keys and values from all the files it has created and the sorted in‐memory store. 
+
+TabletServers also perform recovery of a tablet that was previously on a server that failed, reapplying any writes found in the write-ahead log to the tablet. 
+
+### <a id=SECTION00332000000000000000></a> Loggers
+
+The Loggers accept updates to Tablet servers and write them to local on-disk storage. Each tablet server will write their updates to multiple loggers to preserve data in case of hardware failure. 
+
+### <a id=SECTION00333000000000000000></a> Garbage Collector
+
+Accumulo processes will share files stored in HDFS. Periodically, the Garbage Collector will identify files that are no longer needed by any process, and delete them. 
+
+### <a id=SECTION00334000000000000000></a> Master
+
+The Accumulo Master is responsible for detecting and responding to TabletServer failure. It tries to balance the load across TabletServer by assigning tablets carefully and instructing TabletServers to migrate tablets when necessary. The Master ensures all tablets are assigned to one TabletServer each, and handles table creation, alteration, and deletion requests from clients. The Master also coordinates startup, graceful shutdown and recovery of changes in write-ahead logs when Tablet servers fail. 
+
+### <a id=SECTION00335000000000000000></a> Client
+
+Accumulo includes a client library that is linked to every application. The client library contains logic for finding servers managing a particular tablet, and communicating with TabletServers to write and retrieve key-value pairs. 
+
+## <a id=SECTION00340000000000000000></a> Data Management
+
+Accumulo stores data in tables, which are partitioned into tablets. Tablets are partitioned on row boundaries so that all of the columns and values for a particular row are found together within the same tablet. The Master assigns Tablets to one TabletServer at a time. This enables row-level transactions to take place without using distributed locking or some other complicated synchronization mechanism. As clients insert and query data, and as machines are added and removed from the cluster, the Master migrates tablets to ensure they remain available and that the ingest and query load is balanced across the cluster. 
+
+![Image data_distribution][9]
+
+## <a id=SECTION00350000000000000000></a> Tablet Service
+
+When a write arrives at a TabletServer it is written to a Write‐Ahead Log and then inserted into a sorted data structure in memory called a MemTable. When the MemTable reaches a certain size the TabletServer writes out the sorted key-value pairs to a file in HDFS called Indexed Sequential Access Method (ISAM) file. This process is called a minor compaction. A new MemTable is then created and the fact of the compaction is recorded in the Write‐Ahead Log. 
+
+When a request to read data arrives at a TabletServer, the TabletServer does a binary search across the MemTable as well as the in-memory indexes associated with each ISAM file to find the relevant values. If clients are performing a scan, several key‐value pairs are returned to the client in order from the MemTable and the set of ISAM files by performing a merge‐sort as they are read. 
+
+## <a id=SECTION00360000000000000000></a> Compactions
+
+In order to manage the number of files per tablet, periodically the TabletServer performs Major Compactions of files within a tablet, in which some set of ISAM files are combined into one file. The previous files will eventually be removed by the Garbage Collector. This also provides an opportunity to permanently remove deleted key‐value pairs by omitting key‐value pairs suppressed by a delete entry when the new file is created. 
+
+## <a id=SECTION00370000000000000000></a> Fault-Tolerance
+
+If a TabletServer fails, the Master detects it and automatically reassigns the tablets assigned from the failed server to other servers. Any key-value pairs that were in memory at the time the TabletServer are automatically reapplied from the Write-Ahead Log to prevent any loss of data. 
+
+The Master will coordinate the copying of write-ahead logs to HDFS so the logs are available to all tablet servers. To make recovery efficient, the updates within a log are grouped by tablet. The sorting process can be performed by Hadoops MapReduce or the Logger server. TabletServers can quickly apply the mutations from the sorted logs that are destined for the tablets they have now been assigned. 
+
+TabletServer failures are noted on the Master's monitor page, accessible via   
+http://master-address:50095/monitor. 
+
+![Image failure_handling][10]
+
+  
+
+
+* * *
+
+   [1]: Accumulo_Design.html#SECTION00310000000000000000
+   [2]: Accumulo_Design.html#SECTION00320000000000000000
+   [3]: Accumulo_Design.html#SECTION00330000000000000000
+   [4]: Accumulo_Design.html#SECTION00340000000000000000
+   [5]: Accumulo_Design.html#SECTION00350000000000000000
+   [6]: Accumulo_Design.html#SECTION00360000000000000000
+   [7]: Accumulo_Design.html#SECTION00370000000000000000
+   [8]: img1.png
+   [9]: ./data_distribution.png
+   [10]: ./failure_handling.png
+

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Shell.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Shell.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Shell.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Accumulo_Shell.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,128 @@
+Title: Accumulo User Manual: Accumulo Shell
+<a id=CHILD_LINKS></a>**Subsections**
+
+* [Basic Administration][1]
+* [Table Maintenance][2]
+* [User Administration][3]
+
+* * *
+
+## <a id=SECTION00400000000000000000></a> Accumulo Shell
+
+Accumulo provides a simple shell that can be used to examine the contents and configuration settings of tables, apply individual mutations, and change configuration settings. 
+
+The shell can be started by the following command: 
+    
+    
+    $ACCUMULO_HOME/bin/accumulo shell -u [username]
+    
+
+The shell will prompt for the corresponding password to the username specified and then display the following prompt: 
+    
+    
+    Shell Accumulo Interactive Shell
+    -
+    - version 1.3
+    - instance name: myinstance
+    - instance id: 00000000-0000-0000-0000-000000000000
+    -
+    - type 'help' for a list of available commands
+    -
+    
+
+## <a id=SECTION00410000000000000000></a> Basic Administration
+
+The Accumulo shell can be used to create and delete tables, as well as to configure table and instance specific options. 
+    
+    
+    root@myinstance> tables
+    !METADATA
+    
+    root@myinstance> createtable mytable
+    
+    root@myinstance mytable>
+    
+    root@myinstance mytable> tables
+    !METADATA
+    mytable
+    
+    root@myinstance mytable> createtable testtable
+    
+    root@myinstance testtable>
+    
+    root@myinstance junk> deletetable testtable
+    
+    root@myinstance>
+    
+
+The Shell can also be used to insert updates and scan tables. This is useful for inspecting tables. 
+    
+    
+    root@myinstance mytable> scan
+    
+    root@myinstance mytable> insert row1 colf colq value1
+    insert successful
+    
+    root@myinstance mytable> scan
+    row1 colf:colq [] value1
+    
+
+## <a id=SECTION00420000000000000000></a> Table Maintenance
+
+The **compact** command instructs Accumulo to schedule a compaction of the table during which files are consolidated and deleted entries are removed. 
+    
+    
+    root@myinstance mytable> compact -t mytable
+    07 16:13:53,201 [shell.Shell] INFO : Compaction of table mytable
+    scheduled for 20100707161353EDT
+    
+
+The **flush** command instructs Accumulo to write all entries currently in memory for a given table to disk. 
+    
+    
+    root@myinstance mytable> flush -t mytable
+    07 16:14:19,351 [shell.Shell] INFO : Flush of table mytable
+    initiated...
+    
+
+## <a id=SECTION00430000000000000000></a> User Administration
+
+The Shell can be used to add, remove, and grant privileges to users. 
+    
+    
+    root@myinstance mytable> createuser bob
+    Enter new password for 'bob': *********
+    Please confirm new password for 'bob': *********
+    
+    root@myinstance mytable> authenticate bob
+    Enter current password for 'bob': *********
+    Valid
+    
+    root@myinstance mytable> grant System.CREATE_TABLE -s -u bob
+    
+    root@myinstance mytable> user bob
+    Enter current password for 'bob': *********
+    
+    bob@myinstance mytable> userpermissions
+    System permissions: System.CREATE_TABLE
+    Table permissions (!METADATA): Table.READ
+    Table permissions (mytable): NONE
+    
+    bob@myinstance mytable> createtable bobstable
+    bob@myinstance bobstable>
+    
+    bob@myinstance bobstable> user root
+    Enter current password for 'root': *********
+    
+    root@myinstance bobstable> revoke System.CREATE_TABLE -s -u bob
+    
+
+  
+
+
+* * *
+
+   [1]: Accumulo_Shell.html#SECTION00410000000000000000
+   [2]: Accumulo_Shell.html#SECTION00420000000000000000
+   [3]: Accumulo_Shell.html#SECTION00430000000000000000
+

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Administration.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Administration.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Administration.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Administration.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,159 @@
+Title: Accumulo User Manual: Administration
+<a id=CHILD_LINKS></a>**Subsections**
+
+* [Hardware][1]
+* [Network][2]
+* [Installation][3]
+* [Dependencies][4]
+* [Configuration][5]
+* [Initialization][6]
+* [Running][7]
+* [Monitoring][8]
+* [Logging][9]
+* [Recovery][10]
+
+* * *
+
+## <a id=SECTION001100000000000000000></a> Administration
+
+## <a id=SECTION001110000000000000000></a> Hardware
+
+Because we are running essentially two or three systems simultaneously layered across the cluster: HDFS, Accumulo, and MapReduce, it is typical for hardware to consist of 4 to 8 cores, and 8 to 32 GB RAM. This is so each running process can have at least one core and 2 - 4 GB each. 
+
+One core running HDFS can typically keep 2 to 4 disks busy, so each machine may typically have as little as 2 x 300GB disks and as much as 4 x 1TB or 2TB disks. 
+
+It is possible to do with less than this, such as with 1u servers with 2 cores and 4GB each, but in this case it is recommended to only run up to two processes per machine - i.e. DataNode and TabletServer or DataNode and MapReduce worker but not all three. The constraint here is having enough available heap space for all the processes on a machine. 
+
+## <a id=SECTION001120000000000000000></a> Network
+
+Accumulo communicates via remote procedure calls over TCP/IP for both passing data and control messages. In addition, Accumulo uses HDFS clients to communicate with HDFS. To achieve good ingest and query performance, sufficient network bandwidth must be available between any two machines. 
+
+## <a id=SECTION001130000000000000000></a> Installation
+
+Choose a directory for the Accumulo installation. This directory will be referenced by the environment variable $ACCUMULO_HOME. Run the following: 
+    
+    
+    $ tar xzf $ACCUMULO_HOME/accumulo.tar.gz
+    
+
+Repeat this step at each machine within the cluster. Usually all machines have the same $ACCUMULO_HOME. 
+
+## <a id=SECTION001140000000000000000></a> Dependencies
+
+Accumulo requires HDFS, MapReduce, and ZooKeeper to be configured and running before starting. Password-less SSH should be configured between at least the Accumulo master and TabletServer machines. It is also a good idea to run Network Time Protocol (NTP) within the cluster to ensure nodes' clocks don't get too out of sync, which can cause problems with automatically timestamped data. Accumulo will remove from the set of TabletServers those machines whose times differ too much from the master's. 
+
+## <a id=SECTION001150000000000000000></a> Configuration
+
+Accumulo is configured by editing several Shell and XML files found in $ACCUMULO_HOME/conf. The structure closely resembles Hadoop's configuration files. 
+
+### <a id=SECTION001151000000000000000></a> Edit conf/accumulo-env.sh
+
+Accumulo needs to know where to find the software it depends on. Edit accumuloenv. sh and specify the following: 
+
+1. Enter the location of the installation directory of Accumulo for $ACCUMULO_HOME
+2. Enter your system's Java home for $JAVA_HOME
+3. Enter the location of Hadoop for $HADOOP_HOME
+4. Choose a location for Accumulo logs and enter it for $ACCUMULO_LOG_DIR
+5. Enter the location of ZooKeeper for $ZOOKEEPER_HOME
+
+By default Accumulo TabletServers are set to use 1GB of memory. You may change this by altering the value of $ACCUMULO_TSERVER_OPTS. Note the syntax is that of the Java JVM command line options. This value should be less than the physical memory of the machines running TabletServers. 
+
+There are similar options for the master's memory usage and the garbage collector process. Reduce these if they exceed the physical RAM of your hardware and increase them, within the bounds of the physical RAM, if a process fails because of insufficient memory. 
+
+Note that you will be specifying the Java heap space in accumulo-env.sh. You should make sure that the total heap space used for the Accumulo tserver and the Hadoop DataNode and TaskTracker is less than the available memory on each slave node in the cluster. On large clusters, it is recommended that the Accumulo master, Hadoop NameNode, secondary NameNode, and Hadoop JobTracker all be run on separate machines to allow them to use more heap space. If you are running these on the same machine on a small cluster, likewise make sure their heap space settings fit within the available memory. 
+
+### <a id=SECTION001152000000000000000></a> Cluster Specification
+
+On the machine that will serve as the Accumulo master: 
+
+1. Write the IP address or domain name of the Accumulo Master to the   
+$ACCUMULO_HOME/conf/masters file. 
+2. Write the IP addresses or domain name of the machines that will be TabletServers in   
+$ACCUMULO_HOME/conf/slaves, one per line. 
+
+Note that if using domain names rather than IP addresses, DNS must be configured properly for all machines participating in the cluster. DNS can be a confusing source of errors. 
+
+### <a id=SECTION001153000000000000000></a> Accumulo Settings
+
+Specify appropriate values for the following settings in   
+$ACCUMULO_HOME/conf/accumulo-site.xml : 
+    
+    
+    <property>
+        <name>zookeeper</name>
+        <value>zooserver-one:2181,zooserver-two:2181</value>
+        <description>list of zookeeper servers</description>
+    </property>
+    <property>
+        <name>walog</name>
+        <value>/var/accumulo/walogs</value>
+        <description>local directory for write ahead logs</description>
+    </property>
+    
+
+This enables Accumulo to find Zookeeper. Accumulo uses ZooKeeper to coordinate settings between processes and helps finalize TabletServer failure. 
+
+Accumulo records all changes to tables to a write-ahead log before committing them to the table. The `walog' setting specifies the local directory on each machine to which write-ahead logs are written. This directory should exist on all machines acting as TabletServers. 
+
+Some settings can be modified via the Accumulo shell and take effect immediately. However, any settings that should be persisted across system restarts must be recorded in the accumulo-site.xml file. 
+
+### <a id=SECTION001154000000000000000></a> Deploy Configuration
+
+Copy the masters, slaves, accumulo-env.sh, and if necessary, accumulo-site.xml from the   
+$ACCUMULO_HOME/conf/ directory on the master to all the machines specified in the slaves file. 
+
+## <a id=SECTION001160000000000000000></a> Initialization
+
+Accumulo must be initialized to create the structures it uses internally to locate data across the cluster. HDFS is required to be configured and running before Accumulo can be initialized. 
+
+Once HDFS is started, initialization can be performed by executing   
+$ACCUMULO_HOME/bin/accumulo init . This script will prompt for a name for this instance of Accumulo. The instance name is used to identify a set of tables and instance-specific settings. The script will then write some information into HDFS so Accumulo can start properly. 
+
+The initialization script will prompt you to set a root password. Once Accumulo is initialized it can be started. 
+
+## <a id=SECTION001170000000000000000></a> Running
+
+### <a id=SECTION001171000000000000000></a> Starting Accumulo
+
+Make sure Hadoop is configured on all of the machines in the cluster, including access to a shared HDFS instance. Make sure HDFS and MapReduce are running. Make sure ZooKeeper is configured and running on at least one machine in the cluster. Start Accumulo using the bin/start-all.sh script. 
+
+To verify that Accumulo is running, check the Status page as described under _Monitoring_. In addition, the Shell can provide some information about the status of tables via reading the !METADATA table. 
+
+### <a id=SECTION001172000000000000000></a> Stopping Accumulo
+
+To shutdown cleanly, run bin/stop-all.sh and the master will orchestrate the shutdown of all the tablet servers. Shutdown waits for all minor compactions to finish, so it may take some time for particular configurations. 
+
+## <a id=SECTION001180000000000000000></a> Monitoring
+
+The Accumulo Master provides an interface for monitoring the status and health of Accumulo components. This interface can be accessed by pointing a web browser to   
+http://accumulomaster:50095/status
+
+## <a id=SECTION001190000000000000000></a> Logging
+
+Accumulo processes each write to a set of log files. By default these are found under   
+$ACCUMULO/logs/. 
+
+## <a id=SECTION0011100000000000000000></a> Recovery
+
+In the event of TabletServer failure or error on shutting Accumulo down, some mutations may not have been minor compacted to HDFS properly. In this case, Accumulo will automatically reapply such mutations from the write-ahead log either when the tablets from the failed server are reassigned by the Master, in the case of a single TabletServer failure or the next time Accumulo starts, in the event of failure during shutdown. 
+
+Recovery is performed using the MapReduce framework and is shown on the Accumulo monitor status page. Once the MapReduce recovery is complete any tablets involved should return to an ``online" state. Until then those tablets will be unavailable to clients. 
+
+The Accumulo client library is configured to retry failed mutations and in many cases clients will be able to continue processing after the recovery process without throwing an exception. 
+
+Note that because Accumulo uses timestamps to order mutations, any mutations that are applied as part of the recovery process should appear to have been applied when they originally arrived at the TabletServer that failed. This makes the ordering of mutations consistent in the presence of failure.   
+
+
+* * *
+
+   [1]: Administration.html#SECTION001110000000000000000
+   [2]: Administration.html#SECTION001120000000000000000
+   [3]: Administration.html#SECTION001130000000000000000
+   [4]: Administration.html#SECTION001140000000000000000
+   [5]: Administration.html#SECTION001150000000000000000
+   [6]: Administration.html#SECTION001160000000000000000
+   [7]: Administration.html#SECTION001170000000000000000
+   [8]: Administration.html#SECTION001180000000000000000
+   [9]: Administration.html#SECTION001190000000000000000
+   [10]: Administration.html#SECTION0011100000000000000000
+

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Analytics.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Analytics.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Analytics.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Analytics.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,140 @@
+Title: Accumulo User Manual: Analytics
+<a id=CHILD_LINKS></a>**Subsections**
+
+* [MapReduce][1]
+* [Aggregating Iterators][2]
+* [Statistical Modeling][3]
+
+* * *
+
+## <a id=SECTION00900000000000000000></a> Analytics
+
+Accumulo supports more advanced data processing than simply keeping keys sorted and performing efficient lookups. Analytics can be developed by using MapReduce and Iterators in conjunction with Accumulo tables. 
+
+## <a id=SECTION00910000000000000000></a> MapReduce
+
+Accumulo tables can be used as the source and destination of MapReduce jobs. To use a Accumulo table with a MapReduce job (specifically with the new Hadoop API as of version 0.20), configure the job parameters to use the AccumuloInputFormat and AccumuloOutputFormat. Accumulo specific parameters can be set via these two format classes to do the following: 
+
+* Authenticate and provide user credentials for the input 
+* Restrict the scan to a range of rows 
+* Restrict the input to a subset of available columns 
+
+### <a id=SECTION00911000000000000000></a> Mapper and Reducer classes
+
+To read from a Accumulo table create a Mapper with the following class parameterization and be sure to configure the AccumuloInputFormat. 
+    
+    
+    class MyMapper extends Mapper<Key,Value,WritableComparable,Writable> {
+        public void map(Key k, Value v, Context c) {
+            // transform key and value data here
+        }
+    }
+    
+
+To write to a Accumulo table, create a Reducer with the following class parameterization and be sure to configure the AccumuloOutputFormat. The key emitted from the Reducer identifies the table to which the mutation is sent. This allows a single Reducer to write to more than one table if desired. A default table can be configured using the AccumuloOutputFormat, in which case the output table name does not have to be passed to the Context object within the Reducer. 
+    
+    
+    class MyReducer extends Reducer<WritableComparable, Writable, Text, Mutation> {
+    
+        public void reduce(WritableComparable key, Iterator<Text> values, Context c) {
+            
+            Mutation m;
+            
+            // create the mutation based on input key and value
+            
+            c.write(new Text("output-table"), m);
+        }
+    }
+    
+
+The Text object passed as the output should contain the name of the table to which this mutation should be applied. The Text can be null in which case the mutation will be applied to the default table name specified in the AccumuloOutputFormat options. 
+
+### <a id=SECTION00912000000000000000></a> AccumuloInputFormat options
+    
+    
+    Job job = new Job(getConf());
+    AccumuloInputFormat.setInputInfo(job,
+            "user",
+            "passwd".getBytes(),
+            "table",
+            new Authorizations());
+    
+    AccumuloInputFormat.setZooKeeperInstance(job, "myinstance",
+            "zooserver-one,zooserver-two");
+    
+
+**Optional settings:**
+
+To restrict Accumulo to a set of row ranges: 
+    
+    
+    ArrayList<Range> ranges = new ArrayList<Range>();
+    // populate array list of row ranges ...
+    AccumuloInputFormat.setRanges(job, ranges);
+    
+
+To restrict accumulo to a list of columns: 
+    
+    
+    ArrayList<Pair<Text,Text>> columns = new ArrayList<Pair<Text,Text>>();
+    // populate list of columns
+    AccumuloInputFormat.fetchColumns(job, columns);
+    
+
+To use a regular expression to match row IDs: 
+    
+    
+    AccumuloInputFormat.setRegex(job, RegexType.ROW, "^.*");
+    
+
+### <a id=SECTION00913000000000000000></a> AccumuloOutputFormat options
+    
+    
+    boolean createTables = true;
+    String defaultTable = "mytable";
+    
+    AccumuloOutputFormat.setOutputInfo(job,
+            "user",
+            "passwd".getBytes(),
+            createTables,
+            defaultTable);
+    
+    AccumuloOutputFormat.setZooKeeperInstance(job, "myinstance",
+            "zooserver-one,zooserver-two");
+    
+
+**Optional Settings:**
+    
+    
+    AccumuloOutputFormat.setMaxLatency(job, 300); // milliseconds
+    AccumuloOutputFormat.setMaxMutationBufferSize(job, 5000000); // bytes
+    
+
+An example of using MapReduce with Accumulo can be found at   
+accumulo/docs/examples/README.mapred 
+
+## <a id=SECTION00920000000000000000></a> Aggregating Iterators
+
+Many applications can benefit from the ability to aggregate values across common keys. This can be done via aggregating iterators and is similar to the Reduce step in MapReduce. This provides the ability to define online, incrementally updated analytics without the overhead or latency associated with batch-oriented MapReduce jobs. 
+
+All that is needed to aggregate values of a table is to identify the fields over which values will be grouped, insert mutations with those fields as the key, and configure the table with an aggregating iterator that supports the summarization operation desired. 
+
+The only restriction on an aggregating iterator is that the aggregator developer should not assume that all values for a given key have been seen, since new mutations can be inserted at anytime. This precludes using the total number of values in the aggregation such as when calculating an average, for example. 
+
+### <a id=SECTION00921000000000000000></a> Feature Vectors
+
+An interesting use of aggregating iterators within a Accumulo table is to store feature vectors for use in machine learning algorithms. For example, many algorithms such as k-means clustering, support vector machines, anomaly detection, etc. use the concept of a feature vector and the calculation of distance metrics to learn a particular model. The columns in a Accumulo table can be used to efficiently store sparse features and their weights to be incrementally updated via the use of an aggregating iterator. 
+
+## <a id=SECTION00930000000000000000></a> Statistical Modeling
+
+Statistical models that need to be updated by many machines in parallel could be similarly stored within a Accumulo table. For example, a MapReduce job that is iteratively updating a global statistical model could have each map or reduce worker reference the parts of the model to be read and updated through an embedded Accumulo client. 
+
+Using Accumulo this way enables efficient and fast lookups and updates of small pieces of information in a random access pattern, which is complementary to MapReduce's sequential access model.   
+
+
+* * *
+
+   [1]: Analytics.html#SECTION00910000000000000000
+   [2]: Analytics.html#SECTION00920000000000000000
+   [3]: Analytics.html#SECTION00930000000000000000
+

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Contents.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Contents.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Contents.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Contents.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,230 @@
+Title: Accumulo User Manual: Contents
+  
+
+
+### <a id=SECTION00100000000000000000></a> Contents
+
+* [Introduction][1]
+* [Accumulo Design][2]
+
+    * [Data Model][3]
+    * [Architecture][4]
+    * [Components][5]
+
+        * [Tablet Server][6]
+        * [Loggers][7]
+        * [Garbage Collector][8]
+        * [Master][9]
+        * [Client][10]
+
+    * [Data Management][11]
+    * [Tablet Service][12]
+    * [Compactions][13]
+    * [Fault-Tolerance][14]
+
+  
+
+* [Accumulo Shell][15]
+
+    * [Basic Administration][16]
+    * [Table Maintenance][17]
+    * [User Administration][18]
+
+  
+
+* [Writing Accumulo Clients][19]
+
+    * [Writing Data][20]
+
+        * [BatchWriter][21]
+
+    * [Reading Data][22]
+
+        * [Scanner][23]
+        * [BatchScanner][24]
+
+  
+
+* [Table Configuration][25]
+
+    * [Locality Groups][26]
+
+        * [Managing Locality Groups via the Shell][27]
+        * [Managing Locality Groups via the Client API][28]
+
+    * [Constraints][29]
+    * [Bloom Filters][30]
+    * [Iterators][31]
+
+        * [Setting Iterators via the Shell][32]
+        * [Setting Iterators Programmatically][33]
+
+    * [Versioning Iterators and Timestamps][34]
+
+        * [Logical Time][35]
+        * [Deletes][36]
+
+    * [Filtering Iterators][37]
+    * [Aggregating Iterators][38]
+
+  
+
+* [Table Design][39]
+
+    * [Basic Table][40]
+    * [RowID Design][41]
+    * [Indexing][42]
+    * [Entity-Attribute and Graph Tables][43]
+    * [Document-Partitioned Indexing][44]
+
+  
+
+* [High-Speed Ingest][45]
+
+    * [Pre-Splitting New Tables][46]
+    * [Multiple Ingester Clients][47]
+    * [Bulk Ingest][48]
+    * [MapReduce Ingest][49]
+
+  
+
+* [Analytics][50]
+
+    * [MapReduce][51]
+
+        * [Mapper and Reducer classes][52]
+        * [AccumuloInputFormat options][53]
+        * [AccumuloOutputFormat options][54]
+
+    * [Aggregating Iterators][55]
+
+        * [Feature Vectors][56]
+
+    * [Statistical Modeling][57]
+
+  
+
+* [Security][58]
+
+    * [Security Label Expressions][59]
+    * [Security Label Expression Syntax][60]
+    * [Authorization][61]
+    * [Secure Authorizations Handling][62]
+    * [Query Services Layer][63]
+
+  
+
+* [Administration][64]
+
+    * [Hardware][65]
+    * [Network][66]
+    * [Installation][67]
+    * [Dependencies][68]
+    * [Configuration][69]
+
+        * [Edit conf/accumulo-env.sh][70]
+        * [Cluster Specification][71]
+        * [Accumulo Settings][72]
+        * [Deploy Configuration][73]
+
+    * [Initialization][74]
+    * [Running][75]
+
+        * [Starting Accumulo][76]
+        * [Stopping Accumulo][77]
+
+    * [Monitoring][78]
+    * [Logging][79]
+    * [Recovery][80]
+
+  
+
+* [Shell Commands][81]
+
+  
+
+
+* * *
+
+   [1]: Introduction.html
+   [2]: Accumulo_Design.html
+   [3]: Accumulo_Design.html#SECTION00310000000000000000
+   [4]: Accumulo_Design.html#SECTION00320000000000000000
+   [5]: Accumulo_Design.html#SECTION00330000000000000000
+   [6]: Accumulo_Design.html#SECTION00331000000000000000
+   [7]: Accumulo_Design.html#SECTION00332000000000000000
+   [8]: Accumulo_Design.html#SECTION00333000000000000000
+   [9]: Accumulo_Design.html#SECTION00334000000000000000
+   [10]: Accumulo_Design.html#SECTION00335000000000000000
+   [11]: Accumulo_Design.html#SECTION00340000000000000000
+   [12]: Accumulo_Design.html#SECTION00350000000000000000
+   [13]: Accumulo_Design.html#SECTION00360000000000000000
+   [14]: Accumulo_Design.html#SECTION00370000000000000000
+   [15]: Accumulo_Shell.html
+   [16]: Accumulo_Shell.html#SECTION00410000000000000000
+   [17]: Accumulo_Shell.html#SECTION00420000000000000000
+   [18]: Accumulo_Shell.html#SECTION00430000000000000000
+   [19]: Writing_Accumulo_Clients.html
+   [20]: Writing_Accumulo_Clients.html#SECTION00510000000000000000
+   [21]: Writing_Accumulo_Clients.html#SECTION00511000000000000000
+   [22]: Writing_Accumulo_Clients.html#SECTION00520000000000000000
+   [23]: Writing_Accumulo_Clients.html#SECTION00521000000000000000
+   [24]: Writing_Accumulo_Clients.html#SECTION00522000000000000000
+   [25]: Table_Configuration.html
+   [26]: Table_Configuration.html#SECTION00610000000000000000
+   [27]: Table_Configuration.html#SECTION00611000000000000000
+   [28]: Table_Configuration.html#SECTION00612000000000000000
+   [29]: Table_Configuration.html#SECTION00620000000000000000
+   [30]: Table_Configuration.html#SECTION00630000000000000000
+   [31]: Table_Configuration.html#SECTION00640000000000000000
+   [32]: Table_Configuration.html#SECTION00641000000000000000
+   [33]: Table_Configuration.html#SECTION00642000000000000000
+   [34]: Table_Configuration.html#SECTION00650000000000000000
+   [35]: Table_Configuration.html#SECTION00651000000000000000
+   [36]: Table_Configuration.html#SECTION00652000000000000000
+   [37]: Table_Configuration.html#SECTION00660000000000000000
+   [38]: Table_Configuration.html#SECTION00670000000000000000
+   [39]: Table_Design.html
+   [40]: Table_Design.html#SECTION00710000000000000000
+   [41]: Table_Design.html#SECTION00720000000000000000
+   [42]: Table_Design.html#SECTION00730000000000000000
+   [43]: Table_Design.html#SECTION00740000000000000000
+   [44]: Table_Design.html#SECTION00750000000000000000
+   [45]: High_Speed_Ingest.html
+   [46]: High_Speed_Ingest.html#SECTION00810000000000000000
+   [47]: High_Speed_Ingest.html#SECTION00820000000000000000
+   [48]: High_Speed_Ingest.html#SECTION00830000000000000000
+   [49]: High_Speed_Ingest.html#SECTION00840000000000000000
+   [50]: Analytics.html
+   [51]: Analytics.html#SECTION00910000000000000000
+   [52]: Analytics.html#SECTION00911000000000000000
+   [53]: Analytics.html#SECTION00912000000000000000
+   [54]: Analytics.html#SECTION00913000000000000000
+   [55]: Analytics.html#SECTION00920000000000000000
+   [56]: Analytics.html#SECTION00921000000000000000
+   [57]: Analytics.html#SECTION00930000000000000000
+   [58]: Security.html
+   [59]: Security.html#SECTION001010000000000000000
+   [60]: Security.html#SECTION001020000000000000000
+   [61]: Security.html#SECTION001030000000000000000
+   [62]: Security.html#SECTION001040000000000000000
+   [63]: Security.html#SECTION001050000000000000000
+   [64]: Administration.html
+   [65]: Administration.html#SECTION001110000000000000000
+   [66]: Administration.html#SECTION001120000000000000000
+   [67]: Administration.html#SECTION001130000000000000000
+   [68]: Administration.html#SECTION001140000000000000000
+   [69]: Administration.html#SECTION001150000000000000000
+   [70]: Administration.html#SECTION001151000000000000000
+   [71]: Administration.html#SECTION001152000000000000000
+   [72]: Administration.html#SECTION001153000000000000000
+   [73]: Administration.html#SECTION001154000000000000000
+   [74]: Administration.html#SECTION001160000000000000000
+   [75]: Administration.html#SECTION001170000000000000000
+   [76]: Administration.html#SECTION001171000000000000000
+   [77]: Administration.html#SECTION001172000000000000000
+   [78]: Administration.html#SECTION001180000000000000000
+   [79]: Administration.html#SECTION001190000000000000000
+   [80]: Administration.html#SECTION0011100000000000000000
+   [81]: Shell_Commands.html
+

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/High_Speed_Ingest.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/High_Speed_Ingest.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/High_Speed_Ingest.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/High_Speed_Ingest.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,75 @@
+Title: Accumulo User Manual: High Speed Ingest
+<a id=CHILD_LINKS></a>**Subsections**
+
+* [Pre-Splitting New Tables][1]
+* [Multiple Ingester Clients][2]
+* [Bulk Ingest][3]
+* [MapReduce Ingest][4]
+
+* * *
+
+## <a id=SECTION00800000000000000000></a> High-Speed Ingest
+
+Accumulo is often used as part of a larger data processing and storage system. To maximize the performance of a parallel system involving Accumulo, the ingestion and query components should be designed to provide enough parallelism and concurrency to avoid creating bottlenecks for users and other systems writing to and reading from Accumulo. There are several ways to achieve high ingest performance. 
+
+## <a id=SECTION00810000000000000000></a> Pre-Splitting New Tables
+
+New tables consist of a single tablet by default. As mutations are applied, the table grows and splits into multiple tablets which are balanced by the Master across TabletServers. This implies that the aggregate ingest rate will be limited to fewer servers than are available within the cluster until the table has reached the point where there are tablets on every TabletServer. 
+
+Pre-splitting a table ensures that there are as many tablets as desired available before ingest begins to take advantage of all the parallelism possible with the cluster hardware. Tables can be split anytime by using the shell: 
+    
+    
+    user@myinstance mytable> addsplits -sf /local_splitfile -t mytable
+    
+
+For the purposes of providing parallelism to ingest it is not necessary to create more tablets than there are physical machines within the cluster as the aggregate ingest rate is a function of the number of physical machines. Note that the aggregate ingest rate is still subject to the number of machines running ingest clients, and the distribution of rowIDs across the table. The aggregation ingest rate will be suboptimal if there are many inserts into a small number of rowIDs. 
+
+## <a id=SECTION00820000000000000000></a> Multiple Ingester Clients
+
+Accumulo is capable of scaling to very high rates of ingest, which is dependent upon not just the number of TabletServers in operation but also the number of ingest clients. This is because a single client, while capable of batching mutations and sending them to all TabletServers, is ultimately limited by the amount of data that can be processed on a single machine. The aggregate ingest rate will scale linearly with the number of clients up to the point at which either the aggregate I/O of TabletServers or total network bandwidth capacity is reached. 
+
+In operational settings where high rates of ingest are paramount, clusters are often configured to dedicate some number of machines solely to running Ingester Clients. The exact ratio of clients to TabletServers necessary for optimum ingestion rates will vary according to the distribution of resources per machine and by data type. 
+
+## <a id=SECTION00830000000000000000></a> Bulk Ingest
+
+Accumulo supports the ability to import files produced by an external process such as MapReduce into an existing table. In some cases it may be faster to load data this way rather than via ingesting through clients using BatchWriters. This allows a large number of machines to format data the way Accumulo expects. The new files can then simply be introduced to Accumulo via a shell command. 
+
+To configure MapReduce to format data in preparation for bulk loading, the job should be set to use a range partitioner instead of the default hash partitioner. The range partitioner uses the split points of the Accumulo table that will receive the data. The split points can be obtained from the shell and used by the MapReduce RangePartitioner. Note that this is only useful if the existing table is already split into multiple tablets. 
+    
+    
+    user@myinstance mytable> getsplits
+    aa
+    ab
+    ac
+    ...
+    zx
+    zy
+    zz
+    
+
+Run the MapReduce job, using the AccumuloFileOutputFormat to create the files to be introduced to Accumulo. Once this is complete, the files can be added to Accumulo via the shell: 
+    
+    
+    user@myinstance mytable> importdirectory /files_dir /failures
+    
+
+Note that the paths referenced are directories within the same HDFS instance over which Accumulo is running. Accumulo places any files that failed to be added to the second directory specified. 
+
+A complete example of using Bulk Ingest can be found at   
+accumulo/docs/examples/README.bulkIngest 
+
+## <a id=SECTION00840000000000000000></a> MapReduce Ingest
+
+It is possible to efficiently write many mutations to Accumulo in parallel via a MapReduce job. In this scenario the MapReduce is written to process data that lives in HDFS and write mutations to Accumulo using the AccumuloOutputFormat. See the MapReduce section under Analytics for details. 
+
+An example of using MapReduce can be found under   
+accumulo/docs/examples/README.mapred   
+
+
+* * *
+
+   [1]: High_Speed_Ingest.html#SECTION00810000000000000000
+   [2]: High_Speed_Ingest.html#SECTION00820000000000000000
+   [3]: High_Speed_Ingest.html#SECTION00830000000000000000
+   [4]: High_Speed_Ingest.html#SECTION00840000000000000000
+

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Introduction.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Introduction.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Introduction.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Introduction.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,9 @@
+Title: Accumulo User Manual: Introduction
+## <a id=SECTION00200000000000000000></a> Introduction
+
+Accumulo is a highly scalable structured store based on Google's BigTable. Accumulo is written in Java and operates over the Hadoop Distributed File System (HDFS), which is part of the popular Apache Hadoop project. Accumulo supports efficient storage and retrieval of structured data, including queries for ranges, and provides support for using Accumulo tables as input and output for MapReduce jobs. 
+
+Accumulo features automatic load-balancing and partitioning, data compression and fine-grained security labels.   
+
+
+* * *

Added: incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Security.mdtext
URL: http://svn.apache.org/viewvc/incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Security.mdtext?rev=1183037&view=auto
==============================================================================
--- incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Security.mdtext (added)
+++ incubator/accumulo/site/trunk/content/accumulo/user_manual_1.3-incubating/Security.mdtext Thu Oct 13 19:13:58 2011
@@ -0,0 +1,98 @@
+Title: Accumulo User Manual: Security
+<a id=CHILD_LINKS></a>**Subsections**
+
+* [Security Label Expressions][1]
+* [Security Label Expression Syntax][2]
+* [Authorization][3]
+* [Secure Authorizations Handling][4]
+* [Query Services Layer][5]
+
+* * *
+
+## <a id=SECTION001000000000000000000></a> Security
+
+Accumulo extends the BigTable data model to implement a security mechanism known as cell-level security. Every key-value pair has its own security label, stored under the column visibility element of the key, which is used to determine whether a given user meets the security requirements to read the value. This enables data of various security levels to be stored within the same row, and users of varying degrees of access to query the same table, while preserving data confidentiality. 
+
+## <a id=SECTION001010000000000000000></a> Security Label Expressions
+
+When mutations are applied, users can specify a security label for each value. This is done as the Mutation is created by passing a ColumnVisibility object to the put() method: 
+    
+    
+    Text rowID = new Text("row1");
+    Text colFam = new Text("myColFam");
+    Text colQual = new Text("myColQual");
+    ColumnVisibility colVis = new ColumnVisibility("public");
+    long timestamp = System.currentTimeMillis();
+    
+    Value value = new Value("myValue");
+    
+    Mutation mutation = new Mutation(rowID);
+    mutation.put(colFam, colQual, colVis, timestamp, value);
+    
+
+## <a id=SECTION001020000000000000000></a> Security Label Expression Syntax
+
+Security labels consist of a set of user-defined tokens that are required to read the value the label is associated with. The set of tokens required can be specified using syntax that supports logical AND and OR combinations of tokens, as well as nesting groups of tokens together. 
+
+For example, suppose within our organization we want to label our data values with security labels defined in terms of user roles. We might have tokens such as: 
+    
+    
+    admin
+    audit
+    system
+    
+
+These can be specified alone or combined using logical operators: 
+    
+    
+    // Users must have admin privileges:
+    admin
+    
+    // Users must have admin and audit privileges
+    admin&audit
+    
+    // Users with either admin or audit privileges
+    admin|audit
+    
+    // Users must have audit and one or both of admin or system
+    (admin|system)&audit
+    
+
+When both `|` and `&` operators are used, parentheses must be used to specify precedence of the operators. 
+
+## <a id=SECTION001030000000000000000></a> Authorization
+
+When clients attempt to read data from Accumulo, any security labels present are examined against the set of authorizations passed by the client code when the Scanner or BatchScanner are created. If the authorizations are determined to be insufficient to satisfy the security label, the value is suppressed from the set of results sent back to the client. 
+
+Authorizations are specified as a comma-separated list of tokens the user possesses: 
+    
+    
+    // user possess both admin and system level access
+    Authorization auths = new Authorization("admin,system");
+    
+    Scanner s = connector.createScanner("table", auths);
+    
+
+## <a id=SECTION001040000000000000000></a> Secure Authorizations Handling
+
+Because the client can pass any authorization tokens to Accumulo, applications must be designed to obtain users' authorization tokens from a trusted 3rd party rather than having the users specify their authorizations directly. 
+
+Often production systems will integrate with Public-Key Infrastructure (PKI) and designate client code within the query layer to negotiate with PKI servers in order to authenticate users and retrieve their authorization tokens (credentials). This requires users to specify only the information necessary to authenticate themselves to the system. Once user identity is established, their credentials can be accessed by the client code and passed to Accumulo outside of the reach of the user. 
+
+## <a id=SECTION001050000000000000000></a> Query Services Layer
+
+Since the primary method of interaction with Accumulo is through the Java API, production environments often call for the implementation of a Query layer. This can be done using web services in containers such as Apache Tomcat, but is not a requirement. The Query Services Layer provides a mechanism for providing a platform on which user facing applications can be built. This allows the application designers to isolate potentially complex query logic, and enables a convenient point at which to perform essential security functions. 
+
+Several production environments choose to implement authentication at this layer, where users identifiers are used to retrieve their access credentials which are then cached within the query layer and presented to Accumulo through the Authorizations mechanism. 
+
+Typically, the query services layer sits between Accumulo and user workstations.   
+
+
+* * *
+
+   [1]: Security.html#SECTION001010000000000000000
+   [2]: Security.html#SECTION001020000000000000000
+   [3]: Security.html#SECTION001030000000000000000
+   [4]: Security.html#SECTION001040000000000000000
+   [5]: Security.html#SECTION001050000000000000000
+