From 9d4483df712c194ffeb29d938a9b123d423a329a Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Tue, 5 Mar 2013 17:37:13 +0100 Subject: [PATCH 1/6] Making clojure hadoop work with older versions of the hadoop jar. It is no longer dependent on an specific hadoop jar version. --- project.clj | 9 ++++++--- src/clojure_hadoop/imports.clj | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/project.clj b/project.clj index 2e98051..087d1eb 100644 --- a/project.clj +++ b/project.clj @@ -6,12 +6,14 @@ :distribution "repo" :comments "Same license as Clojure"} :dependencies [[org.clojure/clojure "1.3.0"] - [org.apache.hadoop/hadoop-core "1.0.3"] [log4j/log4j "1.2.16" :exclusions [javax.mail/mail javax.jms/jms com.sun.jdmk/jmxtools - com.sun.jmx/jmxri]] - ] + com.sun.jmx/jmxri]]] + + :profiles {:0.20.2 {:dependencies [[org.apache.hadoop/hadoop-core "0.20.2"]]} + :1.0.3 {:dependencies [[org.apache.hadoop/hadoop-core "1.0.3"]]}} + :dev-dependencies [[swank-clojure "1.4.2"]] :aot [clojure-hadoop.config clojure-hadoop.defjob @@ -24,3 +26,4 @@ ;; TODO: Remove them? Only needed for the tests. clojure-hadoop.examples.wordcount1 clojure-hadoop.examples.wordcount2]) + diff --git a/src/clojure_hadoop/imports.clj b/src/clojure_hadoop/imports.clj index fd17d7a..a8feaa5 100644 --- a/src/clojure_hadoop/imports.clj +++ b/src/clojure_hadoop/imports.clj @@ -54,7 +54,7 @@ '(org.apache.hadoop.fs PathFilter PositionedReadable Seekable Syncable BlockLocation BufferedFSInputStream ChecksumFileSystem ContentSummary DF DU - FileStatus FileSystem FileSystem$Statistics FileUtil HardLink + FileStatus FileSystem FileSystem$Statistics FileUtil FilterFileSystem FSDataInputStream FSDataOutputStream FSInputChecker FSInputStream FSOutputSummer FsShell FsUrlStreamHandlerFactory HarFileSystem InMemoryFileSystem LocalDirAllocator LocalFileSystem Path RawLocalFileSystem From 80ea7b7da547aca6ef6b97c7f3606229a08c8556 Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Tue, 5 Mar 2013 18:04:09 +0100 Subject: [PATCH 2/6] Updating and beautifying README file. --- README.md | 126 ++++++++++++++++++++++++++++++++++++++++++++++++ README.txt | 137 ----------------------------------------------------- 2 files changed, 126 insertions(+), 137 deletions(-) create mode 100644 README.md delete mode 100644 README.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae6a876 --- /dev/null +++ b/README.md @@ -0,0 +1,126 @@ +A library to assist in writing Hadoop MapReduce jobs in Clojure. + +Originally written by Stuart Sierra ([http://stuartsierra.com/](http://stuartsierra.com)). + +Extended by Roman Scherer, Christopher Miles, Ian Eslick, Dave Lambert, Alex Ott, and other. + +Stable releases are available via [http://clojars.org](http://clojars.org) + +##Resources + +* [Stuart's presentation on clojure-hadoop](http://vimeo.com/7669741) +* [Introduction to clojure-hadoop](http://alexott.net/en/clojure/ClojureHadoop.html) +* [Hadoop](http://hadoop.apache.org/) +* [Clojure](http://clojure.org/) + +##Using the Library + +This library provides different layers of abstraction away from the raw Hadoop API. + +###Layer 1: clojure-hadoop.imports + +Provides convenience functions for importing the many classes and interfaces in the Hadoop API. + + +###Layer 2: clojure-hadoop.gen + +Provides gen-class macros to generate the multiple classes needed for a MapReduce job. See the example file "wordcount1.clj" for a demonstration of these macros. + + +###Layer 3: clojure-hadoop.wrap + +Provides wrapper functions that automatically convert between Hadoop Text objects and Clojure data structures. See the example file "wordcount2.clj" for a demonstration of these wrappers. + + +###Layer 4: clojure-hadoop.job + +Provides a complete implementation of a Hadoop MapReduce job that can be dynamically configured to use any Clojure functions in the map and reduce phases. See the example file "wordcount3.clj" for a demonstration of this usage. + + +###Layer 5: clojure-hadoop.defjob + +A convenient macro to configure MapReduce jobs with Clojure code. See the example files "wordcount4.clj" and "wordcount5.clj" for demonstrations of this macro. + +##Requiring + +You can either require this library through leiningen dependencies or maven2. It is important to notice that you must include the desired version of hadoop-core as well. + +Currently, versions 0.20.2 and 1.0.3 are tested and working. + +###Leiningen + +``` +[clojure-hadoop "1.4.1"] +[org.apache.hadoop/hadoop-core "1.0.3"] +``` + +###Maven2 + +``` + + ... + + + clojure-hadoop + clojure-hadoop + 1.4.1 + + + + org.apache.hadoop + hadoop-core + 1.0.3 + + + ... + + ... + + ... + + + clojars + http://clojars.org/repo + + + ... + +``` + + +##Building from source + +In the top-level directory of this project, run: + +``` +lein jar +``` + +This will compile and build the JAR file. + + +###Dependencies + +* [Java 6 JDK](http://java.sun.com/) +* [Hadoop core]() +* [Leiningen](http://github.com/technomancy/leiningen) + + +##Running the Examples and Tests + +With hadoop 0.20.2: + +``` +lein with-profile 0.20.2 test +``` + +With hadoop 1.0.3: + +``` +lein with-profile 1.0.3 test +``` + + +##License + +Copyright (c) Stuart Sierra, 2009. All rights reserved. The use and distribution terms for this software are covered by the Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file LICENSE.html at the root of this distribution. By using this software in any fashion, you are agreeing to be bound by the terms of this license. You must not remove this notice, or any other, from this software. \ No newline at end of file diff --git a/README.txt b/README.txt deleted file mode 100644 index 98ea558..0000000 --- a/README.txt +++ /dev/null @@ -1,137 +0,0 @@ -clojure-hadoop - -A library to assist in writing Hadoop MapReduce jobs in Clojure. - -Originally written by Stuart Sierra (http://stuartsierra.com/). -Extended by Roman Scherer, Christopher Miles, Ian Eslick, -Dave Lambert, Alex Ott, and other. - -Stable releases are available via http://clojars.org - -For more information -on Clojure, http://clojure.org/ -on Hadoop, http://hadoop.apache.org/ - -Also see Stuart's presentation about this library at -http://vimeo.com/7669741 - -Introduction to work with library is available at -http://alexott.net/en/clojure/ClojureHadoop.html - -Copyright (c) Stuart Sierra, 2009. All rights reserved. The use and -distribution terms for this software are covered by the Eclipse Public -License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can -be found in the file LICENSE.html at the root of this distribution. -By using this software in any fashion, you are agreeing to be bound by -the terms of this license. You must not remove this notice, or any -other, from this software. - - -DEPENDENCIES - -This library requires Java 6 JDK, http://java.sun.com/ - -Building from source requires Leiningen, http://github.com/technomancy/leiningen - - -BUILDING - -If you downloaded the library distribution as a .zip or .tar file, -everything is pre-built and there is nothing you need to do. - -If you downloaded the sources from Git, then you need to run the build -with Leiningen. In the top-level directory of this project, run: - - lein jar - -This compiles and builds the JAR file. - - -RUNNING THE EXAMPLES & TESTS - -After building, copy the file from - - clojure-hadoop-${VERSION}.jar - -to something short, like "examples.jar". Each of the *.clj files in -the test/clojure_hadoop/examples directory contains instructions for -running that example. - -The wordcount examples can also be run via the "lein test" command. - - -USING THE LIBRARY IN HADOOP - -After building, include the "clojure-hadoop-${VERSION}.jar" file -in the lib/ directory of the JAR you submit as your Hadoop job. - - -DEPENDING ON THE LIBRARY WITH MAVEN - -You can depend on clojure-hadoop in your Maven 2 projects by adding -the following lines to your pom.xml: - - - ... - - - clojure-hadoop - clojure-hadoop - ${VERSION} - - - ... - - ... - - ... - - - clojars - http://clojars.org/repo - - - ... - - - -USING THE LIBRARY - -This library provides different layers of abstraction away from the -raw Hadoop API. - -Layer 1: clojure-hadoop.imports - - Provides convenience functions for importing the many classes and - interfaces in the Hadoop API. - -Layer 2: clojure-hadoop.gen - - Provides gen-class macros to generate the multiple classes needed - for a MapReduce job. See the example file "wordcount1.clj" for a - demonstration of these macros. - -Layer 3: clojure-hadoop.wrap - - clojure-hadoop.wrap: provides wrapper functions that automatically - convert between Hadoop Text objects and Clojure data structures. - See the example file "wordcount2.clj" for a demonstration of these - wrappers. - -Layer 4: clojure-hadoop.job - - Provides a complete implementation of a Hadoop MapReduce job that - can be dynamically configured to use any Clojure functions in the - map and reduce phases. See the example file "wordcount3.clj" for - a demonstration of this usage. - -Layer 5: clojure-hadoop.defjob - - A convenient macro to configure MapReduce jobs with Clojure code. - See the example files "wordcount4.clj" and "wordcount5.clj" for - demonstrations of this macro. - - -NOTES - -* README.txt changed to reflect the Leiningen build process (Roman Scherer). From 8fecdb02b8ccb4285895fab2ad5e074262367d2b Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Tue, 5 Mar 2013 18:05:57 +0100 Subject: [PATCH 3/6] Adding hadoop link to the readme file. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae6a876..7fc1ba9 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ This will compile and build the JAR file. ###Dependencies * [Java 6 JDK](http://java.sun.com/) -* [Hadoop core]() +* [Hadoop core](http://hadoop.apache.org/releases.html) * [Leiningen](http://github.com/technomancy/leiningen) From 06df32d5cec4f8564d95a80dd79730f709cbfd26 Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Tue, 5 Mar 2013 18:26:31 +0100 Subject: [PATCH 4/6] Making the project.clj require lein version 2. --- project.clj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/project.clj b/project.clj index 087d1eb..fb03f18 100644 --- a/project.clj +++ b/project.clj @@ -11,10 +11,11 @@ com.sun.jdmk/jmxtools com.sun.jmx/jmxri]]] + :min-lein-version "2.0.0" :profiles {:0.20.2 {:dependencies [[org.apache.hadoop/hadoop-core "0.20.2"]]} - :1.0.3 {:dependencies [[org.apache.hadoop/hadoop-core "1.0.3"]]}} + :1.0.3 {:dependencies [[org.apache.hadoop/hadoop-core "1.0.3"]]} + :dev {:dependencies [[swank-clojure "1.4.2"]]}} - :dev-dependencies [[swank-clojure "1.4.2"]] :aot [clojure-hadoop.config clojure-hadoop.defjob clojure-hadoop.gen From 0a67f3d1829154c96f9269d66697790bb3607257 Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Tue, 5 Mar 2013 18:48:25 +0100 Subject: [PATCH 5/6] Making the tests do not depend on the README file. --- test-resources/to_be_counted.txt | 9 +++++++++ test/clojure_hadoop/examples/wordcount1.clj | 14 +++++++------- test/clojure_hadoop/examples/wordcount2.clj | 14 +++++++------- test/clojure_hadoop/examples/wordcount3.clj | 10 +++++----- test/clojure_hadoop/examples/wordcount4.clj | 8 ++++---- test/clojure_hadoop/examples/wordcount5.clj | 10 +++++----- 6 files changed, 37 insertions(+), 28 deletions(-) create mode 100644 test-resources/to_be_counted.txt diff --git a/test-resources/to_be_counted.txt b/test-resources/to_be_counted.txt new file mode 100644 index 0000000..6ac1407 --- /dev/null +++ b/test-resources/to_be_counted.txt @@ -0,0 +1,9 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque accumsan mattis cursus. Donec urna felis, pretium eu scelerisque non, egestas sed lectus. Sed interdum, augue vel pulvinar ornare, urna quam dapibus sapien, nec ornare elit turpis et neque. Suspendisse ipsum orci, mollis nec auctor et, auctor vitae justo. In hac habitasse platea dictumst. In convallis eros neque. Aliquam erat volutpat. Aenean orci nisi, lobortis sit amet dictum et, consectetur ut augue. Ut congue dui a nibh rutrum vel vestibulum nunc fringilla. Nullam laoreet orci vel nisl sodales mattis. Pellentesque neque ipsum, aliquam iaculis condimentum ullamcorper, varius sit amet sapien. Aenean at ultrices orci. + +In ac accumsan est. Donec id tempus justo. Nulla est sapien, aliquam in congue vel, lobortis eu augue. Duis volutpat odio non odio varius commodo. Pellentesque in erat nec lectus ultrices feugiat quis a risus. Nullam dictum velit non diam aliquet tincidunt. Nunc accumsan velit sit amet urna pretium sodales. Mauris eget diam a lorem commodo interdum. Ut justo mi, blandit vel ultrices sit amet, fermentum non arcu. Cras sit amet ipsum ligula. + +Nunc velit mauris, aliquam sit amet rhoncus at, eleifend non massa. Vivamus et lorem tortor. Curabitur sapien arcu, ultrices sit amet semper at, convallis vitae nisi. Phasellus pretium, sapien in venenatis ultricies, ligula magna vehicula lorem, id pulvinar nunc ante eu eros. Praesent quis arcu eu libero molestie porttitor. Pellentesque quis lectus at nisl ultrices porta non eu est. Suspendisse consequat vulputate mi, at hendrerit sem interdum a. + +Nullam id mauris a orci iaculis imperdiet. Etiam sit amet auctor mi. Integer at orci dictum erat gravida consequat eget et elit. In ultricies, nulla vitae iaculis dignissim, velit ante congue neque, non hendrerit felis est non turpis. Nam placerat orci a dui fringilla vel dignissim erat ultrices. Mauris commodo iaculis semper. Praesent egestas, dui ut consectetur hendrerit, nibh lacus aliquet enim, eu adipiscing orci ipsum ut turpis. Donec iaculis libero quis nibh lacinia lobortis. Sed eu dui sapien, id vulputate velit. Etiam et est eget libero laoreet elementum. Sed lacinia sapien et lacus rhoncus cursus. + +Donec ultrices enim mi. Nulla cursus venenatis enim, sit amet rutrum neque adipiscing et. Proin felis mi, malesuada eget malesuada a, tincidunt eget odio. Mauris metus magna, scelerisque ut auctor ac, elementum id mauris. Fusce sagittis dolor magna, vel tincidunt nunc. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam quis lobortis libero. Vivamus non velit nec quam adipiscing aliquam a vitae nibh. Phasellus sem lorem, aliquam vitae pretium sed, porttitor sit amet sem. In pretium, lacus sagittis condimentum tincidunt, tortor odio hendrerit orci, eget consectetur augue dui ut libero. Nullam at sodales nulla. Morbi convallis vulputate magna, sed fringilla enim mollis at. diff --git a/test/clojure_hadoop/examples/wordcount1.clj b/test/clojure_hadoop/examples/wordcount1.clj index 599c258..45673c3 100644 --- a/test/clojure_hadoop/examples/wordcount1.clj +++ b/test/clojure_hadoop/examples/wordcount1.clj @@ -11,18 +11,18 @@ ;; three functions mapper-map, reducer-reduce, and tool-run. ;; ;; To run this example, first compile it (see instructions in -;; README.txt), then run this command (all one line): +;; README.md), then run this command (all one line): ;; ;; java -cp examples.jar \ ;; clojure_hadoop.examples.wordcount1 \ -;; README.txt out1 +;; README.md out1 ;; -;; This will count the instances of each word in README.txt and write +;; This will count the instances of each word in README.md and write ;; the results to out1/part-00000 (ns clojure-hadoop.examples.wordcount1 - (:require [clojure-hadoop.gen :as gen] + (:require [clojure-hadoop.gen :as gen] [clojure-hadoop.imports :as imp]) (:import (java.util StringTokenizer) (org.apache.hadoop.util Tool)) @@ -32,7 +32,7 @@ (imp/import-fs) (imp/import-io) (imp/import-mapreduce) -(imp/import-mapreduce-lib) +(imp/import-mapreduce-lib) (gen/gen-job-classes) ;; generates Tool, Mapper, and Reducer classes (gen/gen-main-method) ;; generates Tool.main method @@ -80,7 +80,7 @@ (.setMapperClass (Class/forName "clojure_hadoop.examples.wordcount1_mapper")) (.setReducerClass (Class/forName "clojure_hadoop.examples.wordcount1_reducer")) (.setInputFormatClass TextInputFormat) - (.setOutputFormatClass TextOutputFormat) + (.setOutputFormatClass TextOutputFormat) (FileInputFormat/setInputPaths (first args)) (FileOutputFormat/setOutputPath (Path. (second args))) (.waitForCompletion true)) @@ -88,4 +88,4 @@ (deftest test-wordcount-1 (.delete (FileSystem/get (Configuration.)) (Path. "tmp/out1") true) - (is (tool-run (clojure_hadoop.job.) ["README.txt" "tmp/out1"]))) + (is (tool-run (clojure_hadoop.job.) ["test-resources/to_be_counted.txt" "tmp/out1"]))) diff --git a/test/clojure_hadoop/examples/wordcount2.clj b/test/clojure_hadoop/examples/wordcount2.clj index ccca552..35626f8 100644 --- a/test/clojure_hadoop/examples/wordcount2.clj +++ b/test/clojure_hadoop/examples/wordcount2.clj @@ -24,13 +24,13 @@ ;; functions such as map, filter, or reduce. ;; ;; To run this example, first compile it (see instructions in -;; README.txt), then run this command (all one line): +;; README.md), then run this command (all one line): ;; ;; java -cp examples.jar \ ;; clojure_hadoop.examples.wordcount2 \ -;; README.txt out2 +;; README.md out2 ;; -;; This will count the instances of each word in README.txt and write +;; This will count the instances of each word in README.md and write ;; the results to out2/part-00000 ;; ;; Notice that, in the output file, the words are enclosed in double @@ -39,9 +39,9 @@ (ns clojure-hadoop.examples.wordcount2 - (:require [clojure-hadoop.gen :as gen] + (:require [clojure-hadoop.gen :as gen] [clojure-hadoop.imports :as imp] - [clojure-hadoop.wrap :as wrap]) + [clojure-hadoop.wrap :as wrap]) (:import (java.util StringTokenizer) (org.apache.hadoop.util Tool)) (:use clojure.test)) @@ -82,6 +82,6 @@ (.waitForCompletion true)) 0) -(deftest test-wordcount-2 +(deftest test-wordcount-2 (.delete (FileSystem/get (Configuration.)) (Path. "tmp/out2") true) - (is (tool-run (clojure_hadoop.job.) ["README.txt" "tmp/out2"]))) + (is (tool-run (clojure_hadoop.job.) ["test-resources/to_be_counted.txt" "tmp/out2"]))) diff --git a/test/clojure_hadoop/examples/wordcount3.clj b/test/clojure_hadoop/examples/wordcount3.clj index ad0b176..a1fbd6c 100644 --- a/test/clojure_hadoop/examples/wordcount3.clj +++ b/test/clojure_hadoop/examples/wordcount3.clj @@ -8,11 +8,11 @@ ;; library, which allows you to run a MapReduce job that can be ;; configured to use any Clojure functions as the mapper and reducer. ;; -;; After compiling (see README.txt), run the example like this +;; After compiling (see README.md), run the example like this ;; (all on one line): ;; ;; java -cp examples.jar clojure_hadoop.job \ -;; -input README.txt \ +;; -input README.md \ ;; -output out3 \ ;; -map clojure-hadoop.examples.wordcount3/my-map \ ;; -map-reader clojure-hadoop.wrap/int-string-map-reader \ @@ -39,7 +39,7 @@ ;; symbol. ;; ;; We also have to specify the input and output paths, and specify the -;; non-default input-format as 'text', because README.txt is a text +;; non-default input-format as 'text', because README.md is a text ;; file. ;; ;; Run clojure_hadoop.job without any arguments for a brief summary of @@ -62,12 +62,12 @@ [[key (reduce + (values-fn))]]) (deftest test-wordcount-3 - (is (run + (is (run {:map "clojure-hadoop.examples.wordcount3/my-map" :map-reader "clojure-hadoop.wrap/int-string-map-reader" :combine "clojure-hadoop.examples.wordcount3/my-combine" :reduce "clojure-hadoop.examples.wordcount3/my-reduce" :input-format "text" - :input "README.txt" + :input "test-resources/to_be_counted.txt" :output "tmp/out3" :replace "true"}))) diff --git a/test/clojure_hadoop/examples/wordcount4.clj b/test/clojure_hadoop/examples/wordcount4.clj index 7277e9c..b8897e2 100644 --- a/test/clojure_hadoop/examples/wordcount4.clj +++ b/test/clojure_hadoop/examples/wordcount4.clj @@ -13,12 +13,12 @@ ;; clojure_hadoop.job, adding or overriding any additional arguments ;; at the command line. ;; -;; After compiling (see README.txt), run the example like this +;; After compiling (see README.md), run the example like this ;; (all on one line): ;; ;; java -cp examples.jar clojure_hadoop.job \ ;; -job clojure-hadoop.examples.wordcount4/job \ -;; -input README.txt -output out4 +;; -input README.md -output out4 ;; ;; The output is a Hadoop SequenceFile. You can view the output ;; with (all one line): @@ -28,7 +28,7 @@ (ns clojure-hadoop.examples.wordcount4 - (:require [clojure-hadoop.wrap :as wrap] + (:require [clojure-hadoop.wrap :as wrap] [clojure-hadoop.defjob :as defjob]) (:import (java.util StringTokenizer)) (:use clojure.test clojure-hadoop.job)) @@ -45,7 +45,7 @@ :map-reader wrap/int-string-map-reader :reduce my-reduce :input-format :text - :input "README.txt" + :input "test-resources/to_be_counted.txt" :output "tmp/out4" :replace true) diff --git a/test/clojure_hadoop/examples/wordcount5.clj b/test/clojure_hadoop/examples/wordcount5.clj index 249f1f8..e6aabed 100644 --- a/test/clojure_hadoop/examples/wordcount5.clj +++ b/test/clojure_hadoop/examples/wordcount5.clj @@ -11,12 +11,12 @@ ;; define custom reader and writer functions, and specify the output ;; key/value types in the defjob configuration. ;; -;; After compiling (see README.txt), run the example like this +;; After compiling (see README.md), run the example like this ;; (all on one line): ;; ;; java -cp examples.jar clojure_hadoop.job \ ;; -job clojure-hadoop.examples.wordcount5/job \ -;; -input README.txt -output out5 +;; -input README.md -output out5 ;; ;; The output is plain text, written to out5/part-00000 ;; @@ -27,8 +27,8 @@ (ns clojure-hadoop.examples.wordcount5 - (:require [clojure-hadoop.wrap :as wrap] - [clojure-hadoop.defjob :as defjob] + (:require [clojure-hadoop.wrap :as wrap] + [clojure-hadoop.defjob :as defjob] [clojure-hadoop.imports :as imp]) (:import (java.util StringTokenizer)) (:use clojure.test clojure-hadoop.job)) @@ -61,7 +61,7 @@ :input-format :text :output-format :text :compress-output false - :input "README.txt" + :input "test-resources/to_be_counted.txt" :output "tmp/out5" :replace true) From a3f9c7cf98af164c3464e510e7f636c09e604889 Mon Sep 17 00:00:00 2001 From: Thiago Nunes Date: Wed, 6 Mar 2013 10:51:32 +0100 Subject: [PATCH 6/6] Incrementing the version of clojure hadoop. --- project.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.clj b/project.clj index fb03f18..5eed3f4 100644 --- a/project.clj +++ b/project.clj @@ -1,4 +1,4 @@ -(defproject clojure-hadoop "1.4.1" +(defproject clojure-hadoop "1.4.2" :description "Library to aid writing Hadoop jobs in Clojure." :url "http://github.com/alexott/clojure-hadoop" :license {:name "Eclipse Public License 1.0"