made compact transient command retry when calling compact throws an exception
[fluo-recipes.git] / README.md
1 # Fluo Recipes
2
3 [![Build Status](https://travis-ci.org/fluo-io/fluo-recipes.svg?branch=master)](https://travis-ci.org/fluo-io/fluo-recipes)
4
5 Common code for Fluo application developers.  
6
7 ### Available Recipes
8
9 * [Collision Free Map][cfm] - A recipe for making many to many updates.
10 * [Export Queue][export-q] - A recipe for exporting data from Fluo to external systems.
11 * [Row Hash Prefix][row-hasher] - A recipe for spreading data evenly in a row prefix.
12 * [RecordingTransaction][recording-tx] - A wrapper for a Fluo transaction that records all transaction
13 operations to a log which can be used to export data from Fluo.
14 * [Testing][testing] Some code to help write Fluo Integration test.
15
16 ### Common Functionality
17
18 Recipes have common needs that are broken down into the following reusable components.
19
20 * [Serialization][serialization] - Common code for serializing POJOs. 
21 * [Transient Ranges][transient] - Standardized process for dealing with transient data.
22 * [Table optimization][optimization] - Standardized process for optimizing the Fluo table.
23
24 ### Modules and Maven Imports
25
26 Fluo Recipes provides multiple jars.  The primary reason its separated
27 into multiple jars is to avoid pushing unneeded dependencies on users.   For
28 example there is a Fluo Recipes spark module that depends on Spark.  If an
29 application does not need to use Spark, then it can easily avoid a transitive
30 dependency on Spark.
31
32 Below are Maven dependencies for Fluo Recipes.
33
34 ```xml
35   <properties>
36     <fluo-recipes.version>1.0.0-beta-2</fluo-recipes.version>
37   </properties>
38
39   <dependencies>
40     <!-- Recipes core only has a transitive dependency on the Fluo API -->
41     <dependency>
42       <groupId>io.fluo</groupId>
43       <artifactId>fluo-recipes-core</artifactId>
44       <version>${fluo-recipes.version}</version>
45     </dependency>
46     <!--optional dependency provides the default Fluo Recipes serialization
47         mechanism, which is based on Kryo  -->
48     <dependency>
49       <groupId>io.fluo</groupId>
50       <artifactId>fluo-recipes-kryo</artifactId>
51       <version>${fluo-recipes.version}</version>
52     </dependency>
53     <!--optional dependency assist w/ intergrating Accumulo and Fluo  -->
54     <dependency>
55       <groupId>io.fluo</groupId>
56       <artifactId>fluo-recipes-accumulo</artifactId>
57       <version>${fluo-recipes.version}</version>
58     </dependency>
59     <!--optional dependency assist w/ intergrating Spark and Fluo -->
60     <dependency>
61       <groupId>io.fluo</groupId>
62       <artifactId>fluo-recipes-spark</artifactId>
63       <version>${fluo-recipes.version}</version>
64     </dependency>
65     <!--optional dependency helps when write Fluo intergeration test. -->
66     <dependency>
67       <groupId>io.fluo</groupId>
68       <artifactId>fluo-recipes-test</artifactId>
69       <version>${fluo-recipes.version}</version>
70       <scope>test</scope>
71     </dependency>
72   </dependencies>
73 ```
74
75 [cfm]: docs/cfm.md
76 [export-q]: docs/export-queue.md
77 [recording-tx]: docs/recording-tx.md
78 [serialization]: docs/serialization.md
79 [transient]: docs/transient.md
80 [optimization]: docs/table-optimization.md
81 [row-hasher]: docs/row-hasher.md
82 [testing]: docs/testing.md