Apache Accumulo File System Archive Example (Data Only)

This example archives file data into an Accumulo table. Files with duplicate data are only stored once. The example has the following classes:

  • CharacterHistogram - A MapReduce that computes a histogram of byte frequency for each file and stores the histogram alongside the file data. An example use of the ChunkInputFormat.
  • ChunkCombiner - An Iterator that dedupes file data and sets their visibilities to a combined visibility based on current references to the file data.
  • ChunkInputFormat - An Accumulo InputFormat that provides keys containing file info (List<Entry<Key,Value>>) and values with an InputStream over the file (ChunkInputStream).
  • ChunkInputStream - An input stream over file data stored in Accumulo.
  • FileDataIngest - Takes a list of files and archives them into Accumulo keyed on hashes of the files.
  • FileDataQuery - Retrieves file data based on the hash of the file. (Used by the dirlist.Viewer.)
  • KeyUtil - A utility for creating and parsing null-byte separated strings into/from Text objects.
  • VisibilityCombiner - A utility for merging visibilities into the form (VIS1)|(VIS2)|...

This example is coupled with the dirlist example.

If you haven't already run the dirlist example, ingest a file with FileDataIngest.

$ ./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. 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 examples.dataTable

Run the CharacterHistogram MapReduce to add some information about the file.

$ ./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 examples.dataTable