diff --git a/.gitignore b/.gitignore
index 614659a..fca81e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
 /.idea
 /examples.conf
 /conf/env.sh
+/conf/log4j.properties
diff --git a/docs/batch.md b/docs/batch.md
index 305a732..af9205e 100644
--- a/docs/batch.md
+++ b/docs/batch.md
@@ -30,8 +30,8 @@
 Verify data was ingested by scanning the table using the Accumulo shell:
 
     $ accumulo shell
-    root@instance> table batch
-    root@instance batch> scan
+    root@instance> table examples.batch
+    root@instance examples.batch> scan
 
 Run `RandomBatchScanner` to perform 1000 random queries and verify the results.
 
diff --git a/docs/bloom.md b/docs/bloom.md
index 528bbb5..8a38df5 100644
--- a/docs/bloom.md
+++ b/docs/bloom.md
@@ -39,10 +39,10 @@
     
     $ ./bin/runex bloom.BloomBatchScanner
 
-    Scanning bloom_test1 with seed 7
+    Scanning example.bloom_test1 with seed 7
     Scan finished! 282.49 lookups/sec, 1.77 secs, 500 results
     All expected rows were scanned
-    Scanning bloom_test2 with seed 7
+    Scanning examples.bloom_test2 with seed 7
     Scan finished! 704.23 lookups/sec, 0.71 secs, 500 results
     All expected rows were scanned
 
@@ -52,8 +52,8 @@
     $ accumulo shell -u username -p password -e 'tables -l'
     accumulo.metadata    =>        !0
     accumulo.root        =>        +r
-    bloom_test1          =>         2
-    bloom_test2          =>         3
+    examples.bloom_test1 =>         2
+    examples.bloom_test2 =>         3
     trace                =>         1
 
 So the table id for bloom_test2 is 3. The command below shows what files this
@@ -103,10 +103,10 @@
 Once the flush completes, 500 random queries are done against each table but with a different seed.
 Even when nothing is found the lookups are faster against the table with the bloom filters.
 
-    Writing data to bloom_test3 and bloom_test4 (bloom filters enabled)
-    Scanning bloom_test3 with seed 8
+    Writing data to examples.bloom_test3 and examples.bloom_test4 (bloom filters enabled)
+    Scanning examples.bloom_test3 with seed 8
     Scan finished! 780.03 lookups/sec, 0.64 secs, 0 results
     Did not find 500
-    Scanning bloom_test4 with seed 8
+    Scanning examples.bloom_test4 with seed 8
     Scan finished! 1736.11 lookups/sec, 0.29 secs, 0 results
     Did not find 500
diff --git a/docs/bulkIngest.md b/docs/bulkIngest.md
index 6edee37..28cd3c8 100644
--- a/docs/bulkIngest.md
+++ b/docs/bulkIngest.md
@@ -20,7 +20,7 @@
 
 This tutorial uses the following Java classes.
 
- * [SetupTable.java] - creates the table, 'test_bulk', and sets two split points.
+ * [SetupTable.java] - creates the table, 'examples.test_bulk', and sets two split points.
  * [BulkIngestExample.java] - creates some data to ingest and then ingests the data using mapReduce
  * [VerifyIngest.java] - checks that the data was ingested
  
diff --git a/docs/classpath.md b/docs/classpath.md
index 37526eb..8e8cc28 100644
--- a/docs/classpath.md
+++ b/docs/classpath.md
@@ -33,40 +33,41 @@
 
 Execute following in Accumulo shell to setup classpath context
 
-    root@test15> config -s general.vfs.context.classpath.cx1=hdfs://<namenode host>:<namenode port>/user1/lib/[^.].*.jar
+    root@uno> config -s general.vfs.context.classpath.cx1=hdfs://<namenode host>:<namenode port>/user1/lib/[^.].*.jar
 
-Create a table
+Create a namespace and table
 
-    root@test15> createtable nofoo
+    root@uno> createnamespace examples
+    root@uno> createtable examples.nofoo
 
 The following command makes this table use the configured classpath context
 
-    root@test15 nofoo> config -t nofoo -s table.classpath.context=cx1
+    root@uno examples.nofoo> config -t examples.nofoo -s table.class.loader.context=cx1
 
 The following command configures an iterator that's in FooFilter.jar
 
-    root@test15 nofoo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
+    root@uno examples.nofoo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
     Filter accepts or rejects each Key/Value pair
     ----------> set FooFilter parameter negate, default false keeps k/v that pass accept method, true rejects k/v that pass accept method: false
 
 The commands below show the filter is working.
 
-    root@test15 nofoo> insert foo1 f1 q1 v1
-    root@test15 nofoo> insert noo1 f1 q1 v2
-    root@test15 nofoo> scan
+    root@uno examples.nofoo> insert foo1 f1 q1 v1
+    root@uno examples.nofoo> insert noo1 f1 q1 v2
+    root@uno examples.nofoo> scan
     noo1 f1:q1 []    v2
-    root@test15 nofoo>
+    root@uno examples.nofoo>
 
 Below, an attempt is made to add the FooFilter to a table that's not configured
 to use the classpath context cx1. This fails until the table is configured to
 use cx1.
 
-    root@test15 nofoo> createtable nofootwo
-    root@test15 nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
+    root@uno examples.nofoo> createtable examples.nofootwo
+    root@uno examples.nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
         2013-05-03 12:49:35,943 [shell.Shell] ERROR: org.apache.accumulo.shell.ShellCommandException: Command could 
     not be initialized (Unable to load org.apache.accumulo.test.FooFilter; class not found.)
-    root@test15 nofootwo> config -t nofootwo -s table.classpath.context=cx1
-    root@test15 nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
+    root@uno examples.nofootwo> config -t nofootwo -s table.class.loader.context=cx1
+    root@uno examples.nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
     Filter accepts or rejects each Key/Value pair
     ----------> set FooFilter parameter negate, default false keeps k/v that pass accept method, true rejects k/v that pass accept method: false
 
diff --git a/docs/combiner.md b/docs/combiner.md
index 48dc7e3..7ee9cd1 100644
--- a/docs/combiner.md
+++ b/docs/combiner.md
@@ -29,43 +29,44 @@
 
     Shell - Apache Accumulo Interactive Shell
     -
-    - version: 1.5.0
+    - version: 2.1.0-SNAPSHOT
     - instance name: instance
     - instance id: 00000000-0000-0000-0000-000000000000
     -
     - type 'help' for a list of available commands
     -
-    username@instance> createtable runners
-    username@instance runners> setiter -t runners -p 10 -scan -minc -majc -n decStats -class org.apache.accumulo.examples.combiner.StatsCombiner
+    username@instance> createnamespace examples
+    username@instance> createtable examples.runners
+    username@instance exampoles.runners> setiter -t runners -p 10 -scan -minc -majc -n decStats -class org.apache.accumulo.examples.combiner.StatsCombiner
     Combiner that keeps track of min, max, sum, and count
     ----------> set StatsCombiner parameter all, set to true to apply Combiner to every column, otherwise leave blank. if true, columns option will be ignored.: 
     ----------> set StatsCombiner parameter columns, <col fam>[:<col qual>]{,<col fam>[:<col qual>]} escape non aplhanum chars using %<hex>.: stat
     ----------> set StatsCombiner parameter reduceOnFullCompactionOnly, If true, only reduce on full major compactions.  Defaults to false. : 
     ----------> set StatsCombiner parameter radix, radix/base of the numbers: 10
-    username@instance runners> setiter -t runners -p 11 -scan -minc -majc -n hexStats -class org.apache.accumulo.examples.combiner.StatsCombiner
+    username@instance examples.runners> setiter -t runners -p 11 -scan -minc -majc -n hexStats -class org.apache.accumulo.examples.combiner.StatsCombiner
     Combiner that keeps track of min, max, sum, and count
     ----------> set StatsCombiner parameter all, set to true to apply Combiner to every column, otherwise leave blank. if true, columns option will be ignored.: 
     ----------> set StatsCombiner parameter columns, <col fam>[:<col qual>]{,<col fam>[:<col qual>]} escape non-alphanum chars using %<hex>.: hstat
     ----------> set StatsCombiner parameter reduceOnFullCompactionOnly, If true, only reduce on full major compactions.  Defaults to false. : 
     ----------> set StatsCombiner parameter radix, radix/base of the numbers: 16
-    username@instance runners> insert 123456 name first Joe
-    username@instance runners> insert 123456 stat marathon 240
-    username@instance runners> scan
+    username@instance examples.runners> insert 123456 name first Joe
+    username@instance examples.runners> insert 123456 stat marathon 240
+    username@instance examples.runners> scan
     123456 name:first []    Joe
     123456 stat:marathon []    240,240,240,1
-    username@instance runners> insert 123456 stat marathon 230
-    username@instance runners> insert 123456 stat marathon 220
-    username@instance runners> scan
+    username@instance examples.runners> insert 123456 stat marathon 230
+    username@instance examples.runners> insert 123456 stat marathon 220
+    username@instance examples.runners> scan
     123456 name:first []    Joe
     123456 stat:marathon []    220,240,690,3
-    username@instance runners> insert 123456 hstat virtualMarathon 6a
-    username@instance runners> insert 123456 hstat virtualMarathon 6b
-    username@instance runners> scan
+    username@instance examples.runners> insert 123456 hstat virtualMarathon 6a
+    username@instance examples.runners> insert 123456 hstat virtualMarathon 6b
+    username@instance examples.runners> scan
     123456 hstat:virtualMarathon []    6a,6b,d5,2
     123456 name:first []    Joe
     123456 stat:marathon []    220,240,690,3
 
-In this example a table is created and the example stats combiner is applied to
+In this example a table is created, and the example stats combiner is applied to
 the column family stat and hstat. The stats combiner computes min,max,sum, and
 count. It can be configured to use a different base or radix. In the example
 above the column family stat is configured for base 10 and the column family
diff --git a/docs/compactionStrategy.md b/docs/compactionStrategy.md
index 8b63ae8..594b28d 100644
--- a/docs/compactionStrategy.md
+++ b/docs/compactionStrategy.md
@@ -34,7 +34,8 @@
 To begin, run the command to create a table for testing.
 
 ```bash
-$ accumulo shell -u <username> -p <password> -e "createtable test1"
+$ accumulo shell -u <username> -p <password> -e "createnamespace examples"
+$ accumulo shell -u <username> -p <password> -e "createtable examples.test1"
 ```
 
 The commands below will configure the BasicCompactionStrategy to:
@@ -43,24 +44,24 @@
  - Compact files less than 100M using snappy.
  
 ```bash
- $ accumulo shell -u <username> -p <password> -e "config -t test1 -s table.file.compress.type=snappy"
- $ accumulo shell -u <username> -p <password> -e "config -t test1 -s table.majc.compaction.strategy=org.apache.accumulo.tserver.compaction.strategies.BasicCompactionStrategy"
- $ accumulo shell -u <username> -p <password> -e "config -t test1 -s table.majc.compaction.strategy.opts.filter.size=250M"
- $ accumulo shell -u <username> -p <password> -e "config -t test1 -s table.majc.compaction.strategy.opts.large.compress.threshold=100M"
- $ accumulo shell -u <username> -p <password> -e "config -t test1 -s table.majc.compaction.strategy.opts.large.compress.type=gz"
+ $ accumulo shell -u <username> -p <password> -e "config -t examples.test1 -s table.file.compress.type=snappy"
+ $ accumulo shell -u <username> -p <password> -e "config -t test1 -s examples.table.majc.compaction.strategy=org.apache.accumulo.tserver.compaction.strategies.BasicCompactionStrategy"
+ $ accumulo shell -u <username> -p <password> -e "config -t test1 -s examples.table.majc.compaction.strategy.opts.filter.size=250M"
+ $ accumulo shell -u <username> -p <password> -e "config -t test1 -s examples.table.majc.compaction.strategy.opts.large.compress.threshold=100M"
+ $ accumulo shell -u <username> -p <password> -e "config -t test1 -s examples.table.majc.compaction.strategy.opts.large.compress.type=gz"
 ```
 
 Generate some data and files in order to test the strategy:
 
 ```bash
-$ ./bin/runex client.SequentialBatchWriter -t test1 --start 0 --num 10000 --size 50
-$ accumulo shell -u <username> -p <password> -e "flush -t test1"
-$ ./bin/runex client.SequentialBatchWriter -t test1 --start 0 --num 11000 --size 50
-$ accumulo shell -u <username> -p <password> -e "flush -t test1"
-$ ./bin/runex client.SequentialBatchWriter -t test1 --start 0 --num 12000 --size 50
-$ accumulo shell -u <username> -p <password> -e "flush -t test1"
-$ ./bin/runex client.SequentialBatchWriter -t test1 --start 0 --num 13000 --size 50
-$ accumulo shell -u <username> -p <password> -e "flush -t test1"
+$ ./bin/runex client.SequentialBatchWriter -t examples.test1 --start 0 --num 10000 --size 50
+$ accumulo shell -u <username> -p <password> -e "flush -t examples.test1"
+$ ./bin/runex client.SequentialBatchWriter -t examples.test1 --start 0 --num 11000 --size 50
+$ accumulo shell -u <username> -p <password> -e "flush -t examples.test1"
+$ ./bin/runex client.SequentialBatchWriter -t examples.test1 --start 0 --num 12000 --size 50
+$ accumulo shell -u <username> -p <password> -e "flush -t examples.test1"
+$ ./bin/runex client.SequentialBatchWriter -t examples.test1 --start 0 --num 13000 --size 50
+$ accumulo shell -u <username> -p <password> -e "flush -t examples.test1"
 ```
 
 View the tserver log in <accumulo_home>/logs for the compaction and find the name of the <rfile> that was compacted for your table. Print info about this file using the PrintInfo tool:
diff --git a/docs/constraints.md b/docs/constraints.md
index 71803bc..8231518 100644
--- a/docs/constraints.md
+++ b/docs/constraints.md
@@ -22,8 +22,6 @@
  * [NumericValueConstraint.java] - a constraint that requires numeric string values
  * [MaxMutationSize.java] - a constraint that limits the size of mutations accepted into a table
 
-Remember to copy the accumulo-examples-\*.jar to Accumulo's 'lib/ext' directory.
-
 AlphaNumKeyConstraint prevents insertion of keys with characters not between aA and zZ or 0 to 9.  
 NumericValueConstraint prevents insertion of values with characters not between 0 and 9. The examples create mutations
 that violate the constraint, throwing an exception.
diff --git a/docs/deleteKeyValuePair.md b/docs/deleteKeyValuePair.md
index 87315a3..b96cd29 100644
--- a/docs/deleteKeyValuePair.md
+++ b/docs/deleteKeyValuePair.md
@@ -20,28 +20,29 @@
 
 ```
 $ /path/to/accumulo shell -u username -p secret
-username@instance> createtable deleteKeyValuePair
-username@instance deleteKeyValuePair> insert 567890 name first Joe
-username@instance deleteKeyValuePair> insert 567890 name last Smith
-username@instance deleteKeyValuePair> insert 567890 address city Columbia
+username@instance> createnamespace examples
+username@instance> createtable examples.deleteKeyValuePair
+username@instance examples.deleteKeyValuePair> insert 567890 name first Joe
+username@instance examples.deleteKeyValuePair> insert 567890 name last Smith
+username@instance examples.deleteKeyValuePair> insert 567890 address city Columbia
 ```
 
 ```
-username@instance deleteKeyValuePair> scan
+username@instance examples.deleteKeyValuePair> scan
 567890 address:city []    Columbia
 567890 name:first []    Joe
 567890 name:last []    Smith
 ```
 
 ```
-username@instance deleteKeyValuePair> flush -w
+username@instance examples.deleteKeyValuePair> flush -w
 2019-04-18 11:01:47,444 [shell.Shell] INFO : Flush of table deleteKeyValuePair completed.
 ```
 
-Get the deleteKeyValuePair table id.
+Get the examples.deleteKeyValuePair table id.
 
 ```
-username@instance deleteKeyValuePair> tables -l
+username@instance examples.deleteKeyValuePair> tables -l
 accumulo.metadata    =>        !0
 accumulo.replication =>      +rep
 accumulo.root        =>        +r
@@ -51,7 +52,7 @@
 Scan accumulo.metadata table to see the list of RFiles Accumulo is currently using.
 
 ```
