Welcome to Apache Hadoop Development Tools!
===========================================
The Hadoop Development Tools (HDT) is a set of plugins for the Eclipse IDE for developing against the Hadoop platform.
For more information please see the website:

  http://hdt.incubator.apache.org/

This is the repository for the Apache Hadoop Development Tools project, currently a podling at the Apache incubator.


Building the Source Code
------------------------

We recommend Maven 3 and JDK 6 for building Crunch. To build the project run the following Maven command:

  mvn clean install

Default Perm Gem size may not be sufficient for the plugin to work. Plese increase it to 128M by setting JAVA_OPTS/MAVEN_OPTS. 