-username@instance deleteKeyValuePair> scan -t accumulo.metadata -c file -r 1t<
+username@instance examples.deleteKeyValuePair> scan -t accumulo.metadata -c file -r 1t<
 1t< file:hdfs://localhost:8020/accumulo/tables/1t/default_tablet/F00007em.rf
 ```
 
@@ -59,6 +60,7 @@
 
 ```
 $ /path/to/accumulo rfile-info -d hdfs://localhost/accumulo/tables/1t/default_tablet/F00007em.rf
+RFile Version            : 8
 
 Locality group           : <DEFAULT>
     Num   blocks           : 1
@@ -77,27 +79,29 @@
       Raw size             : 141 bytes
       Compressed size      : 97 bytes
       Compression type     : gz
-567890 address:city [] 1555418057811 false -> Columbia
-567890 name:first [] 1555418067848 false -> Joe
-567890 name:last [] 1555418063052 false -> Smith
+      
+567890 address:city [] 1618581304723 false -> Columbia
+567890 name:first [] 1618581291527 false -> Joe
+567890 name:last [] 1618581297272 false -> Smith
 ```
 Delete a key-value pair and view a newly created RFile to verify the deletion flag is true.
 
 ```
 $ /path/to/accumulo shell -u username -p secret
-username@instance> table deleteKeyValuePair
-username@instance deleteKeyValuePair> delete 567890 name first
-username@instance deleteKeyValuePair> flush -w
+username@instance> table examples.deleteKeyValuePair
+username@instance examples.deleteKeyValuePair> delete 567890 name first
+username@instance examples.deleteKeyValuePair> flush -w
 ```
 
 ```
-username@instance deleteKeyValuePair> scan -t accumulo.metadata -c file -r 1t<
+username@instance examples.deleteKeyValuePair> scan -t accumulo.metadata -c file -r 1t<
 1t< file:hdfs://localhost:8020/accumulo/tables/1t/default_tablet/F00007em.rf
 1t< file:hdfs://localhost:8020/accumulo/tables/1t/default_tablet/F00007fq.rf
 ```
 
 ```
 $ /path/to/accumulo rfile-info -d hdfs://localhost/accumulo/tables/1t/default_tablet/F00007fq.rf
+RFile Version            : 8
 
 Locality group           : <DEFAULT>
     Num   blocks           : 1
@@ -116,26 +120,28 @@
       Raw size             : 121 bytes
       Compressed size      : 68 bytes
       Compression type     : gz
-
-567890 name:first [] 1555419184531 true ->
+      
+567890 name:first [] 1618581499491 true ->
 ```
 
 Compact the RFiles and verify the key-value pair was removed.  The new RFile will start with 'A'.
 
 ```
 $ /path/to/accumulo shell -u username -p secret
-username@instance deleteKeyValuePair> compact -t deleteKeyValuePair -w
+username@instance> compact -t examples.deleteKeyValuePair -w
 2019-04-17 08:17:15,468 [shell.Shell] INFO : Compacting table ...
-2019-04-17 08:17:16,143 [shell.Shell] INFO : Compaction of table deleteKeyValuePair completed for given range
+2019-04-17 08:17:16,143 [shell.Shell] INFO : Compaction of table examples.deleteKeyValuePair 
+completed for given range
 ```
 
 ```
-username@instance deleteKeyValuePair> scan -t accumulo.metadata -c file -r 1t<
+username@instance> scan -t accumulo.metadata -c file -r 1t<
 lt< file:hdfs://localhost:8020/accumulo/tables/1t/default_tablet/A00007g1.rf
 ```
 
  ```
 $ /path/to/accumulo rfile-info -v hdfs://localhost/accumulo/tables/1t/default_tablet/A00007g1.rf
+RFile Version            : 8
 
 Locality group           : <DEFAULT>
     Num   blocks           : 1
@@ -154,7 +160,10 @@
       Raw size             : 141 bytes
       Compressed size      : 96 bytes
       Compression type     : gz
-
-567890 address:city [] 1555418057811 false -> Columbia
-567890 name:last [] 1555418063052 false -> Smith
+      
+Locality Group: <DEFAULT>
+Visibility                 Number of keys          Percent of keys      Number of blocks        Percent of blocks
+                                2                       100.00%                 1                  100.00%
+Number of keys: 2
+     
 ```
diff --git a/docs/dirlist.md b/docs/dirlist.md
index 2b653cf..159f7aa 100644
--- a/docs/dirlist.md
+++ b/docs/dirlist.md
@@ -43,26 +43,26 @@
 
 then run the Viewer:
 
-    $ ./bin/runex dirlist.Viewer -t dirTable --dataTable dataTable --auths exampleVis --path /local/username/workspace
+    $ ./bin/runex dirlist.Viewer -t examples.dirTable --dataTable examples.dataTable --auths exampleVis --path /local/username/workspace
 
 To list the contents of specific directories, use QueryUtil.java.
 
-    $ ./bin/runex dirlist.QueryUtil -t dirTable --auths exampleVis --path /local/username
-    $ ./bin/runex dirlist.QueryUtil -t dirTable --auths exampleVis --path /local/username/workspace
+    $ ./bin/runex dirlist.QueryUtil -t examples.dirTable --auths exampleVis --path /local/username
+    $ ./bin/runex dirlist.QueryUtil -t examples.dirTable --auths exampleVis --path /local/username/workspace
 
 To perform searches on file or directory names, also use QueryUtil.java. Search terms must contain no more than one wild card and cannot contain "/".
 *Note* these queries run on the _indexTable_ table instead of the dirTable table.
 
-    $ ./bin/runex dirlist.QueryUtil -t indexTable --auths exampleVis --path filename --search
-    $ ./bin/runex dirlist.QueryUtil -t indexTable --auths exampleVis --path 'filename*' --search
-    $ ./bin/runex dirlist.QueryUtil -t indexTable --auths exampleVis --path '*jar' --search
-    $ ./bin/runex dirlist.QueryUtil -t indexTable --auths exampleVis --path 'filename*jar' --search
+    $ ./bin/runex dirlist.QueryUtil -t examples.indexTable --auths exampleVis --path filename --search
+    $ ./bin/runex dirlist.QueryUtil -t examples.indexTable --auths exampleVis --path 'filename*' --search
+    $ ./bin/runex dirlist.QueryUtil -t examples.indexTable --auths exampleVis --path '*jar' --search
+    $ ./bin/runex dirlist.QueryUtil -t examples.indexTable --auths exampleVis --path 'filename*jar' --search
 
 To count the number of direct children (directories and files) and descendants (children and children's descendants, directories and files), run the FileCount over the dirTable table.
 The results are written back to the same table. FileCount reads from and writes to Accumulo. This requires scan authorizations for the read and a visibility for the data written.
 In this example, the authorizations and visibility are set to the same value, exampleVis. See the [visibility example][vis] for more information on visibility and authorizations.
 
-    $ ./bin/runex dirlist.FileCount -t dirTable --auths exampleVis
+    $ ./bin/runex dirlist.FileCount -t examples.dirTable --auths exampleVis
 
 ## Directory Table
 
diff --git a/docs/export.md b/docs/export.md
index 6bab52d..87d5385 100644
--- a/docs/export.md
+++ b/docs/export.md
@@ -24,22 +24,23 @@
 for the duration of the distcp. An easy way to take a table offline without
 interuppting access to it is to clone it and take the clone offline.
 
-    root@test15> createtable table1
-    root@test15 table1> insert a cf1 cq1 v1
-    root@test15 table1> insert h cf1 cq1 v2
-    root@test15 table1> insert z cf1 cq1 v3
-    root@test15 table1> insert z cf1 cq2 v4
-    root@test15 table1> addsplits -t table1 b r
-    root@test15 table1> scan
+    root@test15> createnamespace examples
+    root@test15> createtable examples.table1
+    root@test15 examples.table1> insert a cf1 cq1 v1
+    root@test15 examples.table1> insert h cf1 cq1 v2
+    root@test15 examples.table1> insert z cf1 cq1 v3
+    root@test15 examples.table1> insert z cf1 cq2 v4
+    root@test15 examples.table1> addsplits -t examples.table1 b r
+    root@test15 examples.table1> scan
     a cf1:cq1 []    v1
     h cf1:cq1 []    v2
     z cf1:cq1 []    v3
     z cf1:cq2 []    v4
-    root@test15> config -t table1 -s table.split.threshold=100M
-    root@test15 table1> clonetable table1 table1_exp
-    root@test15 table1> offline table1_exp
-    root@test15 table1> exporttable -t table1_exp /tmp/table1_export
-    root@test15 table1> quit
+    root@test15 examples.table1> config -t examples.table1 -s table.split.threshold=100M
+    root@test15 examples.table1> clonetable examples.table1 examples.table1_exp
+    root@test15 examples.table1table1> offline examples.table1_exp
+    root@test15 examples.table1> exporttable -t examples.table1_exp /tmp/table1_export
+    root@test15 examples.table1> quit
 
 After executing the export command, a few files are created in the hdfs dir.
 One of the files is a list of files to distcp as shown below.
@@ -61,17 +62,17 @@
 The data, splits, config, and logical time information for the table were
 preserved.
 
-    root@test15> importtable table1_copy /tmp/table1_export_dest
-    root@test15> table table1_copy
-    root@test15 table1_copy> scan
+    root@test15> importtable examples.table1_copy /tmp/table1_export_dest
+    root@test15> table examples.table1_copy
+    root@test15 examples.table1_copy> scan
     a cf1:cq1 []    v1
     h cf1:cq1 []    v2
     z cf1:cq1 []    v3
     z cf1:cq2 []    v4
-    root@test15 table1_copy> getsplits -t table1_copy
+    root@test15 examples.table1_copy> getsplits -t examples.table1_copy
     b
     r
-    root@test15> config -t table1_copy -f split
+    root@test15> config -t examples.table1_copy -f split
     ---------+--------------------------+-------------------------------------------
     SCOPE    | NAME                     | VALUE
     ---------+--------------------------+-------------------------------------------
@@ -83,7 +84,7 @@
     accumulo.root        =>        +r
     table1_copy          =>         5
     trace                =>         1
-    root@test15 table1_copy> scan -t accumulo.metadata -b 5 -c srv:time
+    root@test15> scan -t accumulo.metadata -b 5 -c srv:time
     5;b srv:time []    M1343224500467
     5;r srv:time []    M1343224500467
     5< srv:time []    M1343224500467
diff --git a/docs/filedata.md b/docs/filedata.md
index 7ee9d9c..a77a35d 100644
--- a/docs/filedata.md
+++ b/docs/filedata.md
@@ -32,18 +32,21 @@
 
 If you haven't already run the [dirlist example][dirlist], ingest a file with FileDataIngest.
 
-    $ ./bin/runex filedata.FileDataIngest -t dataTable --auths exampleVis --chunk 1000 /path/to/accumulo/README.md
+    $ ./bin/runex filedata.FileDataIngest -t examples.dataTable --auths exampleVis --chunk 1000 /path/to/accumulo/README.md
 
-Open the accumulo shell and look at the data. The row is the MD5 hash of the file, which you can verify by running a command such as 'md5sum' on the file.
+Open the accumulo shell and look at the data. The row is the MD5 hash of the file, which you can 
+verify by running a command such as 'md5sum' on the file. Note that in order to scan the 
+examples.dataTable the class, org.apache.accumulo.examples.filedata.ChunkCombiner, must be in 
+your classpath, or the accumulo-examples-shaded.jar should be moved to the accumulo lib directory.
 
-    > scan -t dataTable
+    > scan -t examples.dataTable
 
 Run the CharacterHistogram MapReduce to add some information about the file.
 
-    $ ./bin/runmr filedata.CharacterHistogram -t dataTable --auths exampleVis --vis exampleVis
+    $ ./bin/runmr filedata.CharacterHistogram -t examples.dataTable --auths exampleVis --vis exampleVis
 
 Scan again to see the histogram stored in the 'info' column family.
 
-    > scan -t dataTable
+    > scan -t examples.dataTable
 
 [dirlist]: dirlist.md
diff --git a/docs/filter.md b/docs/filter.md
index 3f41265..ee34b33 100644
--- a/docs/filter.md
+++ b/docs/filter.md
@@ -26,22 +26,23 @@
 return value of the accept method is negated, so that key/value pairs accepted
 by the method are omitted by the Filter.
 
-    username@instance> createtable filtertest
-    username@instance filtertest> setiter -t filtertest -scan -p 10 -n myfilter -ageoff
+    username@instance> createnamespace examples
+    username@instance> createtable examples.filtertest
+    username@instance examples.filtertest> setiter -t examples.filtertest -scan -p 10 -n myfilter -ageoff
     AgeOffFilter removes entries with timestamps more than <ttl> milliseconds old
     ----------> set AgeOffFilter parameter negate, default false keeps k/v that pass accept method, true rejects k/v that pass accept method:
     ----------> set AgeOffFilter parameter ttl, time to live (milliseconds): 30000
     ----------> set AgeOffFilter parameter currentTime, if set, use the given value as the absolute time in milliseconds as the current time of day:
-    username@instance filtertest> scan
-    username@instance filtertest> insert foo a b c
-    username@instance filtertest> scan
+    username@instance examples.filtertest> scan
+    username@instance examples.filtertest> insert foo a b c
+    username@instance examples.filtertest> scan
     foo a:b []    c
-    username@instance filtertest>
+    username@instance examples.filtertest>
 
 ... wait 30 seconds ...
 
-    username@instance filtertest> scan
-    username@instance filtertest>
+    username@instance examples.filtertest> scan
+    username@instance examples.filtertest>
 
 Note the absence of the entry inserted more than 30 seconds ago. Since the
 scope was set to "scan", this means the entry is still in Accumulo, but is
@@ -59,21 +60,21 @@
 following commands show how to enable the AgeOffFilter for the minc and majc
 scopes using the -class flag, then flush and compact the table.
 
-    username@instance filtertest> setiter -t filtertest -minc -majc -p 10 -n myfilter -class org.apache.accumulo.core.iterators.user.AgeOffFilter
+    username@instance examples.filtertest> setiter -t examples.filtertest -minc -majc -p 10 -n myfilter -class org.apache.accumulo.core.iterators.user.AgeOffFilter
     AgeOffFilter removes entries with timestamps more than <ttl> milliseconds old
     ----------> set AgeOffFilter parameter negate, default false keeps k/v that pass accept method, true rejects k/v that pass accept method:
     ----------> set AgeOffFilter parameter ttl, time to live (milliseconds): 30000
     ----------> set AgeOffFilter parameter currentTime, if set, use the given value as the absolute time in milliseconds as the current time of day:
-    username@instance filtertest> flush
-    06 10:42:24,806 [shell.Shell] INFO : Flush of table filtertest initiated...
-    username@instance filtertest> compact
-    06 10:42:36,781 [shell.Shell] INFO : Compaction of table filtertest started for given range
-    username@instance filtertest> flush -t filtertest -w
-    06 10:42:52,881 [shell.Shell] INFO : Flush of table filtertest completed.
-    username@instance filtertest> compact -t filtertest -w
+    username@instance examples.filtertest> flush
+    06 10:42:24,806 [shell.Shell] INFO : Flush of table examples.filtertest initiated...
+    username@instance examples.filtertest> compact
+    06 10:42:36,781 [shell.Shell] INFO : Compaction of table examples.filtertest started for given range
+    username@instance examples.filtertest> flush -t examples.filtertest -w
+    06 10:42:52,881 [shell.Shell] INFO : Flush of table examples.filtertest completed.
+    username@instance examples.filtertest> compact -t examples.filtertest -w
     06 10:43:00,632 [shell.Shell] INFO : Compacting table ...
-    06 10:43:01,307 [shell.Shell] INFO : Compaction of table filtertest completed for given range
-    username@instance filtertest>
+    06 10:43:01,307 [shell.Shell] INFO : Compaction of table examples.filtertest completed for given range
+    username@instance examples.filtertest>
 
 By default, flush and compact execute in the background, but with the -w flag
 they will wait to return until the operation has completed. Both are
@@ -86,7 +87,7 @@
 
 To see the iterator settings for a table, use config.
 
-    username@instance filtertest> config -t filtertest -f iterator
+    username@instance examples.filtertest> config -t examples.filtertest -f iterator
     ---------+---------------------------------------------+---------------------------------------------------------------------------
     SCOPE    | NAME                                        | VALUE
     ---------+---------------------------------------------+---------------------------------------------------------------------------
@@ -103,7 +104,7 @@
     table    | table.iterator.scan.vers .................. | 20,org.apache.accumulo.core.iterators.user.VersioningIterator
     table    | table.iterator.scan.vers.opt.maxVersions .. | 1
     ---------+---------------------------------------------+---------------------------------------------------------------------------
-    username@instance filtertest>
+    username@instance examples.filtertest>
 
 When setting new iterators, make sure to order their priority numbers
 (specified with -p) in the order you would like the iterators to be applied.
diff --git a/docs/helloworld.md b/docs/helloworld.md
index 5666b77..b0d4381 100644
--- a/docs/helloworld.md
+++ b/docs/helloworld.md
@@ -31,8 +31,8 @@
 
 To view the entries, use the shell (run `accumulo shell -u username -p password` to access it) to scan the table:
 
-    username@instance> table hellotable
-    username@instance hellotable> scan
+    username@instance> table examples.hellotable
+    username@instance examples.hellotable> scan
 
 You can also use a Java class to scan the table:
 
diff --git a/docs/isolation.md b/docs/isolation.md
index a848af9..1a37567 100644
--- a/docs/isolation.md
+++ b/docs/isolation.md
@@ -30,7 +30,9 @@
 Below, Interference Test is run without isolation enabled for 5000 iterations
 and it reports problems.
 
-    $ ./bin/runex isolation.InterferenceTest -t isotest --iterations 5000
+
+    $ accumulo shell -u <username> -p <password> -e 'createnamespace examples' 
+    $ ./bin/runex isolation.InterferenceTest -t examples.isotest --iterations 50000
     ERROR Columns in row 053 had multiple values [53, 4553]
     ERROR Columns in row 061 had multiple values [561, 61]
     ERROR Columns in row 070 had multiple values [570, 1070]
@@ -43,7 +45,7 @@
 Below, Interference Test is run with isolation enabled for 5000 iterations and
 it reports no problems.
 
-    $ ./bin/runex isolation.InterferenceTest -t isotest --iterations 5000 --isolated
+    $ ./bin/runex isolation.InterferenceTest -t examples.isotest --iterations 50000 --isolated
     finished
 
 
diff --git a/docs/regex.md b/docs/regex.md
index f9c4715..86c3b18 100644
--- a/docs/regex.md
+++ b/docs/regex.md
@@ -23,10 +23,11 @@
 put a trivial amount of data into accumulo using the accumulo shell:
 
     $ accumulo shell
-    username@instance> createtable regex
-    username@instance> insert dogrow dogcf dogcq dogvalue
-    username@instance> insert catrow catcf catcq catvalue
-    username@instance> quit
+    username@instance> createnamespace examples
+    username@instance> createtable examples.regex
+    username@instance examples.regex> insert dogrow dogcf dogcq dogvalue
+    username@instance examples.regex> insert catrow catcf catcq catvalue
+    username@instance examples.regex> quit
 
 The RegexExample class sets an iterator on the scanner. This does pattern matching
 against each key/value in accumulo, and only returns matching items. It will do this
@@ -34,12 +35,11 @@
 
 The following will search for any rows in the input table that starts with "dog":
 
-    $ ./bin/runmr mapreduce.RegexExample -t regex --rowRegex 'dog.*' --output /tmp/output
+    $ ./bin/runmr mapreduce.RegexExample -t examples.regex --rowRegex 'dog.*' --output /tmp/output
 
     $ hdfs dfs -ls /tmp/output
     Found 3 items
     -rw-r--r--   1 username supergroup          0 2013-01-10 14:11 /tmp/output/_SUCCESS
-    drwxr-xr-x   - username supergroup          0 2013-01-10 14:10 /tmp/output/_logs
     -rw-r--r--   1 username supergroup         51 2013-01-10 14:10 /tmp/output/part-m-00000
 
 We can see the output of our little map-reduce job:
diff --git a/docs/reservations.md b/docs/reservations.md
index a987cfe..0b682ba 100644
--- a/docs/reservations.md
+++ b/docs/reservations.md
@@ -31,9 +31,10 @@
     ---------------------+--------------------------------------+-------------------------------
         <instance name> | 9f8f2a97-432f-4e66-b153-861e2a1ca246 |                localhost:9999
     
-    $ /path/to/accumulo shell -u root -p secret -e "createtable ars"
+    $ /path/to/accumulo shell -u root -p secret -e "createnamespace examples"
+    $ /path/to/accumulo shell -u root -p secret -e "createtable examples.ars"
     $ ./bin/runex reservations.ARS
-    >connect <instance name> localhost root secret ars
+    >connect <instance name> localhost root secret examples.ars
       connected
     >
       Commands :
@@ -59,8 +60,8 @@
 Scanning the table in the Accumulo shell after running the example shows the
 following:
 
-    root@test16> table ars
-    root@test16 ars> scan
+    root@test16> table examples.ars
+    root@test16 examples.ars> scan
     room06:20140101 res:0001 []    mallory
     room06:20140101 res:0003 []    trent
     room06:20140101 res:0004 []    eve
diff --git a/docs/rgbalancer.md b/docs/rgbalancer.md
index daa1a3b..57d87eb 100644
--- a/docs/rgbalancer.md
+++ b/docs/rgbalancer.md
@@ -25,9 +25,10 @@
 all of the tablets where the split point has the same two digits to be on
 different tservers.  This gives us four groups of tablets: 01, 02, 03, and 04.   
 
-    root@accumulo> createtable testRGB
-    root@accumulo testRGB> addsplits -t testRGB 01b 01m 01r 01z  02b 02m 02r 02z 03b 03m 03r 03z 04a 04b 04c 04d 04e 04f 04g 04h 04i 04j 04k 04l 04m 04n 04o 04p
-    root@accumulo testRGB> tables -l
+    root@accumulo> createnamespace examples
+    root@accumulo> createtable examples.testRGB
+    root@accumulo examples.testRGB> addsplits -t examples.testRGB 01b 01m 01r 01z 02b 02m 02r 02z 03b 03m 03r 03z 04a 04b 04c 04d 04e 04f 04g 04h 04i 04j 04k 04l 04m 04n 04o 04p
+    root@accumulo examples.testRGB> tables -l
     accumulo.metadata    =>        !0
     accumulo.replication =>      +rep
     accumulo.root        =>        +r
@@ -36,7 +37,7 @@
 
 After adding the splits we look at the locations in the metadata table.
 
-    root@accumulo testRGB> scan -t accumulo.metadata -b 2; -e 2< -c loc
+    root@accumulo examples.testRGB> scan -t accumulo.metadata -b 2; -e 2< -c loc
     2;01b loc:34a5f6e086b000c []    ip-10-1-2-25:9997
     2;01m loc:34a5f6e086b000c []    ip-10-1-2-25:9997
     2;01r loc:14a5f6e079d0011 []    ip-10-1-2-15:9997
@@ -95,13 +96,13 @@
 from a tablets end row as the group id.  Tablets that don't match and the
 default tablet are configured to be in group 04.
 
-    root@accumulo testRGB> config -t testRGB -s table.custom.balancer.group.regex.pattern=(\d\d).*
-    root@accumulo testRGB> config -t testRGB -s table.custom.balancer.group.regex.default=04
-    root@accumulo testRGB> config -t testRGB -s table.balancer=org.apache.accumulo.server.master.balancer.RegexGroupBalancer
+    root@accumulo examples.testRGB> config -t examples.testRGB -s table.custom.balancer.group.regex.pattern=(\d\d).*
+    root@accumulo examples.testRGB> config -t examples.testRGB -s table.custom.balancer.group.regex.default=04
+    root@accumulo examples.testRGB> config -t examples.testRGB -s table.balancer=org.apache.accumulo.server.master.balancer.RegexGroupBalancer
 
-After waiting a little bit, look at the tablet locations again and all is good.
+After waiting a bit, look at the tablet locations again and all is good.
 
-    root@accumulo testRGB> scan -t accumulo.metadata -b 2; -e 2< -c loc
+    root@accumulo examples.testRGB> scan -t accumulo.metadata -b 2; -e 2< -c loc
     2;01b loc:34a5f6e086b000a []    ip-10-1-2-18:9997
     2;01m loc:34a5f6e086b000c []    ip-10-1-2-25:9997
     2;01r loc:14a5f6e079d0011 []    ip-10-1-2-15:9997
diff --git a/docs/rowhash.md b/docs/rowhash.md
index 5bea7df..303c52b 100644
--- a/docs/rowhash.md
+++ b/docs/rowhash.md
@@ -23,20 +23,21 @@
 put a trivial amount of data into accumulo using the accumulo shell:
 
     $ accumulo shell
-    username@instance> createtable rowhash
-    username@instance> insert a-row cf cq value
-    username@instance> insert b-row cf cq value
-    username@instance> quit
+    username@instance> createnamespace examples
+    username@instance> createtable examples.rowhash
+    username@instance examples.rowhash> insert a-row cf cq value
+    username@instance examples.rowhash> insert b-row cf cq value
+    username@instance examples.rowhash> quit
 
 The RowHash class will insert a hash for each row in the database if it contains a
 specified colum. Here's how you run the map/reduce job
 
-    $ ./bin/runmr mapreduce.RowHash -t rowhash --column cf:cq
+    $ ./bin/runmr mapreduce.RowHash -t examples.rowhash --column cf:cq
 
 Now we can scan the table and see the hashes:
 
     $ accumulo shell
-    username@instance> scan -t rowhash
+    username@instance> scan -t examples.rowhash
     a-row cf:cq []    value
     a-row cf-HASHTYPE:cq-MD5BASE64 []    IGPBYI1uC6+AJJxC4r5YBA==
     b-row cf:cq []    value
diff --git a/docs/sample.md b/docs/sample.md
index 931579c..e631f12 100644
--- a/docs/sample.md
+++ b/docs/sample.md
@@ -23,46 +23,47 @@
 accessed by scanners.  What data is included in the sample set is configurable.
 Below, some data representing documents are inserted.  
 
-    root@instance sampex> createtable sampex
-    root@instance sampex> insert 9255 doc content 'abcde'
-    root@instance sampex> insert 9255 doc url file://foo.txt
-    root@instance sampex> insert 8934 doc content 'accumulo scales'
-    root@instance sampex> insert 8934 doc url file://accumulo_notes.txt
-    root@instance sampex> insert 2317 doc content 'milk, eggs, bread, parmigiano-reggiano'
-    root@instance sampex> insert 2317 doc url file://groceries/9.txt
-    root@instance sampex> insert 3900 doc content 'EC2 ate my homework'
-    root@instance sampex> insert 3900 doc uril file://final_project.txt
+    root@instance> createnamespace examples
+    root@instance> createtable examples.sampex
+    root@instance examples.sampex> insert 9255 doc content 'abcde'
+    root@instance examples.sampex> insert 9255 doc url file://foo.txt
+    root@instance examples.sampex> insert 8934 doc content 'accumulo scales'
+    root@instance examples.sampex> insert 8934 doc url file://accumulo_notes.txt
+    root@instance examples.sampex> insert 2317 doc content 'milk, eggs, bread, parmigiano-reggiano'
+    root@instance examples.sampex> insert 2317 doc url file://groceries/9.txt
+    root@instance examples.sampex> insert 3900 doc content 'EC2 ate my homework'
+    root@instance examples.sampex> insert 3900 doc uril file://final_project.txt
 
-Below the table sampex is configured to build a sample set.  The configuration
+Below the table examples.sampex is configured to build a sample set.  The configuration
 causes Accumulo to include any row where `murmur3_32(row) % 3 ==0` in the
 tables sample data.
 
-    root@instance sampex> config -t sampex -s table.sampler.opt.hasher=murmur3_32
-    root@instance sampex> config -t sampex -s table.sampler.opt.modulus=3
-    root@instance sampex> config -t sampex -s table.sampler=org.apache.accumulo.core.client.sample.RowSampler
+    root@instance examples.sampex> config -t examples.sampex -s table.sampler.opt.hasher=murmur3_32
+    root@instance examples.sampex> config -t examples.sampex -s table.sampler.opt.modulus=3
+    root@instance examples.sampex> config -t examples.sampex -s table.sampler=org.apache.accumulo.core.client.sample.RowSampler
 
 Below, attempting to scan the sample returns an error.  This is because data
 was inserted before the sample set was configured.
 
-    root@instance sampex> scan --sample
+    root@instance examples.sampex> scan --sample
     2015-09-09 12:21:50,643 [shell.Shell] ERROR: org.apache.accumulo.core.client.SampleNotPresentException: Table sampex(ID:2) does not have sampling configured or built
 
 To remedy this problem, the following command will flush in memory data and
 compact any files that do not contain the correct sample data.   
 
-    root@instance sampex> compact -t sampex --sf-no-sample
+    root@instance examples.sampex> compact -t examples.sampex --sf-no-sample
 
 After the compaction, the sample scan works.  
 
-    root@instance sampex> scan --sample
+    root@instance examples.sampex> scan --sample
     2317 doc:content []    milk, eggs, bread, parmigiano-reggiano
     2317 doc:url []    file://groceries/9.txt
 
 The commands below show that updates to data in the sample are seen when
 scanning the sample.
 
-    root@instance sampex> insert 2317 doc content 'milk, eggs, bread, parmigiano-reggiano, butter'
-    root@instance sampex> scan --sample
+    root@instance examples.sampex> insert 2317 doc content 'milk, eggs, bread, parmigiano-reggiano, butter'
+    root@instance examples.sampex> scan --sample
     2317 doc:content []    milk, eggs, bread, parmigiano-reggiano, butter
     2317 doc:url []    file://groceries/9.txt
 
@@ -72,12 +73,12 @@
 will detect this situation and fail sample scans.  The commands below show this
 failure and fixiing the problem with a compaction.
 
-    root@instance sampex> config -t sampex -s table.sampler.opt.modulus=2
-    root@instance sampex> scan --sample
+    root@instance examples.sampex> config -t examples.sampex -s table.sampler.opt.modulus=2
+    root@instance examples.sampex> scan --sample
     2015-09-09 12:22:51,058 [shell.Shell] ERROR: org.apache.accumulo.core.client.SampleNotPresentException: Table sampex(ID:2) does not have sampling configured or built
-    root@instance sampex> compact -t sampex --sf-no-sample
+    root@instance examples.sampex> compact -t examples.sampex --sf-no-sample
     2015-09-09 12:23:07,242 [shell.Shell] INFO : Compaction of table sampex started for given range
-    root@instance sampex> scan --sample
+    root@instance examples.sampex> scan --sample
     2317 doc:content []    milk, eggs, bread, parmigiano-reggiano
     2317 doc:url []    file://groceries/9.txt
     3900 doc:content []    EC2 ate my homework
@@ -86,18 +87,18 @@
     9255 doc:url []    file://foo.txt
 
 The example above is replicated in a java program using the Accumulo API.
-Below is the program name and the command to run it.
+Below is the program name, and the command to run it.
 
     ./bin/runex sample.SampleExample
 
 The commands below look under the hood to give some insight into how this
 feature works.  The commands determine what files the sampex table is using.
 
-    root@instance sampex> tables -l
+    root@instance> tables -l
     accumulo.metadata    =>        !0
     accumulo.replication =>      +rep
     accumulo.root        =>        +r
-    sampex               =>         2
+    examples.sampex      =>         2
     trace                =>         1
     root@instance sampex> scan -t accumulo.metadata -c file -b 2 -e 2<
     2< file:hdfs://localhost:10000/accumulo/tables/2/default_tablet/A000000s.rf []    702,8
@@ -148,31 +149,31 @@
 Shard Sampling Example
 ----------------------
 
-The [shard example][shard] shows how to index and search files using Accumulo.  That
+The Shard example shows how to index and search files using Accumulo.  That
 example indexes documents into a table named `shard`.  The indexing scheme used
 in that example places the document name in the column qualifier.  A useful
 sample of this indexing scheme should contain all data for any document in the
 sample.   To accomplish this, the following commands build a sample for the
 shard table based on the column qualifier.
 
-    root@instance shard> config -t shard -s table.sampler.opt.hasher=murmur3_32
-    root@instance shard> config -t shard -s table.sampler.opt.modulus=101
-    root@instance shard> config -t shard -s table.sampler.opt.qualifier=true
-    root@instance shard> config -t shard -s table.sampler=org.apache.accumulo.core.client.sample.RowColumnSampler
-    root@instance shard> compact -t shard --sf-no-sample -w
+    root@instance examples.shard> config -t examples.shard -s table.sampler.opt.hasher=murmur3_32
+    root@instance examples.shard> config -t examples.shard -s table.sampler.opt.modulus=101
+    root@instance examples.shard> config -t examples.shard -s table.sampler.opt.qualifier=true
+    root@instance examples.shard> config -t examples.shard -s table.sampler=org.apache.accumulo.core.client.sample.RowColumnSampler
+    root@instance examples.shard> compact -t examples.shard --sf-no-sample -w
     2015-07-23 15:00:09,280 [shell.Shell] INFO : Compacting table ...
     2015-07-23 15:00:10,134 [shell.Shell] INFO : Compaction of table shard completed for given range
 
 After enabling sampling, the command below counts the number of documents in
 the sample containing the words `import` and `int`.     
 
-    $ ./bin/runex shard.Query --sample -t shard import int | fgrep '.java' | wc
+    $ ./bin/runex shard.Query --sample -t examples.shard import int | fgrep '.java' | wc
          11      11    1246
 
 The command below counts the total number of documents containing the words
 `import` and `int`.
 
-    $ ./bin/runex shard.Query -t shard import int | fgrep '.java' | wc
+    $ ./bin/runex shard.Query -t examples.shard import int | fgrep '.java' | wc
        1085    1085  118175
 
 The counts 11 out of 1085 total are around what would be expected for a modulus
@@ -188,4 +189,4 @@
 `--sampleCutoff` option below will cause the query to return nothing if based
 on the sample it appears a query would return more than 1000 documents.
 
-    $ ./bin/runex shard.Query --sampleCutoff 1000 -t shard import int | fgrep '.java' | wc
+    $ ./bin/runex shard.Query --sampleCutoff 1000 -t examples.shard import int | fgrep '.java' | wc
diff --git a/docs/shard.md b/docs/shard.md
index dbae395..f6f6848 100644
--- a/docs/shard.md
+++ b/docs/shard.md
@@ -26,16 +26,17 @@
 
 To run these example programs, create two tables like below.
 
-    username@instance> createtable shard
-    username@instance shard> createtable doc2term
+    username@instance> createnamespace examples
+    username@instance> createtable examples.shard
+    username@instance examples.shard> createtable examples.doc2term
 
 After creating the tables, index some files. The following command indexes all of the java files in the Accumulo source code.
 
-    $ find /path/to/accumulo/core -name "*.java" | xargs ./bin/runex shard.Index -t shard --partitions 30
+    $ find /path/to/accumulo/core -name "*.java" | xargs ./bin/runex shard.Index -t examples.shard --partitions 30
 
 The following command queries the index to find all files containing 'foo' and 'bar'.
 
-    $ ./bin/runex shard.Query -t shard foo bar
+    $ ./bin/runex shard.Query -t examples.shard foo bar
     /local/username/workspace/accumulo/src/core/src/test/java/accumulo/core/security/ColumnVisibilityTest.java
     /local/username/workspace/accumulo/src/core/src/test/java/accumulo/core/client/mock/MockConnectorTest.java
     /local/username/workspace/accumulo/src/core/src/test/java/accumulo/core/security/VisibilityEvaluatorTest.java
@@ -44,12 +45,12 @@
 
 In order to run ContinuousQuery, we need to run Reverse.java to populate doc2term.
 
-    $ ./bin/runex shard.Reverse --shardTable shard --doc2Term doc2term
+    $ ./bin/runex shard.Reverse --shardTable examples.shard --doc2Term examples.doc2term
 
 Below ContinuousQuery is run using 5 terms. So it selects 5 random terms from each document, then it continually
 randomly selects one set of 5 terms and queries. It prints the number of matching documents and the time in seconds.
 
-    $ ./bin/runex shard.ContinuousQuery --shardTable shard --doc2Term doc2term --terms 5
+    $ ./bin/runex shard.ContinuousQuery --shardTable examples.shard --doc2Term examples.doc2term --terms 5
     [public, core, class, binarycomparable, b] 2  0.081
     [wordtodelete, unindexdocument, doctablename, putdelete, insert] 1  0.041
     [import, columnvisibilityinterpreterfactory, illegalstateexception, cv, columnvisibility] 1  0.049
diff --git a/docs/tabletofile.md b/docs/tabletofile.md
index 36078e6..cb9f248 100644
--- a/docs/tabletofile.md
+++ b/docs/tabletofile.md
@@ -22,26 +22,24 @@
 put a trivial amount of data into accumulo using the accumulo shell:
 
     $ accumulo shell
-    username@instance> createtable input
-    username@instance> insert dog cf cq dogvalue
-    username@instance> insert cat cf cq catvalue
-    username@instance> insert junk family qualifier junkvalue
-    username@instance> quit
+    root@instance> createnamespace examples
+    root@instance> createtable examples.input
+    root@instance examples.input> insert dog cf cq dogvalue
+    root@instance examples.input> insert cat cf cq catvalue
+    root@instance examples.input> insert junk family qualifier junkvalue
+    root@instance examples.input> quit
 
 The TableToFile class configures a map-only job to read the specified columns and
 write the key/value pairs to a file in HDFS.
 
 The following will extract the rows containing the column "cf:cq":
 
-    $ ./bin/runmr mapreduce.TableToFile -t input --columns cf:cq --output /tmp/output
+    $ ./bin/runmr mapreduce.TableToFile -t exampmles.input --columns cf:cq --output /tmp/output
 
     $ hadoop fs -ls /tmp/output
-    -rw-r--r--   1 username supergroup          0 2013-01-10 14:44 /tmp/output/_SUCCESS
-    drwxr-xr-x   - username supergroup          0 2013-01-10 14:44 /tmp/output/_logs
-    drwxr-xr-x   - username supergroup          0 2013-01-10 14:44 /tmp/output/_logs/history
-    -rw-r--r--   1 username supergroup       9049 2013-01-10 14:44 /tmp/output/_logs/history/job_201301081658_0011_1357847072863_username_TableToFile%5F1357847071434
-    -rw-r--r--   1 username supergroup      26172 2013-01-10 14:44 /tmp/output/_logs/history/job_201301081658_0011_conf.xml
-    -rw-r--r--   1 username supergroup         50 2013-01-10 14:44 /tmp/output/part-m-00000
+    Found 2 items
+    -rw-r--r--   3 root supergroup          0 2021-05-04 10:32 /tmp/output/_SUCCESS
+    -rw-r--r--   3 root supergroup         44 2021-05-04 10:32 /tmp/output/part-m-00000
 
 We can see the output of our little map-reduce job:
 
diff --git a/docs/terasort.md b/docs/terasort.md
index 7e39a9e..16f2ea1 100644
--- a/docs/terasort.md
+++ b/docs/terasort.md
@@ -20,15 +20,20 @@
 be sorted by storing it into accumulo. It uses data very similar to the
 hadoop terasort benchmark.
 
+First, make sure the 'examples' namespace exists. If it already exists, the error message can be 
+ignored.
+
+    $ accumulo shell -u root -p secret -e 'createnamespace examples'   
+
 To run this example you run it with arguments describing the amount of data:
 
     $ ./bin/runmr mapreduce.TeraSortIngest --count 10 --minKeySize 10 --maxKeySize 10 \
-    --minValueSize 78 --maxValueSize 78 --table sort --splits 10 \
+        --minValueSize 78 --maxValueSize 78 --table examples.sort --splits 10 \
 
 After the map reduce job completes, scan the data:
 
     $ accumulo shell
-    username@instance> scan -t sort
+    username@instance> scan -t examples.sort
     +l-$$OE/ZH c:         4 []    GGGGGGGGGGWWWWWWWWWWMMMMMMMMMMCCCCCCCCCCSSSSSSSSSSIIIIIIIIIIYYYYYYYYYYOOOOOOOO
     ,C)wDw//u= c:        10 []    CCCCCCCCCCSSSSSSSSSSIIIIIIIIIIYYYYYYYYYYOOOOOOOOOOEEEEEEEEEEUUUUUUUUUUKKKKKKKK
     75@~?'WdUF c:         1 []    IIIIIIIIIIYYYYYYYYYYOOOOOOOOOOEEEEEEEEEEUUUUUUUUUUKKKKKKKKKKAAAAAAAAAAQQQQQQQQ
diff --git a/docs/visibility.md b/docs/visibility.md
index daca822..b79f91c 100644
--- a/docs/visibility.md
+++ b/docs/visibility.md
@@ -18,12 +18,14 @@
 
 ## Creating a new user
 
+    root@instance> createnamespace examples
     root@instance> createuser username
     Enter new password for 'username': ********
     Please confirm new password for 'username': ********
+
     root@instance> user username
     Enter password for user username: ********
-    username@instance> createtable vistest
+    username@instance> createtable examples.vistest
     06 10:48:47,931 [shell.Shell] ERROR: org.apache.accumulo.core.client.AccumuloSecurityException: Error PERMISSION_DENIED - User does not have permission to perform this action
     username@instance> userpermissions
     System permissions:
@@ -44,8 +46,8 @@
     root@instance> grant -s System.CREATE_TABLE -u username
     root@instance> user username
     Enter password for user username: ********
-    username@instance> createtable vistest
-    username@instance> userpermissions
+    username@instance> createtable examples.vistest
+    username@instance examples.vistest> userpermissions
     System permissions: System.CREATE_TABLE
 
     Namespace permissions (accumulo): Namespace.READ
@@ -53,8 +55,7 @@
     Table permissions (accumulo.metadata): Table.READ
     Table permissions (accumulo.replication): Table.READ
     Table permissions (accumulo.root): Table.READ
-    Table permissions (vistest): Table.READ, Table.WRITE, Table.BULK_IMPORT, Table.ALTER_TABLE, Table.GRANT, Table.DROP_TABLE, Table.GET_SUMMARIES
-    username@instance vistest>
+    Table permissions (examples.vistest): Table.READ, Table.WRITE, Table.BULK_IMPORT, Table.ALTER_TABLE, Table.GRANT, Table.DROP_TABLE, Table.GET_SUMMARIES
 
 ## Inserting data with visibilities
 
@@ -63,14 +64,14 @@
 ASCII character set. Parentheses are required to specify order of operations
 in visibilities.
 
-    username@instance vistest> insert row f1 q1 v1 -l A
-    username@instance vistest> insert row f2 q2 v2 -l A&B
-    username@instance vistest> insert row f3 q3 v3 -l apple&carrot|broccoli|spinach
+    username@instance examples.vistest> insert row f1 q1 v1 -l A
+    username@instance examples.vistest> insert row f2 q2 v2 -l A&B
+    username@instance examples.vistest> insert row f3 q3 v3 -l apple&carrot|broccoli|spinach
     06 11:19:01,432 [shell.Shell] ERROR: org.apache.accumulo.core.util.BadArgumentException: cannot mix | and & near index 12
     apple&carrot|broccoli|spinach
                 ^
-    username@instance vistest> insert row f3 q3 v3 -l (apple&carrot)|broccoli|spinach
-    username@instance vistest>
+    username@instance examples.vistest> insert row f3 q3 v3 -l (apple&carrot)|broccoli|spinach
+    username@instance examples.vistest>
 
 ## Scanning with authorizations
 
@@ -79,54 +80,54 @@
 are only allowed to be a subset of the user's authorizations. By default, a
 user's authorizations set is empty.
 
-    username@instance vistest> scan
-    username@instance vistest> scan -s A
+    username@instance examples.vistest> scan
+    username@instance examples.vistest> scan -s A
     06 11:43:14,951 [shell.Shell] ERROR: java.lang.RuntimeException: org.apache.accumulo.core.client.AccumuloSecurityException: Error BAD_AUTHORIZATIONS - The user does not have the specified authorizations assigned
-    username@instance vistest>
+    username@instance examples.vistest>
 
 ## Setting authorizations for a user
 
-    username@instance vistest> setauths -s A
+    username@instance examples.vistest> setauths -s A
     06 11:53:42,056 [shell.Shell] ERROR: org.apache.accumulo.core.client.AccumuloSecurityException: Error PERMISSION_DENIED - User does not have permission to perform this action
-    username@instance vistest>
+    username@instance examples.vistest>
 
 A user cannot set authorizations unless the user has the System.ALTER_USER permission.
 The root user has this permission.
 
-    username@instance vistest> user root
+    username@instance examples.vistest> user root
     Enter password for user root: ********
-    root@instance vistest> setauths -s A -u username
-    root@instance vistest> user username
+    root@instance examples.vistest> setauths -s A -u username
+    root@instance examples.vistest> user username
     Enter password for user username: ********
-    username@instance vistest> scan -s A
+    username@instance examples.vistest> scan -s A
     row f1:q1 [A]    v1
-    username@instance vistest> scan
+    username@instance examples.vistest> scan
     row f1:q1 [A]    v1
-    username@instance vistest>
+    username@instance examples.vistest>
 
 The default authorizations for a scan are the user's entire set of authorizations.
 
-    username@instance vistest> user root
+    username@instance examples.vistest> user root
     Enter password for user root: ********
-    root@instance vistest> setauths -s A,B,broccoli -u username
-    root@instance vistest> user username
+    root@instance examples.vistest> setauths -s A,B,broccoli -u username
+    root@instance examples.vistest> user username
     Enter password for user username: ********
-    username@instance vistest> getauths
+    username@instance examples.vistest> getauths
     A,B,broccoli
-    username@instance vistest> getauths -u username
+    username@instance examples.vistest> getauths -u username
     A,B,broccoli
 
-    username@instance vistest> scan
+    username@instance examples.vistest> scan
     row f1:q1 [A]    v1
     row f2:q2 [A&B]    v2
     row f3:q3 [(apple&carrot)|broccoli|spinach]    v3
-    username@instance vistest> scan -s B
-    username@instance vistest>
+    username@instance examples.vistest> scan -s B
+    username@instance examples.vistest>
 
 If you want, you can limit a user to only be able to insert data which they can read themselves.
 First, check for any existing constraints.
 
-    username@instance vistest> constraint -l -t vistest
+    username@instance examples.vistest> constraint -l -t examples.vistest
     org.apache.accumulo.core.constraints.DefaultKeySizeConstraint=1
 
 If existing constraints exists, take note of the values assigned to the constraints and use a
@@ -137,18 +138,18 @@
 
 The constraint can be set with the following command:
 
-    username@instance vistest> config -t vistest -s table.constraint.2=org.apache.accumulo.core.constraints.VisibilityConstraint
-    username@instance vistest> constraint -l
-    org.apache.accumulo.core.constraints.DefaultKeySizeConstraint=1
-    org.apache.accumulo.core.constraints.VisibilityConstraint=2
-    username@instance vistest> insert row f4 q4 v4 -l spinach
+    username@instance examples.vistest> config -t examples.vistest -s table.constraint.2=org.apache.accumulo.core.data.constraints.VisibilityConstraint
+    username@instance examples.vistest> constraint -l
+    org.apache.accumulo.core.data.constraints.DefaultKeySizeConstraint=1
+    org.apache.accumulo.core.data.constraints.VisibilityConstraint=2
+    username@instance examples.vistest> insert row f4 q4 v4 -l spinach
          Constraint Failures:
             ConstraintViolationSummary(constrainClass:org.apache.accumulo.core.constraints.VisibilityConstraint, violationCode:2, violationDescription:User does not have authorization on column visibility, numberOfViolatingMutations:1)
-    username@instance vistest> insert row f4 q4 v4 -l spinach|broccoli
-    username@instance vistest> scan
+    username@instance examples.vistest> insert row f4 q4 v4 -l spinach|broccoli
+    username@instance examples.vistest> scan
     row f1:q1 [A]    v1
     row f2:q2 [A&B]    v2
     row f3:q3 [(apple&carrot)|broccoli|spinach]    v3
     row f4:q4 [spinach|broccoli]    v4
-    username@instance vistest>
+    username@instance examples.vistest>
 
diff --git a/docs/wordcount.md b/docs/wordcount.md
index 3e3cc52..8da6599 100644
--- a/docs/wordcount.md
+++ b/docs/wordcount.md
@@ -41,8 +41,8 @@
 After the MapReduce job completes, query the Accumulo table to see word counts.
 
     $ accumulo shell
-    username@instance> table wordCount
-    username@instance wordCount> scan -b the
+    username@instance> table examples.wordcount
+    username@instance examples.wordcount> scan -b the
     the count:20080906 []    75
     their count:20080906 []    2
     them count:20080906 []    1
@@ -56,14 +56,14 @@
 to obtain the client properties from HDFS:
 
     $ hdfs dfs -copyFromLocal ./conf/accumulo-client.properties /user/myuser/
-    $ ./bin/runmr mapreduce.WordCount -i /wc -t wordCount2 -d /user/myuser/accumulo-client.properties
+    $ ./bin/runmr mapreduce.WordCount -i /wc -t examples.wordcount2 -d /user/myuser/accumulo-client.properties
 
-After the MapReduce job completes, query the `wordCount2` table. The results should
+After the MapReduce job completes, query the `wordcount2` table. The results should
 be the same as before:
 
     $ accumulo shell
-    username@instance> table wordCount2
-    username@instance wordCount2> scan -b the
+    username@instance> table examples.wordcount2
+    username@instance examples.wordcount2> scan -b the
     the count:20080906 []    75
     their count:20080906 []    2
     ...
diff --git a/spark/src/main/java/org/apache/accumulo/spark/CopyPlus5K.java b/spark/src/main/java/org/apache/accumulo/spark/CopyPlus5K.java
index 416d360..cd58889 100644
--- a/spark/src/main/java/org/apache/accumulo/spark/CopyPlus5K.java
+++ b/spark/src/main/java/org/apache/accumulo/spark/CopyPlus5K.java
@@ -41,6 +41,8 @@
 
 public class CopyPlus5K {
 
+  private static final Logger log = LoggerFactory.getLogger(CopyPlus5K.class);
+
   public static class AccumuloRangePartitioner extends Partitioner {
 
     private static final long serialVersionUID = 1L;
@@ -76,8 +78,20 @@
         client.tableOperations().delete(outputTable);
       }
       // Create tables
-      client.tableOperations().create(inputTable);
-      client.tableOperations().create(outputTable);
+      try {
+        client.tableOperations().create(inputTable);
+      } catch (TableExistsException e) {
+        log.error("Something went wrong. Table '{}' should have been deleted prior to creation "
+            + "attempt!", inputTable);
+        return;
+      }
+      try {
+        client.tableOperations().create(outputTable);
+      } catch (TableExistsException e) {
+        log.error("Something went wrong. Table '{}' should have been deleted prior to creation "
+            + "attempt!", inputTable);
+        return;
+      }
 
       // Write data to input table
       try (BatchWriter bw = client.createBatchWriter(inputTable)) {
diff --git a/src/main/java/org/apache/accumulo/examples/Common.java b/src/main/java/org/apache/accumulo/examples/Common.java
new file mode 100644
index 0000000..69d1043
--- /dev/null
+++ b/src/main/java/org/apache/accumulo/examples/Common.java
@@ -0,0 +1,51 @@
+package org.apache.accumulo.examples;
+
+import org.apache.accumulo.core.client.AccumuloClient;
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.NamespaceExistsException;
+import org.apache.accumulo.core.client.TableExistsException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Common {
+
+  private static final Logger log = LoggerFactory.getLogger(Common.class);
+
+  public static final String NAMESPACE = "examples";
+
+  public static final String TABLE_EXISTS_MSG = "Table already exists. User may wish to delete "
+      + "existing table and re-run example. Table name: ";
+  public static final String NAMESPACE_EXISTS_MSG = "Namespace already exists. User can ignore "
+      + "this message and continue. Namespace: ";
+
+  /**
+   * Create a table within the supplied namespace.
+   *
+   * The incoming table name is expected to have the form "namespace.tablename". If the namespace
+   * portion of the name is blank then the table is created outside of a namespace.
+   *
+   * @param client
+   *          AccumuloClient instance
+   * @param table
+   *          The name of the table to be created
+   * @throws AccumuloException
+   * @throws AccumuloSecurityException
+   */
+  public static void createTableWithNamespace(final AccumuloClient client, final String table)
+      throws AccumuloException, AccumuloSecurityException {
+    String[] name = table.split("\\.");
+    if (name.length == 2 && !name[0].isEmpty()) {
+      try {
+        client.namespaceOperations().create(name[0]);
+      } catch (NamespaceExistsException e) {
+        log.info(NAMESPACE_EXISTS_MSG + name[0]);
+      }
+    }
+    try {
+      client.tableOperations().create(table);
+    } catch (TableExistsException e) {
+      log.warn(TABLE_EXISTS_MSG + table);
+    }
+  }
+}
diff --git a/src/main/java/org/apache/accumulo/examples/bloom/BloomBatchScanner.java b/src/main/java/org/apache/accumulo/examples/bloom/BloomBatchScanner.java
index 2391dda..80e9df2 100644
--- a/src/main/java/org/apache/accumulo/examples/bloom/BloomBatchScanner.java
+++ b/src/main/java/org/apache/accumulo/examples/bloom/BloomBatchScanner.java
@@ -32,19 +32,25 @@
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.accumulo.examples.cli.ClientOpts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Simple example for reading random batches of data from Accumulo.
  */
-public class BloomBatchScanner {
+public final class BloomBatchScanner {
+
+  private static final Logger log = LoggerFactory.getLogger(BloomBatchScanner.class);
+
+  private BloomBatchScanner() {}
 
   public static void main(String[] args) throws TableNotFoundException {
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(BloomBatchScanner.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      scan(client, "bloom_test1", 7);
-      scan(client, "bloom_test2", 7);
+      scan(client, BloomCommon.BLOOM_TEST1_TABLE, 7);
+      scan(client, BloomCommon.BLOOM_TEST2_TABLE, 7);
     }
   }
 
@@ -64,22 +70,21 @@
     long results = 0;
     long lookups = ranges.size();
 
-    System.out.println("Scanning " + tableName + " with seed " + seed);
+    log.info("Scanning {} with seed {}", tableName, seed);
     try (BatchScanner scan = client.createBatchScanner(tableName, Authorizations.EMPTY, 20)) {
       scan.setRanges(ranges);
       for (Entry<Key,Value> entry : scan) {
         Key key = entry.getKey();
-        if (!expectedRows.containsKey(key.getRow().toString())) {
-          System.out.println("Encountered unexpected key: " + key);
-        } else {
+        if (expectedRows.containsKey(key.getRow().toString())) {
           expectedRows.put(key.getRow().toString(), true);
+        } else {
+          log.info("Encountered unexpected key: {}", key);
         }
         results++;
       }
     }
-
     long t2 = System.currentTimeMillis();
-    System.out.println(String.format("Scan finished! %6.2f lookups/sec, %.2f secs, %d results",
+    log.info(String.format("Scan finished! %6.2f lookups/sec, %.2f secs, %d results",
         lookups / ((t2 - t1) / 1000.0), ((t2 - t1) / 1000.0), results));
 
     int count = 0;
@@ -89,8 +94,8 @@
       }
     }
     if (count > 0)
-      System.out.println("Did not find " + count);
+      log.info("Did not find " + count);
     else
-      System.out.println("All expected rows were scanned");
+      log.info("All expected rows were scanned");
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/bloom/BloomCommon.java b/src/main/java/org/apache/accumulo/examples/bloom/BloomCommon.java
new file mode 100644
index 0000000..ed72f3a
--- /dev/null
+++ b/src/main/java/org/apache/accumulo/examples/bloom/BloomCommon.java
@@ -0,0 +1,13 @@
+package org.apache.accumulo.examples.bloom;
+
+import org.apache.accumulo.examples.Common;
+
+enum BloomCommon {
+  ;
+  public static final String BLOOM_TEST1_TABLE = Common.NAMESPACE + ".bloom_test1";
+  public static final String BLOOM_TEST2_TABLE = Common.NAMESPACE + ".bloom_test2";
+  public static final String BLOOM_TEST3_TABLE = Common.NAMESPACE + ".bloom_test3";
+  public static final String BLOOM_TEST4_TABLE = Common.NAMESPACE + ".bloom_test4";
+
+  public static final String BLOOM_ENABLED_PROPERTY = "table.bloom.enabled";
+}
diff --git a/src/main/java/org/apache/accumulo/examples/bloom/BloomFilters.java b/src/main/java/org/apache/accumulo/examples/bloom/BloomFilters.java
index 6bba9ea..d2988f5 100644
--- a/src/main/java/org/apache/accumulo/examples/bloom/BloomFilters.java
+++ b/src/main/java/org/apache/accumulo/examples/bloom/BloomFilters.java
@@ -24,14 +24,20 @@
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.security.ColumnVisibility;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.apache.accumulo.examples.client.RandomBatchWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-public class BloomFilters {
+public final class BloomFilters {
+
+  private static final Logger log = LoggerFactory.getLogger(BloomFilters.class);
+
+  private BloomFilters() {}
 
   public static void main(String[] args)
       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
@@ -40,36 +46,34 @@
     opts.parseArgs(BloomFilters.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        System.out.println("Creating bloom_test1 and bloom_test2");
-        client.tableOperations().create("bloom_test1");
-        client.tableOperations().setProperty("bloom_test1", "table.compaction.major.ratio", "7");
-        client.tableOperations().create("bloom_test2");
-        client.tableOperations().setProperty("bloom_test2", "table.bloom.enabled", "true");
-        client.tableOperations().setProperty("bloom_test2", "table.compaction.major.ratio", "7");
-      } catch (TableExistsException e) {
-        // ignore
-      }
-
-      // Write a million rows 3 times flushing files to disk separately
-      System.out.println("Writing data to bloom_test1");
-      writeData(client, "bloom_test1", 7);
-      client.tableOperations().flush("bloom_test1", null, null, true);
-      writeData(client, "bloom_test1", 8);
-      client.tableOperations().flush("bloom_test1", null, null, true);
-      writeData(client, "bloom_test1", 9);
-      client.tableOperations().flush("bloom_test1", null, null, true);
-
-      System.out.println("Writing data to bloom_test2");
-      writeData(client, "bloom_test2", 7);
-      client.tableOperations().flush("bloom_test2", null, null, true);
-      writeData(client, "bloom_test2", 8);
-      client.tableOperations().flush("bloom_test2", null, null, true);
-      writeData(client, "bloom_test2", 9);
-      client.tableOperations().flush("bloom_test2", null, null, true);
+      createTableAndSetCompactionRatio(client, BloomCommon.BLOOM_TEST1_TABLE);
+      createTableAndSetCompactionRatio(client, BloomCommon.BLOOM_TEST2_TABLE);
+      client.tableOperations().setProperty(BloomCommon.BLOOM_TEST2_TABLE,
+          BloomCommon.BLOOM_ENABLED_PROPERTY, "true");
+      writeAndFlushData(BloomCommon.BLOOM_TEST1_TABLE, client);
+      writeAndFlushData(BloomCommon.BLOOM_TEST2_TABLE, client);
     }
   }
 
+  private static void createTableAndSetCompactionRatio(AccumuloClient client,
+      final String tableName) throws AccumuloException, AccumuloSecurityException {
+    log.info("Creating {}", tableName);
+    Common.createTableWithNamespace(client, tableName);
+    client.tableOperations().setProperty(tableName, "table.compaction.major.ratio", "7");
+  }
+
+  // Write a million rows 3 times flushing files to disk separately
+  private static void writeAndFlushData(final String tableName, final AccumuloClient client)
+      throws TableNotFoundException, AccumuloSecurityException, AccumuloException {
+    log.info("Writing data to {}", tableName);
+    writeData(client, tableName, 7);
+    client.tableOperations().flush(tableName, null, null, true);
+    writeData(client, tableName, 8);
+    client.tableOperations().flush(tableName, null, null, true);
+    writeData(client, tableName, 9);
+    client.tableOperations().flush(tableName, null, null, true);
+  }
+
   // write a million random rows
   static void writeData(AccumuloClient client, String tableName, int seed)
       throws TableNotFoundException, MutationsRejectedException {
diff --git a/src/main/java/org/apache/accumulo/examples/bloom/BloomFiltersNotFound.java b/src/main/java/org/apache/accumulo/examples/bloom/BloomFiltersNotFound.java
index 668ff3e..e050102 100644
--- a/src/main/java/org/apache/accumulo/examples/bloom/BloomFiltersNotFound.java
+++ b/src/main/java/org/apache/accumulo/examples/bloom/BloomFiltersNotFound.java
@@ -22,33 +22,39 @@
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class BloomFiltersNotFound {
 
+  private static final Logger log = LoggerFactory.getLogger(BloomFiltersNotFound.class);
+
   public static void main(String[] args)
       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(BloomFiltersNotFound.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create("bloom_test3");
-        client.tableOperations().create("bloom_test4");
-        client.tableOperations().setProperty("bloom_test4", "table.bloom.enabled", "true");
-      } catch (TableExistsException e) {
-        // ignore
-      }
-      System.out.println("Writing data to bloom_test3 and bloom_test4 (bloom filters enabled)");
-      writeData(client, "bloom_test3", 7);
-      client.tableOperations().flush("bloom_test3", null, null, true);
-      writeData(client, "bloom_test4", 7);
-      client.tableOperations().flush("bloom_test4", null, null, true);
+      Common.createTableWithNamespace(client, BloomCommon.BLOOM_TEST3_TABLE);
+      Common.createTableWithNamespace(client, BloomCommon.BLOOM_TEST4_TABLE);
+      client.tableOperations().setProperty(BloomCommon.BLOOM_TEST4_TABLE,
+          BloomCommon.BLOOM_ENABLED_PROPERTY, "true");
 
-      BloomBatchScanner.scan(client, "bloom_test3", 8);
-      BloomBatchScanner.scan(client, "bloom_test4", 8);
+      writeAndFlush(BloomCommon.BLOOM_TEST3_TABLE, client);
+      writeAndFlush(BloomCommon.BLOOM_TEST4_TABLE, client);
+
+      BloomBatchScanner.scan(client, BloomCommon.BLOOM_TEST3_TABLE, 8);
+      BloomBatchScanner.scan(client, BloomCommon.BLOOM_TEST4_TABLE, 8);
     }
   }
+
+  private static void writeAndFlush(String tableName, AccumuloClient client)
+      throws TableNotFoundException, AccumuloException, AccumuloSecurityException {
+    log.info("Writing data to {} (bloom filters enabled)", tableName);
+    writeData(client, tableName, 7);
+    client.tableOperations().flush(tableName, null, null, true);
+  }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/client/RandomBatchScanner.java b/src/main/java/org/apache/accumulo/examples/client/RandomBatchScanner.java
index df955ae..0bd46f0 100644
--- a/src/main/java/org/apache/accumulo/examples/client/RandomBatchScanner.java
+++ b/src/main/java/org/apache/accumulo/examples/client/RandomBatchScanner.java
@@ -27,10 +27,7 @@
 
 import org.apache.accumulo.core.client.Accumulo;
 import org.apache.accumulo.core.client.AccumuloClient;
-import org.apache.accumulo.core.client.AccumuloException;
-import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchScanner;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Range;
@@ -43,22 +40,24 @@
 /**
  * Simple example for reading random batches of data from Accumulo.
  */
-public class RandomBatchScanner {
+public final class RandomBatchScanner {
 
   private static final Logger log = LoggerFactory.getLogger(RandomBatchScanner.class);
 
-  public static void main(String[] args)
-      throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
+  private RandomBatchScanner() {}
+
+  public static void main(String[] args) throws TableNotFoundException {
 
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(RandomBatchScanner.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
 
-      try {
-        client.tableOperations().create("batch");
-      } catch (TableExistsException e) {
-        // ignore
+      if (!client.tableOperations().exists(SequentialBatchWriter.BATCH_TABLE)) {
+        log.error(
+            "Table " + SequentialBatchWriter.BATCH_TABLE + " does not exist. Nothing to scan!");
+        log.error("Try running  './bin/runex client.SequentialBatchWriter' first");
+        return;
       }
 
       int totalLookups = 1000;
@@ -78,7 +77,8 @@
       long lookups = 0;
 
       log.info("Reading ranges using BatchScanner");
-      try (BatchScanner scan = client.createBatchScanner("batch", Authorizations.EMPTY, 20)) {
+      try (BatchScanner scan = client.createBatchScanner(SequentialBatchWriter.BATCH_TABLE,
+          Authorizations.EMPTY, 20)) {
         scan.setRanges(ranges);
         for (Entry<Key,Value> entry : scan) {
           Key key = entry.getKey();
@@ -93,10 +93,10 @@
                 new String(expectedValue.get(), UTF_8), new String(value.get(), UTF_8));
           }
 
-          if (!expectedRows.containsKey(key.getRow().toString())) {
-            log.error("Encountered unexpected key: {} ", key);
-          } else {
+          if (expectedRows.containsKey(key.getRow().toString())) {
             expectedRows.put(key.getRow().toString(), true);
+          } else {
+            log.error("Encountered unexpected key: {} ", key);
           }
 
           lookups++;
@@ -105,7 +105,6 @@
           }
         }
       }
-
       long t2 = System.currentTimeMillis();
       log.info(String.format("Scan finished! %6.2f lookups/sec, %.2f secs, %d results",
           lookups / ((t2 - t1) / 1000.0), ((t2 - t1) / 1000.0), lookups));
diff --git a/src/main/java/org/apache/accumulo/examples/client/ReadWriteExample.java b/src/main/java/org/apache/accumulo/examples/client/ReadWriteExample.java
index 79c5e0e..8b3696d 100644
--- a/src/main/java/org/apache/accumulo/examples/client/ReadWriteExample.java
+++ b/src/main/java/org/apache/accumulo/examples/client/ReadWriteExample.java
@@ -20,14 +20,16 @@
 
 import org.apache.accumulo.core.client.Accumulo;
 import org.apache.accumulo.core.client.AccumuloClient;
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
-import org.apache.accumulo.core.client.NamespaceExistsException;
 import org.apache.accumulo.core.client.Scanner;
-import org.apache.accumulo.core.client.TableExistsException;
+import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,44 +37,45 @@
 public class ReadWriteExample {
 
   private static final Logger log = LoggerFactory.getLogger(ReadWriteExample.class);
-  private static final String namespace = "examples";
-  private static final String table = namespace + ".readwrite";
 
-  public static void main(String[] args) throws Exception {
+  private static final String READWRITE_TABLE = Common.NAMESPACE + ".readwrite";
+
+  private ReadWriteExample() {}
+
+  public static void main(String[] args) throws AccumuloSecurityException, AccumuloException {
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(ReadWriteExample.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-
-      try {
-        client.namespaceOperations().create(namespace);
-      } catch (NamespaceExistsException e) {
-        // ignore
-      }
-      try {
-        client.tableOperations().create(table);
-      } catch (TableExistsException e) {
-        // ignore
-      }
-
+      Common.createTableWithNamespace(client, READWRITE_TABLE);
       // write data
-      try (BatchWriter writer = client.createBatchWriter(table)) {
+      try (BatchWriter writer = client.createBatchWriter(READWRITE_TABLE)) {
         for (int i = 0; i < 10; i++) {
           Mutation m = new Mutation("hello" + i);
           m.put("cf", "cq", new Value("world" + i));
           writer.addMutation(m);
         }
+      } catch (TableNotFoundException e) {
+        log.error("Could not find table {}: {}", e.getTableName(), e.getMessage());
+        System.exit(1);
       }
 
       // read data
-      try (Scanner scanner = client.createScanner(table, Authorizations.EMPTY)) {
+      try (Scanner scanner = client.createScanner(READWRITE_TABLE, Authorizations.EMPTY)) {
         for (Entry<Key,Value> entry : scanner) {
-          log.info(entry.getKey().toString() + " -> " + entry.getValue().toString());
+          log.info("{} -> {}", entry.getKey().toString(), entry.getValue().toString());
         }
+      } catch (TableNotFoundException e) {
+        log.error("Could not find table {}: {}", e.getTableName(), e.getMessage());
+        System.exit(1);
       }
 
       // delete table
-      client.tableOperations().delete(table);
+      try {
+        client.tableOperations().delete(READWRITE_TABLE);
+      } catch (TableNotFoundException e) {
+        log.error("Unable to delete table '{}': {}", e.getTableName(), e.getMessage());
+      }
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/client/RowOperations.java b/src/main/java/org/apache/accumulo/examples/client/RowOperations.java
index 000bee1..d97e10e 100644
--- a/src/main/java/org/apache/accumulo/examples/client/RowOperations.java
+++ b/src/main/java/org/apache/accumulo/examples/client/RowOperations.java
@@ -24,15 +24,14 @@
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.client.NamespaceExistsException;
 import org.apache.accumulo.core.client.Scanner;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -40,25 +39,27 @@
 /**
  * A demonstration of reading entire rows and deleting entire rows.
  */
-public class RowOperations {
+public final class RowOperations {
 
   private static final Logger log = LoggerFactory.getLogger(RowOperations.class);
-  private static final String namespace = "examples";
-  private static final String table = namespace + ".rowops";
+
+  static final String ROWOPS_TABLE = Common.NAMESPACE + ".rowops";
+
+  private RowOperations() {}
 
   private static void printAll(AccumuloClient client) throws TableNotFoundException {
-    try (Scanner scanner = client.createScanner(table, Authorizations.EMPTY)) {
+    try (Scanner scanner = client.createScanner(ROWOPS_TABLE, Authorizations.EMPTY)) {
       for (Entry<Key,Value> entry : scanner) {
-        log.info("Key: " + entry.getKey().toString() + " Value: " + entry.getValue().toString());
+        log.info("Key: {} Value: {}", entry.getKey().toString(), entry.getValue().toString());
       }
     }
   }
 
   private static void printRow(String row, AccumuloClient client) throws TableNotFoundException {
-    try (Scanner scanner = client.createScanner(table, Authorizations.EMPTY)) {
+    try (Scanner scanner = client.createScanner(ROWOPS_TABLE, Authorizations.EMPTY)) {
       scanner.setRange(Range.exact(row));
       for (Entry<Key,Value> entry : scanner) {
-        log.info("Key: " + entry.getKey().toString() + " Value: " + entry.getValue().toString());
+        log.info("Key: {} Value: {}", entry.getKey().toString(), entry.getValue().toString());
       }
     }
   }
@@ -66,7 +67,7 @@
   private static void deleteRow(String row, AccumuloClient client, BatchWriter bw)
       throws MutationsRejectedException, TableNotFoundException {
     Mutation mut = new Mutation(row);
-    try (Scanner scanner = client.createScanner(table, Authorizations.EMPTY)) {
+    try (Scanner scanner = client.createScanner(ROWOPS_TABLE, Authorizations.EMPTY)) {
       scanner.setRange(Range.exact(row));
       for (Entry<Key,Value> entry : scanner) {
         mut.putDelete(entry.getKey().getColumnFamily(), entry.getKey().getColumnQualifier());
@@ -82,16 +83,7 @@
     opts.parseArgs(RowOperations.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.namespaceOperations().create(namespace);
-      } catch (NamespaceExistsException e) {
-        // ignore
-      }
-      try {
-        client.tableOperations().create(table);
-      } catch (TableExistsException e) {
-        // ignore
-      }
+      Common.createTableWithNamespace(client, ROWOPS_TABLE);
 
       // lets create 3 rows of information
       Mutation mut1 = new Mutation("row1");
@@ -111,7 +103,7 @@
       mut3.put("col", "3", "v3");
 
       // Now we'll make a Batch Writer
-      try (BatchWriter bw = client.createBatchWriter(table)) {
+      try (BatchWriter bw = client.createBatchWriter(ROWOPS_TABLE)) {
 
         // And add the mutations
         bw.addMutation(mut1);
@@ -138,7 +130,7 @@
       log.info("This is just row3");
       printAll(client);
 
-      client.tableOperations().delete(table);
+      client.tableOperations().delete(ROWOPS_TABLE);
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/client/SequentialBatchWriter.java b/src/main/java/org/apache/accumulo/examples/client/SequentialBatchWriter.java
index ea8ca2d..d8a575b 100644
--- a/src/main/java/org/apache/accumulo/examples/client/SequentialBatchWriter.java
+++ b/src/main/java/org/apache/accumulo/examples/client/SequentialBatchWriter.java
@@ -23,10 +23,10 @@
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,13 +36,17 @@
 /**
  * Simple example for writing random data in sequential order to Accumulo.
  */
-public class SequentialBatchWriter {
+public final class SequentialBatchWriter {
 
   private static final Logger log = LoggerFactory.getLogger(SequentialBatchWriter.class);
 
+  static final String BATCH_TABLE = Common.NAMESPACE + ".batch";
+
+  private SequentialBatchWriter() {}
+
   public static Value createValue(long rowId, int size) {
     Random r = new Random(rowId);
-    byte value[] = new byte[size];
+    byte[] value = new byte[size];
 
     r.nextBytes(value);
 
@@ -56,7 +60,7 @@
 
   static class Opts extends ClientOpts {
     @Parameter(names = {"-t"}, description = "table to use")
-    public String tableName = "batch";
+    public String tableName = BATCH_TABLE;
 
     @Parameter(names = {"--start"}, description = "starting row")
     public Integer start = 0;
@@ -79,12 +83,7 @@
     opts.parseArgs(SequentialBatchWriter.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create(opts.tableName);
-      } catch (TableExistsException e) {
-        // ignore
-      }
-
+      Common.createTableWithNamespace(client, opts.tableName);
       try (BatchWriter bw = client.createBatchWriter(opts.tableName)) {
         for (int i = 0; i < opts.num; i++) {
           int row = i + opts.start;
diff --git a/src/main/java/org/apache/accumulo/examples/client/TracingExample.java b/src/main/java/org/apache/accumulo/examples/client/TracingExample.java
index 899008c..551b43c 100644
--- a/src/main/java/org/apache/accumulo/examples/client/TracingExample.java
+++ b/src/main/java/org/apache/accumulo/examples/client/TracingExample.java
@@ -33,6 +33,7 @@
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
 // import org.apache.accumulo.core.trace.DistributedTrace;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOnDefaultTable;
 import org.apache.accumulo.examples.cli.ScannerOpts;
 import org.apache.htrace.Sampler;
@@ -81,7 +82,7 @@
       AccumuloSecurityException, TableExistsException {
 
     if (opts.createtable) {
-      client.tableOperations().create(opts.getTableName());
+      Common.createTableWithNamespace(client, opts.getTableName());
     }
 
     if (opts.createEntries) {
diff --git a/src/main/java/org/apache/accumulo/examples/combiner/StatsCombiner.java b/src/main/java/org/apache/accumulo/examples/combiner/StatsCombiner.java
index 2794c22..14b24ca 100644
--- a/src/main/java/org/apache/accumulo/examples/combiner/StatsCombiner.java
+++ b/src/main/java/org/apache/accumulo/examples/combiner/StatsCombiner.java
@@ -49,7 +49,7 @@
     long count = 0;
 
     while (iter.hasNext()) {
-      String stats[] = iter.next().toString().split(",");
+      String[] stats = iter.next().toString().split(",");
 
       if (stats.length == 1) {
         long val = Long.parseLong(stats[0], radix);
diff --git a/src/main/java/org/apache/accumulo/examples/constraints/AlphaNumKeyConstraint.java b/src/main/java/org/apache/accumulo/examples/constraints/AlphaNumKeyConstraint.java
index 0ad791e..321031c 100644
--- a/src/main/java/org/apache/accumulo/examples/constraints/AlphaNumKeyConstraint.java
+++ b/src/main/java/org/apache/accumulo/examples/constraints/AlphaNumKeyConstraint.java
@@ -28,19 +28,23 @@
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.constraints.Constraint;
 import org.apache.accumulo.core.data.ColumnUpdate;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.data.constraints.Constraint;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class is an accumulo constraint that ensures all fields of a key are alpha numeric.
  */
 public class AlphaNumKeyConstraint implements Constraint {
 
+  private static final Logger log = LoggerFactory.getLogger(AlphaNumKeyConstraint.class);
+
   static final short NON_ALPHA_NUM_ROW = 1;
   static final short NON_ALPHA_NUM_COLF = 2;
   static final short NON_ALPHA_NUM_COLQ = 3;
@@ -49,23 +53,20 @@
   static final String COLF_VIOLATION_MESSAGE = "Column family was not alpha numeric";
   static final String COLQ_VIOLATION_MESSAGE = "Column qualifier was not alpha numeric";
 
-  private boolean isAlphaNum(byte bytes[]) {
+  private boolean isNotAlphaNum(byte[] bytes) {
     for (byte b : bytes) {
       boolean ok = ((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || (b >= '0' && b <= '9'));
       if (!ok)
-        return false;
+        return true;
     }
-
-    return true;
+    return false;
   }
 
   private Set<Short> addViolation(Set<Short> violations, short violation) {
     if (violations == null) {
       violations = new LinkedHashSet<>();
-      violations.add(violation);
-    } else if (!violations.contains(violation)) {
-      violations.add(violation);
     }
+    violations.add(violation);
     return violations;
   }
 
@@ -73,15 +74,15 @@
   public List<Short> check(Environment env, Mutation mutation) {
     Set<Short> violations = null;
 
-    if (!isAlphaNum(mutation.getRow()))
+    if (isNotAlphaNum(mutation.getRow()))
       violations = addViolation(violations, NON_ALPHA_NUM_ROW);
 
     Collection<ColumnUpdate> updates = mutation.getUpdates();
     for (ColumnUpdate columnUpdate : updates) {
-      if (!isAlphaNum(columnUpdate.getColumnFamily()))
+      if (isNotAlphaNum(columnUpdate.getColumnFamily()))
         violations = addViolation(violations, NON_ALPHA_NUM_COLF);
 
-      if (!isAlphaNum(columnUpdate.getColumnQualifier()))
+      if (isNotAlphaNum(columnUpdate.getColumnQualifier()))
         violations = addViolation(violations, NON_ALPHA_NUM_COLQ);
     }
 
@@ -109,30 +110,26 @@
     opts.parseArgs(AlphaNumKeyConstraint.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create("testConstraints");
-      } catch (TableExistsException e) {
-        // ignore
-      }
+      Common.createTableWithNamespace(client, ConstraintsCommon.CONSTRAINTS_TABLE);
 
-      /**
+      /*
        * Add the {@link AlphaNumKeyConstraint} to the table. Be sure to use the fully qualified
        * class name.
        */
-      int num = client.tableOperations().addConstraint("testConstraints",
+      int num = client.tableOperations().addConstraint(ConstraintsCommon.CONSTRAINTS_TABLE,
           "org.apache.accumulo.examples.constraints.AlphaNumKeyConstraint");
 
-      System.out.println("Attempting to write non alpha numeric data to testConstraints");
-      try (BatchWriter bw = client.createBatchWriter("testConstraints")) {
+      log.info("Attempting to write non alpha numeric data to testConstraints");
+      try (BatchWriter bw = client.createBatchWriter(ConstraintsCommon.CONSTRAINTS_TABLE)) {
         Mutation m = new Mutation("r1--$$@@%%");
         m.put("cf1", "cq1", new Value(("value1").getBytes()));
         bw.addMutation(m);
       } catch (MutationsRejectedException e) {
-        e.getConstraintViolationSummaries().forEach(violationSummary -> System.out
-            .println("Constraint violated: " + violationSummary.constrainClass));
+        e.getConstraintViolationSummaries().forEach(violationSummary -> log
+            .error(ConstraintsCommon.CONSTRAINT_VIOLATED_MSG, violationSummary.constrainClass));
       }
-
-      client.tableOperations().removeConstraint("testConstraints", num);
+      client.tableOperations().removeConstraint(ConstraintsCommon.CONSTRAINTS_TABLE, num);
     }
   }
+
 }
diff --git a/src/main/java/org/apache/accumulo/examples/constraints/ConstraintsCommon.java b/src/main/java/org/apache/accumulo/examples/constraints/ConstraintsCommon.java
new file mode 100644
index 0000000..1ff579d
--- /dev/null
+++ b/src/main/java/org/apache/accumulo/examples/constraints/ConstraintsCommon.java
@@ -0,0 +1,9 @@
+package org.apache.accumulo.examples.constraints;
+
+import org.apache.accumulo.examples.Common;
+
+public enum ConstraintsCommon {
+  ;
+  public static final String CONSTRAINTS_TABLE = Common.NAMESPACE + ".testConstraints";
+  public static final String CONSTRAINT_VIOLATED_MSG = "Constraint violated: {}";
+}
diff --git a/src/main/java/org/apache/accumulo/examples/constraints/MaxMutationSize.java b/src/main/java/org/apache/accumulo/examples/constraints/MaxMutationSize.java
index c98e0d7..81e4694 100644
--- a/src/main/java/org/apache/accumulo/examples/constraints/MaxMutationSize.java
+++ b/src/main/java/org/apache/accumulo/examples/constraints/MaxMutationSize.java
@@ -25,20 +25,25 @@
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.constraints.Constraint;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.data.constraints.Constraint;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Ensure that mutations are a reasonable size: we must be able to fit several in memory at a time.
  */
 public class MaxMutationSize implements Constraint {
+
+  private static final Logger log = LoggerFactory.getLogger(MaxMutationSize.class);
+
   static final long MAX_SIZE = Runtime.getRuntime().maxMemory() >> 8;
   static final List<Short> empty = Collections.emptyList();
-  static final List<Short> violations = Collections.singletonList(Short.valueOf((short) 0));
+  static final List<Short> violations = Collections.singletonList((short) 0);
 
   @Override
   public String getViolationDescription(short violationCode) {
@@ -58,31 +63,26 @@
     opts.parseArgs(MaxMutationSize.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create("testConstraints");
-      } catch (TableExistsException e) {
-        // ignore
-      }
+      Common.createTableWithNamespace(client, ConstraintsCommon.CONSTRAINTS_TABLE);
 
-      /**
+      /*
        * Add the {@link MaxMutationSize} constraint to the table. Be sure to use the fully qualified
        * class name
        */
-      int num = client.tableOperations().addConstraint("testConstraints",
+      int num = client.tableOperations().addConstraint(ConstraintsCommon.CONSTRAINTS_TABLE,
           "org.apache.accumulo.examples.constraints.MaxMutationSize");
 
-      System.out.println("Attempting to write a lot of mutations to testConstraints");
-      try (BatchWriter bw = client.createBatchWriter("testConstraints")) {
+      log.info("Attempting to write a lot of mutations to testConstraints");
+      try (BatchWriter bw = client.createBatchWriter(ConstraintsCommon.CONSTRAINTS_TABLE)) {
         Mutation m = new Mutation("r1");
         for (int i = 0; i < 1_000_000; i++)
           m.put("cf" + i % 5000, "cq" + i, new Value(("value" + i).getBytes()));
         bw.addMutation(m);
       } catch (MutationsRejectedException e) {
         e.getConstraintViolationSummaries()
-            .forEach(m -> System.out.println("Constraint violated: " + m.constrainClass));
+            .forEach(m -> log.error(ConstraintsCommon.CONSTRAINT_VIOLATED_MSG, m.constrainClass));
       }
-
-      client.tableOperations().removeConstraint("testConstraints", num);
+      client.tableOperations().removeConstraint(ConstraintsCommon.CONSTRAINTS_TABLE, num);
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/constraints/NumericValueConstraint.java b/src/main/java/org/apache/accumulo/examples/constraints/NumericValueConstraint.java
index ca5a4d3..fe9d121 100644
--- a/src/main/java/org/apache/accumulo/examples/constraints/NumericValueConstraint.java
+++ b/src/main/java/org/apache/accumulo/examples/constraints/NumericValueConstraint.java
@@ -16,9 +16,7 @@
  */
 package org.apache.accumulo.examples.constraints;
 
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.accumulo.core.client.Accumulo;
@@ -27,32 +25,34 @@
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
-import org.apache.accumulo.core.constraints.Constraint;
 import org.apache.accumulo.core.data.ColumnUpdate;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.core.data.constraints.Constraint;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class is an accumulo constraint that ensures values are numeric strings.
  */
 public class NumericValueConstraint implements Constraint {
 
+  private static final Logger log = LoggerFactory.getLogger(NumericValueConstraint.class);
+
   static final short NON_NUMERIC_VALUE = 1;
   static final String VIOLATION_MESSAGE = "Value is not numeric";
 
-  private static final List<Short> VIOLATION_LIST = Collections
-      .unmodifiableList(Arrays.asList(NON_NUMERIC_VALUE));
+  private static final List<Short> VIOLATION_LIST = List.of(NON_NUMERIC_VALUE);
 
-  private boolean isNumeric(byte bytes[]) {
+  private boolean isNumeric(byte[] bytes) {
     for (byte b : bytes) {
       boolean ok = (b >= '0' && b <= '9');
       if (!ok)
         return false;
     }
-
     return true;
   }
 
@@ -64,18 +64,14 @@
       if (!isNumeric(columnUpdate.getValue()))
         return VIOLATION_LIST;
     }
-
     return null;
   }
 
   @Override
   public String getViolationDescription(short violationCode) {
-
-    switch (violationCode) {
-      case NON_NUMERIC_VALUE:
-        return "Value is not numeric";
+    if (violationCode == NON_NUMERIC_VALUE) {
+      return VIOLATION_MESSAGE;
     }
-
     return null;
   }
 
@@ -85,30 +81,25 @@
     opts.parseArgs(NumericValueConstraint.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create("testConstraints");
-      } catch (TableExistsException e) {
-        // ignore
-      }
+      Common.createTableWithNamespace(client, ConstraintsCommon.CONSTRAINTS_TABLE);
 
-      /**
+      /*
        * Add the {@link NumericValueConstraint} constraint to the table. Be sure to use the fully
        * qualified class name
        */
-      int num = client.tableOperations().addConstraint("testConstraints",
+      int num = client.tableOperations().addConstraint(ConstraintsCommon.CONSTRAINTS_TABLE,
           "org.apache.accumulo.examples.constraints.NumericValueConstraint");
 
-      System.out.println("Attempting to write non numeric data to testConstraints");
-      try (BatchWriter bw = client.createBatchWriter("testConstraints")) {
+      log.info("Attempting to write non-numeric data to testConstraints");
+      try (BatchWriter bw = client.createBatchWriter(ConstraintsCommon.CONSTRAINTS_TABLE)) {
         Mutation m = new Mutation("r1");
         m.put("cf1", "cq1", new Value(("value1--$$@@%%").getBytes()));
         bw.addMutation(m);
       } catch (MutationsRejectedException e) {
         e.getConstraintViolationSummaries()
-            .forEach(m -> System.out.println("Constraint violated: " + m.constrainClass));
+            .forEach(m -> log.error(ConstraintsCommon.CONSTRAINT_VIOLATED_MSG, m.constrainClass));
       }
-
-      client.tableOperations().removeConstraint("testConstraints", num);
+      client.tableOperations().removeConstraint(ConstraintsCommon.CONSTRAINTS_TABLE, num);
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/dirlist/Ingest.java b/src/main/java/org/apache/accumulo/examples/dirlist/Ingest.java
index 24eab3b..d5f3b35 100644
--- a/src/main/java/org/apache/accumulo/examples/dirlist/Ingest.java
+++ b/src/main/java/org/apache/accumulo/examples/dirlist/Ingest.java
@@ -29,11 +29,14 @@
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.iterators.LongCombiner;
 import org.apache.accumulo.core.security.ColumnVisibility;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.BatchWriterOpts;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.apache.accumulo.examples.filedata.ChunkCombiner;
 import org.apache.accumulo.examples.filedata.FileDataIngest;
 import org.apache.hadoop.io.Text;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.beust.jcommander.Parameter;
 
@@ -42,7 +45,14 @@
  * into one Accumulo table, indexes the file names in a separate table, and the file data into a
  * third table.
  */
-public class Ingest {
+public final class Ingest {
+
+  private static final Logger log = LoggerFactory.getLogger(Ingest.class);
+
+  static final String DIR_TABLE = Common.NAMESPACE + ".dirTable";
+  static final String INDEX_TABLE = Common.NAMESPACE + ".indexTable";
+  static final String DATA_TABLE = Common.NAMESPACE + ".dataTable";
+
   static final Value nullValue = new Value(new byte[0]);
   public static final String LENGTH_CQ = "length";
   public static final String HIDDEN_CQ = "hidden";
@@ -51,6 +61,8 @@
   public static final String HASH_CQ = "md5";
   public static final Encoder<Long> encoder = LongCombiner.FIXED_LEN_ENCODER;
 
+  private Ingest() {}
+
   public static Mutation buildMutation(ColumnVisibility cv, String path, boolean isDir,
       boolean isHidden, boolean canExec, long length, long lastmod, String hash) {
     if (path.equals("/"))
@@ -73,13 +85,13 @@
   private static void ingest(File src, ColumnVisibility cv, BatchWriter dirBW, BatchWriter indexBW,
       FileDataIngest fdi, BatchWriter data) throws Exception {
     // build main table entry
-    String path = null;
+    String path;
     try {
       path = src.getCanonicalPath();
     } catch (IOException e) {
       path = src.getAbsolutePath();
     }
-    System.out.println(path);
+    log.info(path);
 
     String hash = null;
     if (!src.isDirectory()) {
@@ -126,11 +138,11 @@
 
   static class Opts extends ClientOpts {
     @Parameter(names = "--dirTable", description = "a table to hold the directory information")
-    String nameTable = "dirTable";
+    String dirTable = DIR_TABLE;
     @Parameter(names = "--indexTable", description = "an index over the ingested data")
-    String indexTable = "indexTable";
+    String indexTable = INDEX_TABLE;
     @Parameter(names = "--dataTable", description = "the file data, chunked into parts")
-    String dataTable = "dataTable";
+    String dataTable = DATA_TABLE;
     @Parameter(names = "--vis", description = "the visibility to mark the data",
         converter = VisibilityConverter.class)
     ColumnVisibility visibility = new ColumnVisibility();
@@ -146,17 +158,13 @@
     opts.parseArgs(Ingest.class.getName(), args, bwOpts);
 
     try (AccumuloClient client = opts.createAccumuloClient()) {
-      if (!client.tableOperations().exists(opts.nameTable))
-        client.tableOperations().create(opts.nameTable);
-      if (!client.tableOperations().exists(opts.indexTable))
-        client.tableOperations().create(opts.indexTable);
-      if (!client.tableOperations().exists(opts.dataTable)) {
-        client.tableOperations().create(opts.dataTable);
-        client.tableOperations().attachIterator(opts.dataTable,
-            new IteratorSetting(1, ChunkCombiner.class));
-      }
+      Common.createTableWithNamespace(client, opts.dirTable);
+      Common.createTableWithNamespace(client, opts.indexTable);
+      Common.createTableWithNamespace(client, opts.dataTable);
+      client.tableOperations().attachIterator(opts.dataTable,
+          new IteratorSetting(1, ChunkCombiner.class));
 
-      BatchWriter dirBW = client.createBatchWriter(opts.nameTable, bwOpts.getBatchWriterConfig());
+      BatchWriter dirBW = client.createBatchWriter(opts.dirTable, bwOpts.getBatchWriterConfig());
       BatchWriter indexBW = client.createBatchWriter(opts.indexTable,
           bwOpts.getBatchWriterConfig());
       BatchWriter dataBW = client.createBatchWriter(opts.dataTable, bwOpts.getBatchWriterConfig());
@@ -165,8 +173,8 @@
         recurse(new File(dir), opts.visibility, dirBW, indexBW, fdi, dataBW);
 
         // fill in parent directory info
-        int slashIndex = -1;
-        while ((slashIndex = dir.lastIndexOf("/")) > 0) {
+        int slashIndex;
+        while ((slashIndex = dir.lastIndexOf('/')) > 0) {
           dir = dir.substring(0, slashIndex);
           ingest(new File(dir), opts.visibility, dirBW, indexBW, fdi, dataBW);
         }
diff --git a/src/main/java/org/apache/accumulo/examples/filedata/CharacterHistogram.java b/src/main/java/org/apache/accumulo/examples/filedata/CharacterHistogram.java
index 5928786..e83bed2 100644
--- a/src/main/java/org/apache/accumulo/examples/filedata/CharacterHistogram.java
+++ b/src/main/java/org/apache/accumulo/examples/filedata/CharacterHistogram.java
@@ -23,7 +23,6 @@
 import java.util.Map.Entry;
 import java.util.Properties;
 
-import org.apache.accumulo.core.client.Accumulo;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
diff --git a/src/main/java/org/apache/accumulo/examples/filedata/FileDataIngest.java b/src/main/java/org/apache/accumulo/examples/filedata/FileDataIngest.java
index 5095ab6..d649ac8 100644
--- a/src/main/java/org/apache/accumulo/examples/filedata/FileDataIngest.java
+++ b/src/main/java/org/apache/accumulo/examples/filedata/FileDataIngest.java
@@ -33,9 +33,12 @@
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.ColumnVisibility;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.BatchWriterOpts;
 import org.apache.accumulo.examples.cli.ClientOnRequiredTable;
 import org.apache.hadoop.io.Text;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.beust.jcommander.Parameter;
 
@@ -43,6 +46,9 @@
  * Takes a list of files and archives them into Accumulo keyed on hashes of the files.
  */
 public class FileDataIngest {
+
+  private static final Logger log = LoggerFactory.getLogger(FileDataIngest.class);
+
   public static final Text CHUNK_CF = new Text("~chunk");
   public static final Text REFS_CF = new Text("refs");
   public static final String REFS_ORIG_FILE = "name";
@@ -52,6 +58,9 @@
   public static final ByteSequence REFS_CF_BS = new ArrayByteSequence(REFS_CF.getBytes(), 0,
       REFS_CF.getLength());
 
+  public static final String TABLE_EXISTS_MSG = "Table already exists. User may wish to delete existing "
+      + "table and re-run example. Table name: ";
+
   int chunkSize;
   byte[] chunkSizeBytes;
   byte[] buf;
@@ -194,11 +203,10 @@
     opts.parseArgs(FileDataIngest.class.getName(), args, bwOpts);
 
     try (AccumuloClient client = opts.createAccumuloClient()) {
-      if (!client.tableOperations().exists(opts.getTableName())) {
-        client.tableOperations().create(opts.getTableName());
-        client.tableOperations().attachIterator(opts.getTableName(),
-            new IteratorSetting(1, ChunkCombiner.class));
-      }
+      Common.createTableWithNamespace(client, opts.getTableName());
+      client.tableOperations().attachIterator(opts.getTableName(),
+          new IteratorSetting(1, ChunkCombiner.class));
+
       try (BatchWriter bw = client.createBatchWriter(opts.getTableName(),
           bwOpts.getBatchWriterConfig())) {
         FileDataIngest fdi = new FileDataIngest(opts.chunkSize, opts.visibility);
diff --git a/src/main/java/org/apache/accumulo/examples/helloworld/Insert.java b/src/main/java/org/apache/accumulo/examples/helloworld/Insert.java
index 3ee8864..a7884be 100644
--- a/src/main/java/org/apache/accumulo/examples/helloworld/Insert.java
+++ b/src/main/java/org/apache/accumulo/examples/helloworld/Insert.java
@@ -21,10 +21,10 @@
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,19 +36,17 @@
 
   private static final Logger log = LoggerFactory.getLogger(Insert.class);
 
+  static final String HELLO_TABLE = Common.NAMESPACE + ".hellotable";
+
   public static void main(String[] args)
       throws AccumuloException, AccumuloSecurityException, TableNotFoundException {
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(Insert.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create("hellotable");
-      } catch (TableExistsException e) {
-        // ignore
-      }
+      Common.createTableWithNamespace(client, HELLO_TABLE);
 
-      try (BatchWriter bw = client.createBatchWriter("hellotable")) {
+      try (BatchWriter bw = client.createBatchWriter(HELLO_TABLE)) {
         log.trace("writing ...");
         for (int i = 0; i < 10000; i++) {
           Mutation m = new Mutation(String.format("row_%d", i));
diff --git a/src/main/java/org/apache/accumulo/examples/helloworld/Read.java b/src/main/java/org/apache/accumulo/examples/helloworld/Read.java
index 41400d0..e9e82b7 100644
--- a/src/main/java/org/apache/accumulo/examples/helloworld/Read.java
+++ b/src/main/java/org/apache/accumulo/examples/helloworld/Read.java
@@ -42,13 +42,14 @@
     opts.parseArgs(Read.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build();
-        Scanner scan = client.createScanner("hellotable", Authorizations.EMPTY)) {
+        Scanner scan = client.createScanner(Insert.HELLO_TABLE, Authorizations.EMPTY)) {
       scan.setRange(new Range(new Key("row_0"), new Key("row_1002")));
       for (Entry<Key,Value> e : scan) {
         Key key = e.getKey();
         log.trace(key.getRow() + " " + key.getColumnFamily() + " " + key.getColumnQualifier() + " "
             + e.getValue());
       }
+      log.info("Scan complete");
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/isolation/InterferenceTest.java b/src/main/java/org/apache/accumulo/examples/isolation/InterferenceTest.java
index 6de2929..61cea3b 100644
--- a/src/main/java/org/apache/accumulo/examples/isolation/InterferenceTest.java
+++ b/src/main/java/org/apache/accumulo/examples/isolation/InterferenceTest.java
@@ -28,6 +28,7 @@
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.BatchWriterOpts;
 import org.apache.accumulo.examples.cli.ClientOnRequiredTable;
 import org.apache.hadoop.io.Text;
@@ -46,13 +47,19 @@
  *
  */
 
-public class InterferenceTest {
+public final class InterferenceTest {
 
   private static final int NUM_ROWS = 500;
   private static final int NUM_COLUMNS = 113; // scanner batches 1000 by default, so make num
                                               // columns not a multiple of 10
+  private static final String ERROR_MISSING_COLS = "ERROR Did not see {} columns in row {}";
+  private static final String ERROR_MULTIPLE_VALS = "ERROR Columns in row {} had multiple values "
+      + "{}";
+
   private static final Logger log = LoggerFactory.getLogger(InterferenceTest.class);
 
+  private InterferenceTest() {}
+
   static class Writer implements Runnable {
 
     private final BatchWriter bw;
@@ -95,7 +102,7 @@
 
   static class Reader implements Runnable {
 
-    private Scanner scanner;
+    private final Scanner scanner;
     volatile boolean stop = false;
 
     Reader(Scanner scanner) {
@@ -118,10 +125,10 @@
 
           if (!row.equals(entry.getKey().getRowData())) {
             if (count != NUM_COLUMNS)
-              System.err.println("ERROR Did not see " + NUM_COLUMNS + " columns in row " + row);
+              log.error(ERROR_MISSING_COLS, NUM_COLUMNS, row);
 
             if (values.size() > 1)
-              System.err.println("ERROR Columns in row " + row + " had multiple values " + values);
+              log.error(ERROR_MULTIPLE_VALS, row, values);
 
             row = entry.getKey().getRowData();
             count = 0;
@@ -134,10 +141,10 @@
         }
 
         if (count > 0 && count != NUM_COLUMNS)
-          System.err.println("ERROR Did not see " + NUM_COLUMNS + " columns in row " + row);
+          log.error(ERROR_MISSING_COLS, NUM_COLUMNS, row);
 
         if (values.size() > 1)
-          System.err.println("ERROR Columns in row " + row + " had multiple values " + values);
+          log.error(ERROR_MULTIPLE_VALS, row, values);
       }
     }
 
@@ -162,9 +169,7 @@
       opts.iterations = Long.MAX_VALUE;
 
     try (AccumuloClient client = opts.createAccumuloClient()) {
-      if (!client.tableOperations().exists(opts.getTableName()))
-        client.tableOperations().create(opts.getTableName());
-
+      Common.createTableWithNamespace(client, opts.getTableName());
       Thread writer = new Thread(
           new Writer(client.createBatchWriter(opts.getTableName(), bwOpts.getBatchWriterConfig()),
               opts.iterations));
@@ -180,7 +185,7 @@
       writer.join();
       r.stopNow();
       reader.join();
-      System.out.println("finished");
+      log.info("finished");
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/mapreduce/NGramIngest.java b/src/main/java/org/apache/accumulo/examples/mapreduce/NGramIngest.java
index 23937f6..2755858 100644
--- a/src/main/java/org/apache/accumulo/examples/mapreduce/NGramIngest.java
+++ b/src/main/java/org/apache/accumulo/examples/mapreduce/NGramIngest.java
@@ -23,6 +23,7 @@
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.apache.accumulo.hadoop.mapreduce.AccumuloOutputFormat;
 import org.apache.hadoop.fs.Path;
@@ -89,7 +90,7 @@
     try (AccumuloClient client = opts.createAccumuloClient()) {
       if (!client.tableOperations().exists(opts.tableName)) {
         log.info("Creating table " + opts.tableName);
-        client.tableOperations().create(opts.tableName);
+        Common.createTableWithNamespace(client, opts.tableName);
         SortedSet<Text> splits = new TreeSet<>();
         String numbers[] = "1 2 3 4 5 6 7 8 9".split("\\s");
         String lower[] = "a b c d e f g h i j k l m n o p q r s t u v w x y z".split("\\s");
diff --git a/src/main/java/org/apache/accumulo/examples/mapreduce/WordCount.java b/src/main/java/org/apache/accumulo/examples/mapreduce/WordCount.java
index 1864fe3..d86be5a 100644
--- a/src/main/java/org/apache/accumulo/examples/mapreduce/WordCount.java
+++ b/src/main/java/org/apache/accumulo/examples/mapreduce/WordCount.java
@@ -23,9 +23,9 @@
 
 import org.apache.accumulo.core.client.AccumuloClient;
 import org.apache.accumulo.core.client.IteratorSetting;
-import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.iterators.user.SummingCombiner;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.apache.accumulo.hadoop.mapreduce.AccumuloOutputFormat;
 import org.apache.hadoop.fs.Path;
@@ -42,13 +42,15 @@
 /**
  * A simple MapReduce job that inserts word counts into Accumulo. See docs/mapred.md
  */
-public class WordCount {
+public final class WordCount {
 
   private static final Logger log = LoggerFactory.getLogger(WordCount.class);
 
+  private WordCount() {}
+
   static class Opts extends ClientOpts {
     @Parameter(names = {"-t", "--table"}, description = "Name of output Accumulo table")
-    String tableName = "wordCount";
+    String tableName = Common.NAMESPACE + ".wordcount";
     @Parameter(names = {"-i", "--input"}, required = true, description = "HDFS input directory")
     String inputDirectory;
     @Parameter(names = {"-d", "--dfsPath"},
@@ -81,14 +83,12 @@
 
     // Create Accumulo table and attach Summing iterator
     try (AccumuloClient client = opts.createAccumuloClient()) {
-      client.tableOperations().create(opts.tableName);
+      Common.createTableWithNamespace(client, opts.tableName);
       IteratorSetting is = new IteratorSetting(10, SummingCombiner.class);
       SummingCombiner.setColumns(is,
           Collections.singletonList(new IteratorSetting.Column("count")));
       SummingCombiner.setEncodingType(is, SummingCombiner.Type.STRING);
       client.tableOperations().attachIterator(opts.tableName, is);
-    } catch (TableExistsException e) {
-      // ignore
     }
 
     // Create M/R job
diff --git a/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/BulkIngestExample.java b/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/BulkIngestExample.java
index 6b27309..0225731 100644
--- a/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/BulkIngestExample.java
+++ b/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/BulkIngestExample.java
@@ -37,12 +37,17 @@
 import org.apache.hadoop.mapreduce.Mapper;
 import org.apache.hadoop.mapreduce.Reducer;
 import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Example map reduce job that bulk ingest data into an accumulo table. The expected input is text
  * files containing tab separated key value pairs on each line.
  */
 public final class BulkIngestExample {
+
+  private static final Logger log = LoggerFactory.getLogger(BulkIngestExample.class);
+
   static final String workDir = "tmp/bulkWork";
   static final String inputDir = "bulk";
   static final String outputFile = "bulk/test_1.txt";
@@ -141,7 +146,8 @@
 
       try (PrintStream out = new PrintStream(
           new BufferedOutputStream(fs.create(new Path(workDir + SPLITS_TXT))))) {
-        Collection<Text> splits = client.tableOperations().listSplits(SetupTable.tableName, 100);
+        Collection<Text> splits = client.tableOperations().listSplits(SetupTable.BULK_INGEST_TABLE,
+            100);
         for (Text split : splits)
           out.println(Base64.getEncoder().encodeToString(split.copyBytes()));
         job.setNumReduceTasks(splits.size() + 1);
@@ -158,9 +164,9 @@
       FsShell fsShell = new FsShell(opts.getHadoopConfig());
       fsShell.run(new String[] {"-chmod", "-R", "777", workDir});
       System.err.println("Importing Directory '" + workDir + SLASH_FILES + "' to table '"
-          + SetupTable.tableName + "'");
-      client.tableOperations().importDirectory(workDir + SLASH_FILES).to(SetupTable.tableName)
-          .load();
+          + SetupTable.BULK_INGEST_TABLE + "'");
+      client.tableOperations().importDirectory(workDir + SLASH_FILES)
+          .to(SetupTable.BULK_INGEST_TABLE).load();
     }
     return job.isSuccessful() ? 0 : 1;
   }
diff --git a/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/SetupTable.java b/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/SetupTable.java
index ef4edb3..259f77b 100644
--- a/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/SetupTable.java
+++ b/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/SetupTable.java
@@ -20,34 +20,35 @@
 
 import org.apache.accumulo.core.client.Accumulo;
 import org.apache.accumulo.core.client.AccumuloClient;
-import org.apache.accumulo.core.client.TableExistsException;
+import org.apache.accumulo.core.client.AccumuloException;
+import org.apache.accumulo.core.client.AccumuloSecurityException;
+import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.examples.Common;
 import org.apache.accumulo.examples.cli.ClientOpts;
 import org.apache.hadoop.io.Text;
 
 public final class SetupTable {
 
-  static final String[] splits = {"row_00000333", "row_00000666"};
-  static final String tableName = "test_bulk";
+  static final String BULK_INGEST_TABLE = Common.NAMESPACE + ".test_bulk";
 
   private SetupTable() {}
 
-  public static void main(String[] args) throws Exception {
+  public static void main(String[] args)
+      throws AccumuloSecurityException, TableNotFoundException, AccumuloException {
+
+    final String[] splits = {"row_00000333", "row_00000666"};
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(SetupTable.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build()) {
-      try {
-        client.tableOperations().create(tableName);
-      } catch (TableExistsException e) {
-        // ignore
-      }
+      Common.createTableWithNamespace(client, BULK_INGEST_TABLE);
 
       // create a table with initial partitions
       TreeSet<Text> initialPartitions = new TreeSet<>();
       for (String split : splits) {
         initialPartitions.add(new Text(split));
       }
-      client.tableOperations().addSplits(tableName, initialPartitions);
+      client.tableOperations().addSplits(BULK_INGEST_TABLE, initialPartitions);
     }
   }
 }
diff --git a/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/VerifyIngest.java b/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/VerifyIngest.java
index dc354b2..3e6bf0c 100644
--- a/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/VerifyIngest.java
+++ b/src/main/java/org/apache/accumulo/examples/mapreduce/bulk/VerifyIngest.java
@@ -45,7 +45,8 @@
     opts.parseArgs(VerifyIngest.class.getName(), args);
 
     try (AccumuloClient client = Accumulo.newClient().from(opts.getClientPropsPath()).build();
-        Scanner scanner = client.createScanner(SetupTable.tableName, Authorizations.EMPTY)) {
+        Scanner scanner = client.createScanner(SetupTable.BULK_INGEST_TABLE,
+            Authorizations.EMPTY)) {
 
       scanner.setRange(new Range(String.format(ROW_FORMAT, 0), null));
 
@@ -59,30 +60,30 @@
           Entry<Key,Value> entry = si.next();
 
           if (!entry.getKey().getRow().toString().equals(String.format(ROW_FORMAT, i))) {
-            log.error("unexpected row key {}; expected {}", entry.getKey().getRow(),
-                String.format(ROW_FORMAT, i));
+            String formattedRow = String.format(ROW_FORMAT, i);
+            log.error("unexpected row key {}; expected {}", entry.getKey().getRow(), formattedRow);
             ok = false;
           }
 
           if (!entry.getValue().toString().equals(String.format(VALUE_FORMAT, i))) {
-            log.error("unexpected value {}; expected {}", entry.getValue(),
-                String.format(VALUE_FORMAT, i));
+            var formattedValue = String.format(VALUE_FORMAT, i);
+            log.error("unexpected value {}; expected {}", entry.getValue(), formattedValue);
             ok = false;
           }
 
         } else {
-          log.error("no more rows, expected {}", String.format(ROW_FORMAT, i));
+          var formattedRow = String.format(ROW_FORMAT, i);
+          log.error("no more rows, expected {}", formattedRow);
           ok = false;
           break;
         }
-
       }
 
       if (ok) {
-        System.out.println("Data verification succeeded!");
+        log.info("Data verification succeeded!");
         System.exit(0);
       } else {
-        System.out.println("Data verification failed!");
+        log.info("Data verification failed!");
         System.exit(1);
       }
     }
diff --git a/src/main/java/org/apache/accumulo/examples/sample/SampleExample.java b/src/main/java/org/apache/accumulo/examples/sample/SampleExample.java
index 5447e28..304f33a 100644
--- a/src/main/java/org/apache/accumulo/examples/sample/SampleExample.java
+++ b/src/main/java/org/apache/accumulo/examples/sample/SampleExample.java
@@ -24,6 +24,7 @@
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.SampleNotPresentException;
 import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.TableExistsException;
 import org.apache.accumulo.core.client.admin.CompactionConfig;
 import org.apache.accumulo.core.client.admin.CompactionStrategyConfig;
 import org.apache.accumulo.core.client.sample.RowSampler;
@@ -36,6 +37,8 @@
 import org.apache.accumulo.examples.cli.ClientOnDefaultTable;
 import org.apache.accumulo.examples.client.RandomBatchWriter;
 import org.apache.accumulo.examples.shard.CutoffIntersectingIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableMap;
 
@@ -46,6 +49,8 @@
  */
 public class SampleExample {
 
+  private static final Logger log = LoggerFactory.getLogger(SampleExample.class);
+
   // a compaction strategy that only selects files for compaction that have no sample data or sample
   // data created in a different way than the tables
   static final CompactionStrategyConfig NO_SAMPLE_STRATEGY = new CompactionStrategyConfig(
@@ -54,7 +59,7 @@
 
   static class Opts extends ClientOnDefaultTable {
     public Opts() {
-      super("sampex");
+      super("examples.sampex");
     }
   }
 
@@ -64,11 +69,11 @@
     opts.parseArgs(RandomBatchWriter.class.getName(), args, bwOpts);
 
     try (AccumuloClient client = opts.createAccumuloClient()) {
-
-      if (!client.tableOperations().exists(opts.getTableName())) {
+      try {
         client.tableOperations().create(opts.getTableName());
-      } else {
-        System.out.println("Table exists, not doing anything.");
+      } catch (TableExistsException e) {
+        System.out.println("Table exists, not doing anything. Delete table " + opts.getTableName()
+            + " and re-run");
         return;
       }
 
diff --git a/src/main/java/org/apache/accumulo/examples/shard/Reverse.java b/src/main/java/org/apache/accumulo/examples/shard/Reverse.java
index 2d93f4c..139d9cd 100644
--- a/src/main/java/org/apache/accumulo/examples/shard/Reverse.java
+++ b/src/main/java/org/apache/accumulo/examples/shard/Reverse.java
@@ -41,10 +41,10 @@
   static class Opts extends ClientOpts {
 
     @Parameter(names = "--shardTable", description = "name of the shard table")
-    String shardTable = "shard";
+    String shardTable;
 
     @Parameter(names = "--doc2Term", description = "name of the doc2Term table")
-    String doc2TermTable = "doc2Term";
+    String doc2TermTable;
   }
 
   public static void main(String[] args) throws Exception {
