| @@ -0,0 +1,161 @@ | ||
| package spark | ||
| import org.scalatest.FunSuite | ||
| import org.scalatest.prop.Checkers | ||
| import org.scalacheck.Arbitrary._ | ||
| import org.scalacheck.Gen | ||
| import org.scalacheck.Prop._ | ||
| class ParallelArraySplitSuite extends FunSuite with Checkers { | ||
| test("one element per slice") { | ||
| val data = Array(1, 2, 3) | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices(0).mkString(",") === "1") | ||
| assert(slices(1).mkString(",") === "2") | ||
| assert(slices(2).mkString(",") === "3") | ||
| } | ||
| test("one slice") { | ||
| val data = Array(1, 2, 3) | ||
| val slices = ParallelArray.slice(data, 1) | ||
| assert(slices.size === 1) | ||
| assert(slices(0).mkString(",") === "1,2,3") | ||
| } | ||
| test("equal slices") { | ||
| val data = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices(0).mkString(",") === "1,2,3") | ||
| assert(slices(1).mkString(",") === "4,5,6") | ||
| assert(slices(2).mkString(",") === "7,8,9") | ||
| } | ||
| test("non-equal slices") { | ||
| val data = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices(0).mkString(",") === "1,2,3") | ||
| assert(slices(1).mkString(",") === "4,5,6") | ||
| assert(slices(2).mkString(",") === "7,8,9,10") | ||
| } | ||
| test("splitting exclusive range") { | ||
| val data = 0 until 100 | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices(0).mkString(",") === (0 to 32).mkString(",")) | ||
| assert(slices(1).mkString(",") === (33 to 65).mkString(",")) | ||
| assert(slices(2).mkString(",") === (66 to 99).mkString(",")) | ||
| } | ||
| test("splitting inclusive range") { | ||
| val data = 0 to 100 | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices(0).mkString(",") === (0 to 32).mkString(",")) | ||
| assert(slices(1).mkString(",") === (33 to 66).mkString(",")) | ||
| assert(slices(2).mkString(",") === (67 to 100).mkString(",")) | ||
| } | ||
| test("empty data") { | ||
| val data = new Array[Int](0) | ||
| val slices = ParallelArray.slice(data, 5) | ||
| assert(slices.size === 5) | ||
| for (slice <- slices) assert(slice.size === 0) | ||
| } | ||
| test("zero slices") { | ||
| val data = Array(1, 2, 3) | ||
| intercept[IllegalArgumentException] { ParallelArray.slice(data, 0) } | ||
| } | ||
| test("negative number of slices") { | ||
| val data = Array(1, 2, 3) | ||
| intercept[IllegalArgumentException] { ParallelArray.slice(data, -5) } | ||
| } | ||
| test("exclusive ranges sliced into ranges") { | ||
| val data = 1 until 100 | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices.map(_.size).reduceLeft(_+_) === 99) | ||
| assert(slices.forall(_.isInstanceOf[SerializableRange])) | ||
| } | ||
| test("inclusive ranges sliced into ranges") { | ||
| val data = 1 to 100 | ||
| val slices = ParallelArray.slice(data, 3) | ||
| assert(slices.size === 3) | ||
| assert(slices.map(_.size).reduceLeft(_+_) === 100) | ||
| assert(slices.forall(_.isInstanceOf[SerializableRange])) | ||
| } | ||
| test("large ranges don't overflow") { | ||
| val N = 100 * 1000 * 1000 | ||
| val data = 0 until N | ||
| val slices = ParallelArray.slice(data, 40) | ||
| assert(slices.size === 40) | ||
| for (i <- 0 until 40) { | ||
| assert(slices(i).isInstanceOf[SerializableRange]) | ||
| val range = slices(i).asInstanceOf[SerializableRange] | ||
| assert(range.start === i * (N / 40), "slice " + i + " start") | ||
| assert(range.end === (i+1) * (N / 40), "slice " + i + " end") | ||
| assert(range.step === 1, "slice " + i + " step") | ||
| } | ||
| } | ||
| test("random array tests") { | ||
| val gen = for { | ||
| d <- arbitrary[List[Int]] | ||
| n <- Gen.choose(1, 100) | ||
| } yield (d, n) | ||
| val prop = forAll(gen) { | ||
| (tuple: (List[Int], Int)) => | ||
| val d = tuple._1 | ||
| val n = tuple._2 | ||
| val slices = ParallelArray.slice(d, n) | ||
| ("n slices" |: slices.size == n) && | ||
| ("concat to d" |: Array.concat(slices: _*).mkString(",") == d.mkString(",")) && | ||
| ("equal sizes" |: slices.map(_.size).forall(x => x==d.size/n || x==d.size/n+1)) | ||
| } | ||
| check(prop) | ||
| } | ||
| test("random exclusive range tests") { | ||
| val gen = for { | ||
| a <- Gen.choose(-100, 100) | ||
| b <- Gen.choose(-100, 100) | ||
| step <- Gen.choose(-5, 5) suchThat (_ != 0) | ||
| n <- Gen.choose(1, 100) | ||
| } yield (a until b by step, n) | ||
| val prop = forAll(gen) { | ||
| case (d: Range, n: Int) => | ||
| val slices = ParallelArray.slice(d, n) | ||
| ("n slices" |: slices.size == n) && | ||
| ("all ranges" |: slices.forall(_.isInstanceOf[SerializableRange])) && | ||
| ("concat to d" |: Array.concat(slices: _*).mkString(",") == d.mkString(",")) && | ||
| ("equal sizes" |: slices.map(_.size).forall(x => x==d.size/n || x==d.size/n+1)) | ||
| } | ||
| check(prop) | ||
| } | ||
| test("random inclusive range tests") { | ||
| val gen = for { | ||
| a <- Gen.choose(-100, 100) | ||
| b <- Gen.choose(-100, 100) | ||
| step <- Gen.choose(-5, 5) suchThat (_ != 0) | ||
| n <- Gen.choose(1, 100) | ||
| } yield (a to b by step, n) | ||
| val prop = forAll(gen) { | ||
| case (d: Range, n: Int) => | ||
| val slices = ParallelArray.slice(d, n) | ||
| ("n slices" |: slices.size == n) && | ||
| ("all ranges" |: slices.forall(_.isInstanceOf[SerializableRange])) && | ||
| ("concat to d" |: Array.concat(slices: _*).mkString(",") == d.mkString(",")) && | ||
| ("equal sizes" |: slices.map(_.size).forall(x => x==d.size/n || x==d.size/n+1)) | ||
| } | ||
| check(prop) | ||
| } | ||
| } |
| @@ -0,0 +1,124 @@ | ||
| package spark.repl | ||
| import java.io._ | ||
| import org.scalatest.FunSuite | ||
| class ReplSuite extends FunSuite { | ||
| def runInterpreter(master: String, input: String): String = { | ||
| val in = new BufferedReader(new StringReader(input + "\n")) | ||
| val out = new StringWriter() | ||
| val interp = new SparkInterpreterLoop(in, new PrintWriter(out), master) | ||
| spark.repl.Main.interp = interp | ||
| interp.main(new Array[String](0)) | ||
| spark.repl.Main.interp = null | ||
| return out.toString | ||
| } | ||
| def assertContains(message: String, output: String) { | ||
| assert(output contains message, | ||
| "Interpreter output did not contain '" + message + "':\n" + output) | ||
| } | ||
| def assertDoesNotContain(message: String, output: String) { | ||
| assert(!(output contains message), | ||
| "Interpreter output contained '" + message + "':\n" + output) | ||
| } | ||
| test ("simple foreach with accumulator") { | ||
| val output = runInterpreter("local", """ | ||
| val accum = sc.accumulator(0) | ||
| sc.parallelize(1 to 10).foreach(x => accum += x) | ||
| accum.value | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res1: Int = 55", output) | ||
| } | ||
| test ("external vars") { | ||
| val output = runInterpreter("local", """ | ||
| var v = 7 | ||
| sc.parallelize(1 to 10).map(x => v).toArray.reduceLeft(_+_) | ||
| v = 10 | ||
| sc.parallelize(1 to 10).map(x => v).toArray.reduceLeft(_+_) | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res0: Int = 70", output) | ||
| assertContains("res2: Int = 100", output) | ||
| } | ||
| test ("external classes") { | ||
| val output = runInterpreter("local", """ | ||
| class C { | ||
| def foo = 5 | ||
| } | ||
| sc.parallelize(1 to 10).map(x => (new C).foo).toArray.reduceLeft(_+_) | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res0: Int = 50", output) | ||
| } | ||
| test ("external functions") { | ||
| val output = runInterpreter("local", """ | ||
| def double(x: Int) = x + x | ||
| sc.parallelize(1 to 10).map(x => double(x)).toArray.reduceLeft(_+_) | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res0: Int = 110", output) | ||
| } | ||
| test ("external functions that access vars") { | ||
| val output = runInterpreter("local", """ | ||
| var v = 7 | ||
| def getV() = v | ||
| sc.parallelize(1 to 10).map(x => getV()).toArray.reduceLeft(_+_) | ||
| v = 10 | ||
| sc.parallelize(1 to 10).map(x => getV()).toArray.reduceLeft(_+_) | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res0: Int = 70", output) | ||
| assertContains("res2: Int = 100", output) | ||
| } | ||
| test ("cached vars") { | ||
| // Test that the value that a cached var had when it was created is used, | ||
| // even if that cached var is then modified in the driver program | ||
| val output = runInterpreter("local", """ | ||
| var array = new Array[Int](5) | ||
| val cachedArray = sc.cache(array) | ||
| sc.parallelize(0 to 4).map(x => cachedArray.value(x)).toArray | ||
| array(0) = 5 | ||
| sc.parallelize(0 to 4).map(x => cachedArray.value(x)).toArray | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res0: Array[Int] = Array(0, 0, 0, 0, 0)", output) | ||
| assertContains("res2: Array[Int] = Array(5, 0, 0, 0, 0)", output) | ||
| } | ||
| test ("running on Nexus") { | ||
| val output = runInterpreter("localquiet", """ | ||
| var v = 7 | ||
| def getV() = v | ||
| sc.parallelize(1 to 10).map(x => getV()).toArray.reduceLeft(_+_) | ||
| v = 10 | ||
| sc.parallelize(1 to 10).map(x => getV()).toArray.reduceLeft(_+_) | ||
| var array = new Array[Int](5) | ||
| val cachedArray = sc.cache(array) | ||
| sc.parallelize(0 to 4).map(x => cachedArray.value(x)).toArray | ||
| array(0) = 5 | ||
| sc.parallelize(0 to 4).map(x => cachedArray.value(x)).toArray | ||
| """) | ||
| assertDoesNotContain("error:", output) | ||
| assertDoesNotContain("Exception", output) | ||
| assertContains("res0: Int = 70", output) | ||
| assertContains("res2: Int = 100", output) | ||
| assertContains("res3: Array[Int] = Array(0, 0, 0, 0, 0)", output) | ||
| assertContains("res5: Array[Int] = Array(0, 0, 0, 0, 0)", output) | ||
| } | ||
| } |
| @@ -0,0 +1,3 @@ | ||
| It is highly recommended to use only the necessary ASM jars for your | ||
| application instead of using the asm-all jar, unless you really need | ||
| all ASM packages. |
| @@ -0,0 +1,15 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <groupId>asm</groupId> | ||
| <artifactId>asm-parent</artifactId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM All</name> | ||
| <groupId>asm</groupId> | ||
| <artifactId>asm-all</artifactId> | ||
| <packaging>jar</packaging> | ||
| </project> |
| @@ -0,0 +1,15 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <groupId>asm</groupId> | ||
| <artifactId>asm-parent</artifactId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM All</name> | ||
| <groupId>asm</groupId> | ||
| <artifactId>asm-all</artifactId> | ||
| <packaging>jar</packaging> | ||
| </project> |
| @@ -0,0 +1,14 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM Core</name> | ||
| <artifactId>asm</artifactId> | ||
| <packaging>jar</packaging> | ||
| </project> |
| @@ -0,0 +1,21 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM Analysis</name> | ||
| <artifactId>asm-analysis</artifactId> | ||
| <packaging>jar</packaging> | ||
| <dependencies> | ||
| <dependency> | ||
| <artifactId>asm-tree</artifactId> | ||
| <groupId>asm</groupId> | ||
| </dependency> | ||
| </dependencies> | ||
| </project> |
| @@ -0,0 +1,21 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM Commons</name> | ||
| <artifactId>asm-commons</artifactId> | ||
| <packaging>jar</packaging> | ||
| <dependencies> | ||
| <dependency> | ||
| <artifactId>asm-tree</artifactId> | ||
| <groupId>asm</groupId> | ||
| </dependency> | ||
| </dependencies> | ||
| </project> |
| @@ -0,0 +1,136 @@ | ||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 | ||
| http://maven.apache.org/maven-v4_0_0.xsd"> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| <packaging>pom</packaging> | ||
| <name>ASM</name> | ||
| <description>A very small and fast Java bytecode manipulation framework</description> | ||
| <url>http://asm.objectweb.org/</url> | ||
| <organization> | ||
| <name>ObjectWeb</name> | ||
| <url>http://www.objectweb.org/</url> | ||
| </organization> | ||
| <inceptionYear>2000</inceptionYear> | ||
| <licenses> | ||
| <license> | ||
| <name>BSD</name> | ||
| <url>http://asm.objectweb.org/license.html</url> | ||
| </license> | ||
| </licenses> | ||
| <developers> | ||
| <developer> | ||
| <name>Eric Bruneton</name> | ||
| <id>ebruneton</id> | ||
| <email>Eric.Bruneton@rd.francetelecom.com</email> | ||
| <roles> | ||
| <role>Creator</role> | ||
| <role>Java Developer</role> | ||
| </roles> | ||
| </developer> | ||
| <developer> | ||
| <name>Eugene Kuleshov</name> | ||
| <id>eu</id> | ||
| <email>eu@javatx.org</email> | ||
| <roles> | ||
| <role>Java Developer</role> | ||
| </roles> | ||
| </developer> | ||
| </developers> | ||
| <scm> | ||
| <connection>scm:cvs:pserver:anonymous:@cvs.forge.objectweb.org:/cvsroot/asm:asm</connection> | ||
| <developerConnection>scm:cvs:ext:${maven.username}@cvs.forge.objectweb.org:/cvsroot/asm:asm</developerConnection> | ||
| <url>http://cvs.forge.objectweb.org/cgi-bin/viewcvs.cgi/asm/asm/</url> | ||
| </scm> | ||
| <issueManagement> | ||
| <url>http://forge.objectweb.org/tracker/?group_id=23</url> | ||
| </issueManagement> | ||
| <dependencyManagement> | ||
| <dependencies> | ||
| <dependency> | ||
| <artifactId>asm</artifactId> | ||
| <groupId>${project.groupId}</groupId> | ||
| <version>${project.version}</version> | ||
| </dependency> | ||
| <dependency> | ||
| <artifactId>asm-tree</artifactId> | ||
| <groupId>${project.groupId}</groupId> | ||
| <version>${project.version}</version> | ||
| </dependency> | ||
| <dependency> | ||
| <artifactId>asm-analysis</artifactId> | ||
| <groupId>${project.groupId}</groupId> | ||
| <version>${project.version}</version> | ||
| </dependency> | ||
| <dependency> | ||
| <artifactId>asm-commons</artifactId> | ||
| <groupId>${project.groupId}</groupId> | ||
| <version>${project.version}</version> | ||
| </dependency> | ||
| <dependency> | ||
| <artifactId>asm-util</artifactId> | ||
| <groupId>${project.groupId}</groupId> | ||
| <version>${project.version}</version> | ||
| </dependency> | ||
| <dependency> | ||
| <artifactId>asm-xml</artifactId> | ||
| <groupId>${project.groupId}</groupId> | ||
| <version>${project.version}</version> | ||
| </dependency> | ||
| </dependencies> | ||
| </dependencyManagement> | ||
| <mailingLists> | ||
| <mailingList> | ||
| <name>ASM Users List</name> | ||
| <subscribe>sympa@ow2.org?subject=subscribe%20asm</subscribe> | ||
| <unsubscribe>sympa@ow2.org?subject=unsubscribe%20asm</unsubscribe> | ||
| <post>asm@ow2.org</post> | ||
| <archive>http://www.ow2.org/wws/arc/asm</archive> | ||
| </mailingList> | ||
| <mailingList> | ||
| <name>ASM Team List</name> | ||
| <subscribe>sympa@ow2.org?subject=subscribe%20asm-team</subscribe> | ||
| <unsubscribe>sympa@ow2.org?subject=unsubscribe%20asm-team</unsubscribe> | ||
| <post>asm-team@ow2.org</post> | ||
| <archive>http://www.ow2.org/wws/arc/asm-team</archive> | ||
| </mailingList> | ||
| </mailingLists> | ||
| <distributionManagement> | ||
| <downloadUrl>http://mojo.codehaus.org/my-project</downloadUrl> | ||
| <repository> | ||
| <id>objectweb</id> | ||
| <uniqueVersion>false</uniqueVersion> | ||
| <name>ObjectWeb Maven 2.0 Repository</name> | ||
| <url>dav:https://maven.forge.objectweb.org:8002/maven2/</url> | ||
| <layout>default</layout> | ||
| </repository> | ||
| <snapshotRepository> | ||
| <id>objectweb.snapshots</id> | ||
| <uniqueVersion>false</uniqueVersion> | ||
| <name>ObjectWeb Maven 2.0 Snapshot Repository</name> | ||
| <url>dav:https://maven.forge.objectweb.org:8002/maven2-snapshot/</url> | ||
| <layout>default</layout> | ||
| </snapshotRepository> | ||
| </distributionManagement> | ||
| </project> |
| @@ -0,0 +1,21 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM Tree</name> | ||
| <artifactId>asm-tree</artifactId> | ||
| <packaging>jar</packaging> | ||
| <dependencies> | ||
| <dependency> | ||
| <artifactId>asm</artifactId> | ||
| <groupId>asm</groupId> | ||
| </dependency> | ||
| </dependencies> | ||
| </project> |
| @@ -0,0 +1,21 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM Util</name> | ||
| <artifactId>asm-util</artifactId> | ||
| <packaging>jar</packaging> | ||
| <dependencies> | ||
| <dependency> | ||
| <artifactId>asm-tree</artifactId> | ||
| <groupId>asm</groupId> | ||
| </dependency> | ||
| </dependencies> | ||
| </project> |
| @@ -0,0 +1,21 @@ | ||
| <project> | ||
| <modelVersion>4.0.0</modelVersion> | ||
| <parent> | ||
| <artifactId>asm-parent</artifactId> | ||
| <groupId>asm</groupId> | ||
| <version>3.2</version> | ||
| </parent> | ||
| <name>ASM XML</name> | ||
| <artifactId>asm-xml</artifactId> | ||
| <packaging>jar</packaging> | ||
| <dependencies> | ||
| <dependency> | ||
| <artifactId>asm-util</artifactId> | ||
| <groupId>asm</groupId> | ||
| </dependency> | ||
| </dependencies> | ||
| </project> |
| @@ -0,0 +1,202 @@ | ||
| Apache License | ||
| Version 2.0, January 2004 | ||
| http://www.apache.org/licenses/ | ||
| TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
| 1. Definitions. | ||
| "License" shall mean the terms and conditions for use, reproduction, | ||
| and distribution as defined by Sections 1 through 9 of this document. | ||
| "Licensor" shall mean the copyright owner or entity authorized by | ||
| the copyright owner that is granting the License. | ||
| "Legal Entity" shall mean the union of the acting entity and all | ||
| other entities that control, are controlled by, or are under common | ||
| control with that entity. For the purposes of this definition, | ||
| "control" means (i) the power, direct or indirect, to cause the | ||
| direction or management of such entity, whether by contract or | ||
| otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
| outstanding shares, or (iii) beneficial ownership of such entity. | ||
| "You" (or "Your") shall mean an individual or Legal Entity | ||
| exercising permissions granted by this License. | ||
| "Source" form shall mean the preferred form for making modifications, | ||
| including but not limited to software source code, documentation | ||
| source, and configuration files. | ||
| "Object" form shall mean any form resulting from mechanical | ||
| transformation or translation of a Source form, including but | ||
| not limited to compiled object code, generated documentation, | ||
| and conversions to other media types. | ||
| "Work" shall mean the work of authorship, whether in Source or | ||
| Object form, made available under the License, as indicated by a | ||
| copyright notice that is included in or attached to the work | ||
| (an example is provided in the Appendix below). | ||
| "Derivative Works" shall mean any work, whether in Source or Object | ||
| form, that is based on (or derived from) the Work and for which the | ||
| editorial revisions, annotations, elaborations, or other modifications | ||
| represent, as a whole, an original work of authorship. For the purposes | ||
| of this License, Derivative Works shall not include works that remain | ||
| separable from, or merely link (or bind by name) to the interfaces of, | ||
| the Work and Derivative Works thereof. | ||
| "Contribution" shall mean any work of authorship, including | ||
| the original version of the Work and any modifications or additions | ||
| to that Work or Derivative Works thereof, that is intentionally | ||
| submitted to Licensor for inclusion in the Work by the copyright owner | ||
| or by an individual or Legal Entity authorized to submit on behalf of | ||
| the copyright owner. For the purposes of this definition, "submitted" | ||
| means any form of electronic, verbal, or written communication sent | ||
| to the Licensor or its representatives, including but not limited to | ||
| communication on electronic mailing lists, source code control systems, | ||
| and issue tracking systems that are managed by, or on behalf of, the | ||
| Licensor for the purpose of discussing and improving the Work, but | ||
| excluding communication that is conspicuously marked or otherwise | ||
| designated in writing by the copyright owner as "Not a Contribution." | ||
| "Contributor" shall mean Licensor and any individual or Legal Entity | ||
| on behalf of whom a Contribution has been received by Licensor and | ||
| subsequently incorporated within the Work. | ||
| 2. Grant of Copyright License. Subject to the terms and conditions of | ||
| this License, each Contributor hereby grants to You a perpetual, | ||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| copyright license to reproduce, prepare Derivative Works of, | ||
| publicly display, publicly perform, sublicense, and distribute the | ||
| Work and such Derivative Works in Source or Object form. | ||
| 3. Grant of Patent License. Subject to the terms and conditions of | ||
| this License, each Contributor hereby grants to You a perpetual, | ||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| (except as stated in this section) patent license to make, have made, | ||
| use, offer to sell, sell, import, and otherwise transfer the Work, | ||
| where such license applies only to those patent claims licensable | ||
| by such Contributor that are necessarily infringed by their | ||
| Contribution(s) alone or by combination of their Contribution(s) | ||
| with the Work to which such Contribution(s) was submitted. If You | ||
| institute patent litigation against any entity (including a | ||
| cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
| or a Contribution incorporated within the Work constitutes direct | ||
| or contributory patent infringement, then any patent licenses | ||
| granted to You under this License for that Work shall terminate | ||
| as of the date such litigation is filed. | ||
| 4. Redistribution. You may reproduce and distribute copies of the | ||
| Work or Derivative Works thereof in any medium, with or without | ||
| modifications, and in Source or Object form, provided that You | ||
| meet the following conditions: | ||
| (a) You must give any other recipients of the Work or | ||
| Derivative Works a copy of this License; and | ||
| (b) You must cause any modified files to carry prominent notices | ||
| stating that You changed the files; and | ||
| (c) You must retain, in the Source form of any Derivative Works | ||
| that You distribute, all copyright, patent, trademark, and | ||
| attribution notices from the Source form of the Work, | ||
| excluding those notices that do not pertain to any part of | ||
| the Derivative Works; and | ||
| (d) If the Work includes a "NOTICE" text file as part of its | ||
| distribution, then any Derivative Works that You distribute must | ||
| include a readable copy of the attribution notices contained | ||
| within such NOTICE file, excluding those notices that do not | ||
| pertain to any part of the Derivative Works, in at least one | ||
| of the following places: within a NOTICE text file distributed | ||
| as part of the Derivative Works; within the Source form or | ||
| documentation, if provided along with the Derivative Works; or, | ||
| within a display generated by the Derivative Works, if and | ||
| wherever such third-party notices normally appear. The contents | ||
| of the NOTICE file are for informational purposes only and | ||
| do not modify the License. You may add Your own attribution | ||
| notices within Derivative Works that You distribute, alongside | ||
| or as an addendum to the NOTICE text from the Work, provided | ||
| that such additional attribution notices cannot be construed | ||
| as modifying the License. | ||
| You may add Your own copyright statement to Your modifications and | ||
| may provide additional or different license terms and conditions | ||
| for use, reproduction, or distribution of Your modifications, or | ||
| for any such Derivative Works as a whole, provided Your use, | ||
| reproduction, and distribution of the Work otherwise complies with | ||
| the conditions stated in this License. | ||
| 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
| any Contribution intentionally submitted for inclusion in the Work | ||
| by You to the Licensor shall be under the terms and conditions of | ||
| this License, without any additional terms or conditions. | ||
| Notwithstanding the above, nothing herein shall supersede or modify | ||
| the terms of any separate license agreement you may have executed | ||
| with Licensor regarding such Contributions. | ||
| 6. Trademarks. This License does not grant permission to use the trade | ||
| names, trademarks, service marks, or product names of the Licensor, | ||
| except as required for reasonable and customary use in describing the | ||
| origin of the Work and reproducing the content of the NOTICE file. | ||
| 7. Disclaimer of Warranty. Unless required by applicable law or | ||
| agreed to in writing, Licensor provides the Work (and each | ||
| Contributor provides its Contributions) on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
| implied, including, without limitation, any warranties or conditions | ||
| of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
| PARTICULAR PURPOSE. You are solely responsible for determining the | ||
| appropriateness of using or redistributing the Work and assume any | ||
| risks associated with Your exercise of permissions under this License. | ||
| 8. Limitation of Liability. In no event and under no legal theory, | ||
| whether in tort (including negligence), contract, or otherwise, | ||
| unless required by applicable law (such as deliberate and grossly | ||
| negligent acts) or agreed to in writing, shall any Contributor be | ||
| liable to You for damages, including any direct, indirect, special, | ||
| incidental, or consequential damages of any character arising as a | ||
| result of this License or out of the use or inability to use the | ||
| Work (including but not limited to damages for loss of goodwill, | ||
| work stoppage, computer failure or malfunction, or any and all | ||
| other commercial damages or losses), even if such Contributor | ||
| has been advised of the possibility of such damages. | ||
| 9. Accepting Warranty or Additional Liability. While redistributing | ||
| the Work or Derivative Works thereof, You may choose to offer, | ||
| and charge a fee for, acceptance of support, warranty, indemnity, | ||
| or other liability obligations and/or rights consistent with this | ||
| License. However, in accepting such obligations, You may act only | ||
| on Your own behalf and on Your sole responsibility, not on behalf | ||
| of any other Contributor, and only if You agree to indemnify, | ||
| defend, and hold each Contributor harmless for any liability | ||
| incurred by, or claims asserted against, such Contributor by reason | ||
| of your accepting any such warranty or additional liability. | ||
| END OF TERMS AND CONDITIONS | ||
| APPENDIX: How to apply the Apache License to your work. | ||
| To apply the Apache License to your work, attach the following | ||
| boilerplate notice, with the fields enclosed by brackets "[]" | ||
| replaced with your own identifying information. (Don't include | ||
| the brackets!) The text should be enclosed in the appropriate | ||
| comment syntax for the file format. We also recommend that a | ||
| file or class name and description of purpose be included on the | ||
| same "printed page" as the copyright notice for easier | ||
| identification within third-party archives. | ||
| Copyright [yyyy] [name of copyright owner] | ||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
| you may not use this file except in compliance with the License. | ||
| You may obtain a copy of the License at | ||
| http://www.apache.org/licenses/LICENSE-2.0 | ||
| Unless required by applicable law or agreed to in writing, software | ||
| distributed under the License is distributed on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. |
| @@ -0,0 +1,244 @@ | ||
| Apache License | ||
| Version 2.0, January 2004 | ||
| http://www.apache.org/licenses/ | ||
| TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
| 1. Definitions. | ||
| "License" shall mean the terms and conditions for use, reproduction, | ||
| and distribution as defined by Sections 1 through 9 of this document. | ||
| "Licensor" shall mean the copyright owner or entity authorized by | ||
| the copyright owner that is granting the License. | ||
| "Legal Entity" shall mean the union of the acting entity and all | ||
| other entities that control, are controlled by, or are under common | ||
| control with that entity. For the purposes of this definition, | ||
| "control" means (i) the power, direct or indirect, to cause the | ||
| direction or management of such entity, whether by contract or | ||
| otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
| outstanding shares, or (iii) beneficial ownership of such entity. | ||
| "You" (or "Your") shall mean an individual or Legal Entity | ||
| exercising permissions granted by this License. | ||
| "Source" form shall mean the preferred form for making modifications, | ||
| including but not limited to software source code, documentation | ||
| source, and configuration files. | ||
| "Object" form shall mean any form resulting from mechanical | ||
| transformation or translation of a Source form, including but | ||
| not limited to compiled object code, generated documentation, | ||
| and conversions to other media types. | ||
| "Work" shall mean the work of authorship, whether in Source or | ||
| Object form, made available under the License, as indicated by a | ||
| copyright notice that is included in or attached to the work | ||
| (an example is provided in the Appendix below). | ||
| "Derivative Works" shall mean any work, whether in Source or Object | ||
| form, that is based on (or derived from) the Work and for which the | ||
| editorial revisions, annotations, elaborations, or other modifications | ||
| represent, as a whole, an original work of authorship. For the purposes | ||
| of this License, Derivative Works shall not include works that remain | ||
| separable from, or merely link (or bind by name) to the interfaces of, | ||
| the Work and Derivative Works thereof. | ||
| "Contribution" shall mean any work of authorship, including | ||
| the original version of the Work and any modifications or additions | ||
| to that Work or Derivative Works thereof, that is intentionally | ||
| submitted to Licensor for inclusion in the Work by the copyright owner | ||
| or by an individual or Legal Entity authorized to submit on behalf of | ||
| the copyright owner. For the purposes of this definition, "submitted" | ||
| means any form of electronic, verbal, or written communication sent | ||
| to the Licensor or its representatives, including but not limited to | ||
| communication on electronic mailing lists, source code control systems, | ||
| and issue tracking systems that are managed by, or on behalf of, the | ||
| Licensor for the purpose of discussing and improving the Work, but | ||
| excluding communication that is conspicuously marked or otherwise | ||
| designated in writing by the copyright owner as "Not a Contribution." | ||
| "Contributor" shall mean Licensor and any individual or Legal Entity | ||
| on behalf of whom a Contribution has been received by Licensor and | ||
| subsequently incorporated within the Work. | ||
| 2. Grant of Copyright License. Subject to the terms and conditions of | ||
| this License, each Contributor hereby grants to You a perpetual, | ||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| copyright license to reproduce, prepare Derivative Works of, | ||
| publicly display, publicly perform, sublicense, and distribute the | ||
| Work and such Derivative Works in Source or Object form. | ||
| 3. Grant of Patent License. Subject to the terms and conditions of | ||
| this License, each Contributor hereby grants to You a perpetual, | ||
| worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
| (except as stated in this section) patent license to make, have made, | ||
| use, offer to sell, sell, import, and otherwise transfer the Work, | ||
| where such license applies only to those patent claims licensable | ||
| by such Contributor that are necessarily infringed by their | ||
| Contribution(s) alone or by combination of their Contribution(s) | ||
| with the Work to which such Contribution(s) was submitted. If You | ||
| institute patent litigation against any entity (including a | ||
| cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
| or a Contribution incorporated within the Work constitutes direct | ||
| or contributory patent infringement, then any patent licenses | ||
| granted to You under this License for that Work shall terminate | ||
| as of the date such litigation is filed. | ||
| 4. Redistribution. You may reproduce and distribute copies of the | ||
| Work or Derivative Works thereof in any medium, with or without | ||
| modifications, and in Source or Object form, provided that You | ||
| meet the following conditions: | ||
| (a) You must give any other recipients of the Work or | ||
| Derivative Works a copy of this License; and | ||
| (b) You must cause any modified files to carry prominent notices | ||
| stating that You changed the files; and | ||
| (c) You must retain, in the Source form of any Derivative Works | ||
| that You distribute, all copyright, patent, trademark, and | ||
| attribution notices from the Source form of the Work, | ||
| excluding those notices that do not pertain to any part of | ||
| the Derivative Works; and | ||
| (d) If the Work includes a "NOTICE" text file as part of its | ||
| distribution, then any Derivative Works that You distribute must | ||
| include a readable copy of the attribution notices contained | ||
| within such NOTICE file, excluding those notices that do not | ||
| pertain to any part of the Derivative Works, in at least one | ||
| of the following places: within a NOTICE text file distributed | ||
| as part of the Derivative Works; within the Source form or | ||
| documentation, if provided along with the Derivative Works; or, | ||
| within a display generated by the Derivative Works, if and | ||
| wherever such third-party notices normally appear. The contents | ||
| of the NOTICE file are for informational purposes only and | ||
| do not modify the License. You may add Your own attribution | ||
| notices within Derivative Works that You distribute, alongside | ||
| or as an addendum to the NOTICE text from the Work, provided | ||
| that such additional attribution notices cannot be construed | ||
| as modifying the License. | ||
| You may add Your own copyright statement to Your modifications and | ||
| may provide additional or different license terms and conditions | ||
| for use, reproduction, or distribution of Your modifications, or | ||
| for any such Derivative Works as a whole, provided Your use, | ||
| reproduction, and distribution of the Work otherwise complies with | ||
| the conditions stated in this License. | ||
| 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
| any Contribution intentionally submitted for inclusion in the Work | ||
| by You to the Licensor shall be under the terms and conditions of | ||
| this License, without any additional terms or conditions. | ||
| Notwithstanding the above, nothing herein shall supersede or modify | ||
| the terms of any separate license agreement you may have executed | ||
| with Licensor regarding such Contributions. | ||
| 6. Trademarks. This License does not grant permission to use the trade | ||
| names, trademarks, service marks, or product names of the Licensor, | ||
| except as required for reasonable and customary use in describing the | ||
| origin of the Work and reproducing the content of the NOTICE file. | ||
| 7. Disclaimer of Warranty. Unless required by applicable law or | ||
| agreed to in writing, Licensor provides the Work (and each | ||
| Contributor provides its Contributions) on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
| implied, including, without limitation, any warranties or conditions | ||
| of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
| PARTICULAR PURPOSE. You are solely responsible for determining the | ||
| appropriateness of using or redistributing the Work and assume any | ||
| risks associated with Your exercise of permissions under this License. | ||
| 8. Limitation of Liability. In no event and under no legal theory, | ||
| whether in tort (including negligence), contract, or otherwise, | ||
| unless required by applicable law (such as deliberate and grossly | ||
| negligent acts) or agreed to in writing, shall any Contributor be | ||
| liable to You for damages, including any direct, indirect, special, | ||
| incidental, or consequential damages of any character arising as a | ||
| result of this License or out of the use or inability to use the | ||
| Work (including but not limited to damages for loss of goodwill, | ||
| work stoppage, computer failure or malfunction, or any and all | ||
| other commercial damages or losses), even if such Contributor | ||
| has been advised of the possibility of such damages. | ||
| 9. Accepting Warranty or Additional Liability. While redistributing | ||
| the Work or Derivative Works thereof, You may choose to offer, | ||
| and charge a fee for, acceptance of support, warranty, indemnity, | ||
| or other liability obligations and/or rights consistent with this | ||
| License. However, in accepting such obligations, You may act only | ||
| on Your own behalf and on Your sole responsibility, not on behalf | ||
| of any other Contributor, and only if You agree to indemnify, | ||
| defend, and hold each Contributor harmless for any liability | ||
| incurred by, or claims asserted against, such Contributor by reason | ||
| of your accepting any such warranty or additional liability. | ||
| END OF TERMS AND CONDITIONS | ||
| APPENDIX: How to apply the Apache License to your work. | ||
| To apply the Apache License to your work, attach the following | ||
| boilerplate notice, with the fields enclosed by brackets "[]" | ||
| replaced with your own identifying information. (Don't include | ||
| the brackets!) The text should be enclosed in the appropriate | ||
| comment syntax for the file format. We also recommend that a | ||
| file or class name and description of purpose be included on the | ||
| same "printed page" as the copyright notice for easier | ||
| identification within third-party archives. | ||
| Copyright [yyyy] [name of copyright owner] | ||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
| you may not use this file except in compliance with the License. | ||
| You may obtain a copy of the License at | ||
| http://www.apache.org/licenses/LICENSE-2.0 | ||
| Unless required by applicable law or agreed to in writing, software | ||
| distributed under the License is distributed on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. | ||
| APACHE HADOOP SUBCOMPONENTS: | ||
| The Apache Hadoop project contains subcomponents with separate copyright | ||
| notices and license terms. Your use of the source code for the these | ||
| subcomponents is subject to the terms and conditions of the following | ||
| licenses. | ||
| For the org.apache.hadoop.util.bloom.* classes: | ||
| /** | ||
| * | ||
| * Copyright (c) 2005, European Commission project OneLab under contract | ||
| * 034819 (http://www.one-lab.org) | ||
| * All rights reserved. | ||
| * Redistribution and use in source and binary forms, with or | ||
| * without modification, are permitted provided that the following | ||
| * conditions are met: | ||
| * - Redistributions of source code must retain the above copyright | ||
| * notice, this list of conditions and the following disclaimer. | ||
| * - Redistributions in binary form must reproduce the above copyright | ||
| * notice, this list of conditions and the following disclaimer in | ||
| * the documentation and/or other materials provided with the distribution. | ||
| * - Neither the name of the University Catholique de Louvain - UCL | ||
| * nor the names of its contributors may be used to endorse or | ||
| * promote products derived from this software without specific prior | ||
| * written permission. | ||
| * | ||
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
| * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
| * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
| * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
| * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
| * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
| * POSSIBILITY OF SUCH DAMAGE. | ||
| */ |
| @@ -0,0 +1,2 @@ | ||
| This product includes software developed by The Apache Software | ||
| Foundation (http://www.apache.org/). |
| @@ -0,0 +1,31 @@ | ||
| For the latest information about Hadoop, please visit our website at: | ||
| http://hadoop.apache.org/core/ | ||
| and our wiki, at: | ||
| http://wiki.apache.org/hadoop/ | ||
| This distribution includes cryptographic software. The country in | ||
| which you currently reside may have restrictions on the import, | ||
| possession, use, and/or re-export to another country, of | ||
| encryption software. BEFORE using any encryption software, please | ||
| check your country's laws, regulations and policies concerning the | ||
| import, possession, or use, and re-export of encryption software, to | ||
| see if this is permitted. See <http://www.wassenaar.org/> for more | ||
| information. | ||
| The U.S. Government Department of Commerce, Bureau of Industry and | ||
| Security (BIS), has classified this software as Export Commodity | ||
| Control Number (ECCN) 5D002.C.1, which includes information security | ||
| software using or performing cryptographic functions with asymmetric | ||
| algorithms. The form and manner of this Apache Software Foundation | ||
| distribution makes it eligible for export under the License Exception | ||
| ENC Technology Software Unrestricted (TSU) exception (see the BIS | ||
| Export Administration Regulations, Section 740.13) for both object | ||
| code and source code. | ||
| The following provides more details on the included cryptographic | ||
| software: | ||
| Hadoop Core uses the SSL libraries from the Jetty project written | ||
| by mortbay.org. |
| @@ -0,0 +1,289 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # The Hadoop command script | ||
| # | ||
| # Environment Variables | ||
| # | ||
| # JAVA_HOME The java implementation to use. Overrides JAVA_HOME. | ||
| # | ||
| # HADOOP_CLASSPATH Extra Java CLASSPATH entries. | ||
| # | ||
| # HADOOP_HEAPSIZE The maximum amount of heap to use, in MB. | ||
| # Default is 1000. | ||
| # | ||
| # HADOOP_OPTS Extra Java runtime options. | ||
| # | ||
| # HADOOP_NAMENODE_OPTS These options are added to HADOOP_OPTS | ||
| # HADOOP_CLIENT_OPTS when the respective command is run. | ||
| # HADOOP_{COMMAND}_OPTS etc HADOOP_JT_OPTS applies to JobTracker | ||
| # for e.g. HADOOP_CLIENT_OPTS applies to | ||
| # more than one command (fs, dfs, fsck, | ||
| # dfsadmin etc) | ||
| # | ||
| # HADOOP_CONF_DIR Alternate conf dir. Default is ${HADOOP_HOME}/conf. | ||
| # | ||
| # HADOOP_ROOT_LOGGER The root appender. Default is INFO,console | ||
| # | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| cygwin=false | ||
| case "`uname`" in | ||
| CYGWIN*) cygwin=true;; | ||
| esac | ||
| # if no args specified, show usage | ||
| if [ $# = 0 ]; then | ||
| echo "Usage: hadoop [--config confdir] COMMAND" | ||
| echo "where COMMAND is one of:" | ||
| echo " namenode -format format the DFS filesystem" | ||
| echo " secondarynamenode run the DFS secondary namenode" | ||
| echo " namenode run the DFS namenode" | ||
| echo " datanode run a DFS datanode" | ||
| echo " dfsadmin run a DFS admin client" | ||
| echo " mradmin run a Map-Reduce admin client" | ||
| echo " fsck run a DFS filesystem checking utility" | ||
| echo " fs run a generic filesystem user client" | ||
| echo " balancer run a cluster balancing utility" | ||
| echo " jobtracker run the MapReduce job Tracker node" | ||
| echo " pipes run a Pipes job" | ||
| echo " tasktracker run a MapReduce task Tracker node" | ||
| echo " job manipulate MapReduce jobs" | ||
| echo " queue get information regarding JobQueues" | ||
| echo " version print the version" | ||
| echo " jar <jar> run a jar file" | ||
| echo " distcp <srcurl> <desturl> copy file or directories recursively" | ||
| echo " archive -archiveName NAME <src>* <dest> create a hadoop archive" | ||
| echo " daemonlog get/set the log level for each daemon" | ||
| echo " or" | ||
| echo " CLASSNAME run the class named CLASSNAME" | ||
| echo "Most commands print help when invoked w/o parameters." | ||
| exit 1 | ||
| fi | ||
| # get arguments | ||
| COMMAND=$1 | ||
| shift | ||
| if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then | ||
| . "${HADOOP_CONF_DIR}/hadoop-env.sh" | ||
| fi | ||
| # some Java parameters | ||
| if [ "$JAVA_HOME" != "" ]; then | ||
| #echo "run java in $JAVA_HOME" | ||
| JAVA_HOME=$JAVA_HOME | ||
| fi | ||
| if [ "$JAVA_HOME" = "" ]; then | ||
| echo "Error: JAVA_HOME is not set." | ||
| exit 1 | ||
| fi | ||
| JAVA=$JAVA_HOME/bin/java | ||
| JAVA_HEAP_MAX=-Xmx1000m | ||
| # check envvars which might override default args | ||
| if [ "$HADOOP_HEAPSIZE" != "" ]; then | ||
| #echo "run with heapsize $HADOOP_HEAPSIZE" | ||
| JAVA_HEAP_MAX="-Xmx""$HADOOP_HEAPSIZE""m" | ||
| #echo $JAVA_HEAP_MAX | ||
| fi | ||
| # CLASSPATH initially contains $HADOOP_CONF_DIR | ||
| CLASSPATH="${HADOOP_CONF_DIR}" | ||
| CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar | ||
| # for developers, add Hadoop classes to CLASSPATH | ||
| if [ -d "$HADOOP_HOME/build/classes" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/classes | ||
| fi | ||
| if [ -d "$HADOOP_HOME/build/webapps" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build | ||
| fi | ||
| if [ -d "$HADOOP_HOME/build/test/classes" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/test/classes | ||
| fi | ||
| if [ -d "$HADOOP_HOME/build/tools" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/tools | ||
| fi | ||
| # so that filenames w/ spaces are handled correctly in loops below | ||
| IFS= | ||
| # for releases, add core hadoop jar & webapps to CLASSPATH | ||
| if [ -d "$HADOOP_HOME/webapps" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME | ||
| fi | ||
| for f in $HADOOP_HOME/hadoop-*-core.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| # add libs to CLASSPATH | ||
| for f in $HADOOP_HOME/lib/*.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| if [ -d "$HADOOP_HOME/build/ivy/lib/Hadoop/common" ]; then | ||
| for f in $HADOOP_HOME/build/ivy/lib/Hadoop/common/*.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| fi | ||
| for f in $HADOOP_HOME/lib/jsp-2.1/*.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| for f in $HADOOP_HOME/hadoop-*-tools.jar; do | ||
| TOOL_PATH=${TOOL_PATH}:$f; | ||
| done | ||
| for f in $HADOOP_HOME/build/hadoop-*-tools.jar; do | ||
| TOOL_PATH=${TOOL_PATH}:$f; | ||
| done | ||
| # add user-specified CLASSPATH last | ||
| if [ "$HADOOP_CLASSPATH" != "" ]; then | ||
| CLASSPATH=${CLASSPATH}:${HADOOP_CLASSPATH} | ||
| fi | ||
| # default log directory & file | ||
| if [ "$HADOOP_LOG_DIR" = "" ]; then | ||
| HADOOP_LOG_DIR="$HADOOP_HOME/logs" | ||
| fi | ||
| if [ "$HADOOP_LOGFILE" = "" ]; then | ||
| HADOOP_LOGFILE='hadoop.log' | ||
| fi | ||
| # default policy file for service-level authorization | ||
| if [ "$HADOOP_POLICYFILE" = "" ]; then | ||
| HADOOP_POLICYFILE="hadoop-policy.xml" | ||
| fi | ||
| # restore ordinary behaviour | ||
| unset IFS | ||
| # figure out which class to run | ||
| if [ "$COMMAND" = "namenode" ] ; then | ||
| CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode' | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS" | ||
| elif [ "$COMMAND" = "secondarynamenode" ] ; then | ||
| CLASS='org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode' | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_SECONDARYNAMENODE_OPTS" | ||
| elif [ "$COMMAND" = "datanode" ] ; then | ||
| CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode' | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_DATANODE_OPTS" | ||
| elif [ "$COMMAND" = "fs" ] ; then | ||
| CLASS=org.apache.hadoop.fs.FsShell | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "dfs" ] ; then | ||
| CLASS=org.apache.hadoop.fs.FsShell | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "dfsadmin" ] ; then | ||
| CLASS=org.apache.hadoop.hdfs.tools.DFSAdmin | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "mradmin" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.tools.MRAdmin | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "fsck" ] ; then | ||
| CLASS=org.apache.hadoop.hdfs.tools.DFSck | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "balancer" ] ; then | ||
| CLASS=org.apache.hadoop.hdfs.server.balancer.Balancer | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_BALANCER_OPTS" | ||
| elif [ "$COMMAND" = "jobtracker" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.JobTracker | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_JOBTRACKER_OPTS" | ||
| elif [ "$COMMAND" = "tasktracker" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.TaskTracker | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_TASKTRACKER_OPTS" | ||
| elif [ "$COMMAND" = "job" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.JobClient | ||
| elif [ "$COMMAND" = "queue" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.JobQueueClient | ||
| elif [ "$COMMAND" = "pipes" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.pipes.Submitter | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "version" ] ; then | ||
| CLASS=org.apache.hadoop.util.VersionInfo | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "jar" ] ; then | ||
| CLASS=org.apache.hadoop.util.RunJar | ||
| elif [ "$COMMAND" = "distcp" ] ; then | ||
| CLASS=org.apache.hadoop.tools.DistCp | ||
| CLASSPATH=${CLASSPATH}:${TOOL_PATH} | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "daemonlog" ] ; then | ||
| CLASS=org.apache.hadoop.log.LogLevel | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "archive" ] ; then | ||
| CLASS=org.apache.hadoop.tools.HadoopArchives | ||
| CLASSPATH=${CLASSPATH}:${TOOL_PATH} | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| elif [ "$COMMAND" = "sampler" ] ; then | ||
| CLASS=org.apache.hadoop.mapred.lib.InputSampler | ||
| HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS" | ||
| else | ||
| CLASS=$COMMAND | ||
| fi | ||
| # cygwin path translation | ||
| if $cygwin; then | ||
| CLASSPATH=`cygpath -p -w "$CLASSPATH"` | ||
| HADOOP_HOME=`cygpath -w "$HADOOP_HOME"` | ||
| HADOOP_LOG_DIR=`cygpath -w "$HADOOP_LOG_DIR"` | ||
| TOOL_PATH=`cygpath -p -w "$TOOL_PATH"` | ||
| fi | ||
| # setup 'java.library.path' for native-hadoop code if necessary | ||
| JAVA_LIBRARY_PATH='' | ||
| if [ -d "${HADOOP_HOME}/build/native" -o -d "${HADOOP_HOME}/lib/native" ]; then | ||
| JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"` | ||
| if [ -d "$HADOOP_HOME/build/native" ]; then | ||
| JAVA_LIBRARY_PATH=${HADOOP_HOME}/build/native/${JAVA_PLATFORM}/lib | ||
| fi | ||
| if [ -d "${HADOOP_HOME}/lib/native" ]; then | ||
| if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then | ||
| JAVA_LIBRARY_PATH=${JAVA_LIBRARY_PATH}:${HADOOP_HOME}/lib/native/${JAVA_PLATFORM} | ||
| else | ||
| JAVA_LIBRARY_PATH=${HADOOP_HOME}/lib/native/${JAVA_PLATFORM} | ||
| fi | ||
| fi | ||
| fi | ||
| # cygwin path translation | ||
| if $cygwin; then | ||
| JAVA_LIBRARY_PATH=`cygpath -p "$JAVA_LIBRARY_PATH"` | ||
| fi | ||
| HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.log.dir=$HADOOP_LOG_DIR" | ||
| HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.log.file=$HADOOP_LOGFILE" | ||
| HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.home.dir=$HADOOP_HOME" | ||
| HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.id.str=$HADOOP_IDENT_STRING" | ||
| HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.root.logger=${HADOOP_ROOT_LOGGER:-INFO,console}" | ||
| if [ "x$JAVA_LIBRARY_PATH" != "x" ]; then | ||
| HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$JAVA_LIBRARY_PATH" | ||
| fi | ||
| HADOOP_OPTS="$HADOOP_OPTS -Dhadoop.policy.file=$HADOOP_POLICYFILE" | ||
| # run it | ||
| exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@" |
| @@ -0,0 +1,68 @@ | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # included in all the hadoop scripts with source command | ||
| # should not be executable directly | ||
| # also should not be passed any arguments, since we need original $* | ||
| # resolve links - $0 may be a softlink | ||
| this="$0" | ||
| while [ -h "$this" ]; do | ||
| ls=`ls -ld "$this"` | ||
| link=`expr "$ls" : '.*-> \(.*\)$'` | ||
| if expr "$link" : '.*/.*' > /dev/null; then | ||
| this="$link" | ||
| else | ||
| this=`dirname "$this"`/"$link" | ||
| fi | ||
| done | ||
| # convert relative path to absolute path | ||
| bin=`dirname "$this"` | ||
| script=`basename "$this"` | ||
| bin=`cd "$bin"; pwd` | ||
| this="$bin/$script" | ||
| # the root of the Hadoop installation | ||
| export HADOOP_HOME=`dirname "$this"`/.. | ||
| #check to see if the conf dir is given as an optional argument | ||
| if [ $# -gt 1 ] | ||
| then | ||
| if [ "--config" = "$1" ] | ||
| then | ||
| shift | ||
| confdir=$1 | ||
| shift | ||
| HADOOP_CONF_DIR=$confdir | ||
| fi | ||
| fi | ||
| # Allow alternate conf dir location. | ||
| HADOOP_CONF_DIR="${HADOOP_CONF_DIR:-$HADOOP_HOME/conf}" | ||
| #check to see it is specified whether to use the slaves or the | ||
| # masters file | ||
| if [ $# -gt 1 ] | ||
| then | ||
| if [ "--hosts" = "$1" ] | ||
| then | ||
| shift | ||
| slavesfile=$1 | ||
| shift | ||
| export HADOOP_SLAVES="${HADOOP_CONF_DIR}/$slavesfile" | ||
| fi | ||
| fi |
| @@ -0,0 +1,143 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Runs a Hadoop command as a daemon. | ||
| # | ||
| # Environment Variables | ||
| # | ||
| # HADOOP_CONF_DIR Alternate conf dir. Default is ${HADOOP_HOME}/conf. | ||
| # HADOOP_LOG_DIR Where log files are stored. PWD by default. | ||
| # HADOOP_MASTER host:path where hadoop code should be rsync'd from | ||
| # HADOOP_PID_DIR The pid files are stored. /tmp by default. | ||
| # HADOOP_IDENT_STRING A string representing this instance of hadoop. $USER by default | ||
| # HADOOP_NICENESS The scheduling priority for daemons. Defaults to 0. | ||
| ## | ||
| usage="Usage: hadoop-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) <hadoop-command> <args...>" | ||
| # if no args specified, show usage | ||
| if [ $# -le 1 ]; then | ||
| echo $usage | ||
| exit 1 | ||
| fi | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # get arguments | ||
| startStop=$1 | ||
| shift | ||
| command=$1 | ||
| shift | ||
| hadoop_rotate_log () | ||
| { | ||
| log=$1; | ||
| num=5; | ||
| if [ -n "$2" ]; then | ||
| num=$2 | ||
| fi | ||
| if [ -f "$log" ]; then # rotate logs | ||
| while [ $num -gt 1 ]; do | ||
| prev=`expr $num - 1` | ||
| [ -f "$log.$prev" ] && mv "$log.$prev" "$log.$num" | ||
| num=$prev | ||
| done | ||
| mv "$log" "$log.$num"; | ||
| fi | ||
| } | ||
| if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then | ||
| . "${HADOOP_CONF_DIR}/hadoop-env.sh" | ||
| fi | ||
| # get log directory | ||
| if [ "$HADOOP_LOG_DIR" = "" ]; then | ||
| export HADOOP_LOG_DIR="$HADOOP_HOME/logs" | ||
| fi | ||
| mkdir -p "$HADOOP_LOG_DIR" | ||
| if [ "$HADOOP_PID_DIR" = "" ]; then | ||
| HADOOP_PID_DIR=/tmp | ||
| fi | ||
| if [ "$HADOOP_IDENT_STRING" = "" ]; then | ||
| export HADOOP_IDENT_STRING="$USER" | ||
| fi | ||
| # some variables | ||
| export HADOOP_LOGFILE=hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.log | ||
| export HADOOP_ROOT_LOGGER="INFO,DRFA" | ||
| log=$HADOOP_LOG_DIR/hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.out | ||
| pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid | ||
| # Set default scheduling priority | ||
| if [ "$HADOOP_NICENESS" = "" ]; then | ||
| export HADOOP_NICENESS=0 | ||
| fi | ||
| case $startStop in | ||
| (start) | ||
| mkdir -p "$HADOOP_PID_DIR" | ||
| if [ -f $pid ]; then | ||
| if kill -0 `cat $pid` > /dev/null 2>&1; then | ||
| echo $command running as process `cat $pid`. Stop it first. | ||
| exit 1 | ||
| fi | ||
| fi | ||
| if [ "$HADOOP_MASTER" != "" ]; then | ||
| echo rsync from $HADOOP_MASTER | ||
| rsync -a -e ssh --delete --exclude=.svn --exclude='logs/*' --exclude='contrib/hod/logs/*' $HADOOP_MASTER/ "$HADOOP_HOME" | ||
| fi | ||
| hadoop_rotate_log $log | ||
| echo starting $command, logging to $log | ||
| cd "$HADOOP_HOME" | ||
| nohup nice -n $HADOOP_NICENESS "$HADOOP_HOME"/bin/hadoop --config $HADOOP_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null & | ||
| echo $! > $pid | ||
| sleep 1; head "$log" | ||
| ;; | ||
| (stop) | ||
| if [ -f $pid ]; then | ||
| if kill -0 `cat $pid` > /dev/null 2>&1; then | ||
| echo stopping $command | ||
| kill `cat $pid` | ||
| else | ||
| echo no $command to stop | ||
| fi | ||
| else | ||
| echo no $command to stop | ||
| fi | ||
| ;; | ||
| (*) | ||
| echo $usage | ||
| exit 1 | ||
| ;; | ||
| esac | ||
| @@ -0,0 +1,34 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Run a Hadoop command on all slave hosts. | ||
| usage="Usage: hadoop-daemons.sh [--config confdir] [--hosts hostlistfile] [start|stop] command args..." | ||
| # if no args specified, show usage | ||
| if [ $# -le 1 ]; then | ||
| echo $usage | ||
| exit 1 | ||
| fi | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . $bin/hadoop-config.sh | ||
| exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_HOME" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@" |
| @@ -0,0 +1,99 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # The Hadoop record compiler | ||
| # | ||
| # Environment Variables | ||
| # | ||
| # JAVA_HOME The java implementation to use. Overrides JAVA_HOME. | ||
| # | ||
| # HADOOP_OPTS Extra Java runtime options. | ||
| # | ||
| # HADOOP_CONF_DIR Alternate conf dir. Default is ${HADOOP_HOME}/conf. | ||
| # | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then | ||
| . "${HADOOP_CONF_DIR}/hadoop-env.sh" | ||
| fi | ||
| # some Java parameters | ||
| if [ "$JAVA_HOME" != "" ]; then | ||
| #echo "run java in $JAVA_HOME" | ||
| JAVA_HOME=$JAVA_HOME | ||
| fi | ||
| if [ "$JAVA_HOME" = "" ]; then | ||
| echo "Error: JAVA_HOME is not set." | ||
| exit 1 | ||
| fi | ||
| JAVA=$JAVA_HOME/bin/java | ||
| JAVA_HEAP_MAX=-Xmx1000m | ||
| # CLASSPATH initially contains $HADOOP_CONF_DIR | ||
| CLASSPATH="${HADOOP_CONF_DIR}" | ||
| CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar | ||
| # for developers, add Hadoop classes to CLASSPATH | ||
| if [ -d "$HADOOP_HOME/build/classes" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/classes | ||
| fi | ||
| if [ -d "$HADOOP_HOME/build/webapps" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build | ||
| fi | ||
| if [ -d "$HADOOP_HOME/build/test/classes" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME/build/test/classes | ||
| fi | ||
| # so that filenames w/ spaces are handled correctly in loops below | ||
| IFS= | ||
| # for releases, add core hadoop jar & webapps to CLASSPATH | ||
| if [ -d "$HADOOP_HOME/webapps" ]; then | ||
| CLASSPATH=${CLASSPATH}:$HADOOP_HOME | ||
| fi | ||
| for f in $HADOOP_HOME/hadoop-*-core.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| # add libs to CLASSPATH | ||
| for f in $HADOOP_HOME/lib/*.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| for f in $HADOOP_HOME/lib/jetty-ext/*.jar; do | ||
| CLASSPATH=${CLASSPATH}:$f; | ||
| done | ||
| # restore ordinary behaviour | ||
| unset IFS | ||
| CLASS='org.apache.hadoop.record.compiler.generated.Rcc' | ||
| # cygwin path translation | ||
| if expr `uname` : 'CYGWIN*' > /dev/null; then | ||
| CLASSPATH=`cygpath -p -w "$CLASSPATH"` | ||
| fi | ||
| # run it | ||
| exec "$JAVA" $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@" |
| @@ -0,0 +1,68 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Run a shell command on all slave hosts. | ||
| # | ||
| # Environment Variables | ||
| # | ||
| # HADOOP_SLAVES File naming remote hosts. | ||
| # Default is ${HADOOP_CONF_DIR}/slaves. | ||
| # HADOOP_CONF_DIR Alternate conf dir. Default is ${HADOOP_HOME}/conf. | ||
| # HADOOP_SLAVE_SLEEP Seconds to sleep between spawning remote commands. | ||
| # HADOOP_SSH_OPTS Options passed to ssh when running remote commands. | ||
| ## | ||
| usage="Usage: slaves.sh [--config confdir] command..." | ||
| # if no args specified, show usage | ||
| if [ $# -le 0 ]; then | ||
| echo $usage | ||
| exit 1 | ||
| fi | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # If the slaves file is specified in the command line, | ||
| # then it takes precedence over the definition in | ||
| # hadoop-env.sh. Save it here. | ||
| HOSTLIST=$HADOOP_SLAVES | ||
| if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then | ||
| . "${HADOOP_CONF_DIR}/hadoop-env.sh" | ||
| fi | ||
| if [ "$HOSTLIST" = "" ]; then | ||
| if [ "$HADOOP_SLAVES" = "" ]; then | ||
| export HOSTLIST="${HADOOP_CONF_DIR}/slaves" | ||
| else | ||
| export HOSTLIST="${HADOOP_SLAVES}" | ||
| fi | ||
| fi | ||
| for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do | ||
| ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \ | ||
| 2>&1 | sed "s/^/$slave: /" & | ||
| if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then | ||
| sleep $HADOOP_SLAVE_SLEEP | ||
| fi | ||
| done | ||
| wait |
| @@ -0,0 +1,30 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Start all hadoop daemons. Run this on master node. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # start dfs daemons | ||
| "$bin"/start-dfs.sh --config $HADOOP_CONF_DIR | ||
| # start mapred daemons | ||
| "$bin"/start-mapred.sh --config $HADOOP_CONF_DIR |
| @@ -0,0 +1,25 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # Start balancer daemon. | ||
| "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start balancer $@ |
| @@ -0,0 +1,52 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Start hadoop dfs daemons. | ||
| # Optinally upgrade or rollback dfs state. | ||
| # Run this on master node. | ||
| usage="Usage: start-dfs.sh [-upgrade|-rollback]" | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # get arguments | ||
| if [ $# -ge 1 ]; then | ||
| nameStartOpt=$1 | ||
| shift | ||
| case $nameStartOpt in | ||
| (-upgrade) | ||
| ;; | ||
| (-rollback) | ||
| dataStartOpt=$nameStartOpt | ||
| ;; | ||
| (*) | ||
| echo $usage | ||
| exit 1 | ||
| ;; | ||
| esac | ||
| fi | ||
| # start dfs daemons | ||
| # start namenode after datanodes, to minimize time namenode is up w/o data | ||
| # note: datanodes will log connection errors until namenode starts | ||
| "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt | ||
| "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt | ||
| "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode |
| @@ -0,0 +1,29 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Start hadoop map reduce daemons. Run this on master node. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # start mapred daemons | ||
| # start jobtracker first to minimize connection errors at startup | ||
| "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start jobtracker | ||
| "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start tasktracker |
| @@ -0,0 +1,27 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Stop all hadoop daemons. Run this on master node. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| "$bin"/stop-mapred.sh --config $HADOOP_CONF_DIR | ||
| "$bin"/stop-dfs.sh --config $HADOOP_CONF_DIR |
| @@ -0,0 +1,26 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| # Stop balancer daemon. | ||
| # Run this on the machine where the balancer is running | ||
| "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR stop balancer |
| @@ -0,0 +1,29 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Stop hadoop DFS daemons. Run this on master node. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR stop namenode | ||
| "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR stop datanode | ||
| "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters stop secondarynamenode | ||
| @@ -0,0 +1,28 @@ | ||
| #!/usr/bin/env bash | ||
| # Licensed to the Apache Software Foundation (ASF) under one or more | ||
| # contributor license agreements. See the NOTICE file distributed with | ||
| # this work for additional information regarding copyright ownership. | ||
| # The ASF licenses this file to You under the Apache License, Version 2.0 | ||
| # (the "License"); you may not use this file except in compliance with | ||
| # the License. You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License. | ||
| # Stop hadoop map reduce daemons. Run this on master node. | ||
| bin=`dirname "$0"` | ||
| bin=`cd "$bin"; pwd` | ||
| . "$bin"/hadoop-config.sh | ||
| "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR stop jobtracker | ||
| "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR stop tasktracker | ||
| @@ -0,0 +1,258 @@ | ||
| /** | ||
| * Licensed to the Apache Software Foundation (ASF) under one | ||
| * or more contributor license agreements. See the NOTICE file | ||
| * distributed with this work for additional information | ||
| * regarding copyright ownership. The ASF licenses this file | ||
| * to you under the Apache License, Version 2.0 (the | ||
| * "License"); you may not use this file except in compliance | ||
| * with the License. You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| #ifndef HADOOP_PIPES_HH | ||
| #define HADOOP_PIPES_HH | ||
| #ifdef SWIG | ||
| %module (directors="1") HadoopPipes | ||
| %include "std_string.i" | ||
| %feature("director") Mapper; | ||
| %feature("director") Reducer; | ||
| %feature("director") Partitioner; | ||
| %feature("director") RecordReader; | ||
| %feature("director") RecordWriter; | ||
| %feature("director") Factory; | ||
| #else | ||
| #include <string> | ||
| #endif | ||
| namespace HadoopPipes { | ||
| /** | ||
| * This interface defines the interface between application code and the | ||
| * foreign code interface to Hadoop Map/Reduce. | ||
| */ | ||
| /** | ||
| * A JobConf defines the properties for a job. | ||
| */ | ||
| class JobConf { | ||
| public: | ||
| virtual bool hasKey(const std::string& key) const = 0; | ||
| virtual const std::string& get(const std::string& key) const = 0; | ||
| virtual int getInt(const std::string& key) const = 0; | ||
| virtual float getFloat(const std::string& key) const = 0; | ||
| virtual bool getBoolean(const std::string&key) const = 0; | ||
| virtual ~JobConf() {} | ||
| }; | ||
| /** | ||
| * Task context provides the information about the task and job. | ||
| */ | ||
| class TaskContext { | ||
| public: | ||
| /** | ||
| * Counter to keep track of a property and its value. | ||
| */ | ||
| class Counter { | ||
| private: | ||
| int id; | ||
| public: | ||
| Counter(int counterId) : id(counterId) {} | ||
| Counter(const Counter& counter) : id(counter.id) {} | ||
| int getId() const { return id; } | ||
| }; | ||
| /** | ||
| * Get the JobConf for the current task. | ||
| */ | ||
| virtual const JobConf* getJobConf() = 0; | ||
| /** | ||
| * Get the current key. | ||
| * @return the current key | ||
| */ | ||
| virtual const std::string& getInputKey() = 0; | ||
| /** | ||
| * Get the current value. | ||
| * @return the current value | ||
| */ | ||
| virtual const std::string& getInputValue() = 0; | ||
| /** | ||
| * Generate an output record | ||
| */ | ||
| virtual void emit(const std::string& key, const std::string& value) = 0; | ||
| /** | ||
| * Mark your task as having made progress without changing the status | ||
| * message. | ||
| */ | ||
| virtual void progress() = 0; | ||
| /** | ||
| * Set the status message and call progress. | ||
| */ | ||
| virtual void setStatus(const std::string& status) = 0; | ||
| /** | ||
| * Register a counter with the given group and name. | ||
| */ | ||
| virtual Counter* | ||
| getCounter(const std::string& group, const std::string& name) = 0; | ||
| /** | ||
| * Increment the value of the counter with the given amount. | ||
| */ | ||
| virtual void incrementCounter(const Counter* counter, uint64_t amount) = 0; | ||
| virtual ~TaskContext() {} | ||
| }; | ||
| class MapContext: public TaskContext { | ||
| public: | ||
| /** | ||
| * Access the InputSplit of the mapper. | ||
| */ | ||
| virtual const std::string& getInputSplit() = 0; | ||
| /** | ||
| * Get the name of the key class of the input to this task. | ||
| */ | ||
| virtual const std::string& getInputKeyClass() = 0; | ||
| /** | ||
| * Get the name of the value class of the input to this task. | ||
| */ | ||
| virtual const std::string& getInputValueClass() = 0; | ||
| }; | ||
| class ReduceContext: public TaskContext { | ||
| public: | ||
| /** | ||
| * Advance to the next value. | ||
| */ | ||
| virtual bool nextValue() = 0; | ||
| }; | ||
| class Closable { | ||
| public: | ||
| virtual void close() {} | ||
| virtual ~Closable() {} | ||
| }; | ||
| /** | ||
| * The application's mapper class to do map. | ||
| */ | ||
| class Mapper: public Closable { | ||
| public: | ||
| virtual void map(MapContext& context) = 0; | ||
| }; | ||
| /** | ||
| * The application's reducer class to do reduce. | ||
| */ | ||
| class Reducer: public Closable { | ||
| public: | ||
| virtual void reduce(ReduceContext& context) = 0; | ||
| }; | ||
| /** | ||
| * User code to decide where each key should be sent. | ||
| */ | ||
| class Partitioner { | ||
| public: | ||
| virtual int partition(const std::string& key, int numOfReduces) = 0; | ||
| virtual ~Partitioner() {} | ||
| }; | ||
| /** | ||
| * For applications that want to read the input directly for the map function | ||
| * they can define RecordReaders in C++. | ||
| */ | ||
| class RecordReader: public Closable { | ||
| public: | ||
| virtual bool next(std::string& key, std::string& value) = 0; | ||
| /** | ||
| * The progress of the record reader through the split as a value between | ||
| * 0.0 and 1.0. | ||
| */ | ||
| virtual float getProgress() = 0; | ||
| }; | ||
| /** | ||
| * An object to write key/value pairs as they are emited from the reduce. | ||
| */ | ||
| class RecordWriter: public Closable { | ||
| public: | ||
| virtual void emit(const std::string& key, | ||
| const std::string& value) = 0; | ||
| }; | ||
| /** | ||
| * A factory to create the necessary application objects. | ||
| */ | ||
| class Factory { | ||
| public: | ||
| virtual Mapper* createMapper(MapContext& context) const = 0; | ||
| virtual Reducer* createReducer(ReduceContext& context) const = 0; | ||
| /** | ||
| * Create a combiner, if this application has one. | ||
| * @return the new combiner or NULL, if one is not needed | ||
| */ | ||
| virtual Reducer* createCombiner(MapContext& context) const { | ||
| return NULL; | ||
| } | ||
| /** | ||
| * Create an application partitioner object. | ||
| * @return the new partitioner or NULL, if the default partitioner should be | ||
| * used. | ||
| */ | ||
| virtual Partitioner* createPartitioner(MapContext& context) const { | ||
| return NULL; | ||
| } | ||
| /** | ||
| * Create an application record reader. | ||
| * @return the new RecordReader or NULL, if the Java RecordReader should be | ||
| * used. | ||
| */ | ||
| virtual RecordReader* createRecordReader(MapContext& context) const { | ||
| return NULL; | ||
| } | ||
| /** | ||
| * Create an application record writer. | ||
| * @return the new RecordWriter or NULL, if the Java RecordWriter should be | ||
| * used. | ||
| */ | ||
| virtual RecordWriter* createRecordWriter(ReduceContext& context) const { | ||
| return NULL; | ||
| } | ||
| virtual ~Factory() {} | ||
| }; | ||
| /** | ||
| * Run the assigned task in the framework. | ||
| * The user's main function should set the various functions using the | ||
| * set* functions above and then call this. | ||
| * @return true, if the task succeeded. | ||
| */ | ||
| bool runTask(const Factory& factory); | ||
| } | ||
| #endif |
| @@ -0,0 +1,169 @@ | ||
| /** | ||
| * Licensed to the Apache Software Foundation (ASF) under one | ||
| * or more contributor license agreements. See the NOTICE file | ||
| * distributed with this work for additional information | ||
| * regarding copyright ownership. The ASF licenses this file | ||
| * to you under the Apache License, Version 2.0 (the | ||
| * "License"); you may not use this file except in compliance | ||
| * with the License. You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| #ifndef HADOOP_SERIAL_UTILS_HH | ||
| #define HADOOP_SERIAL_UTILS_HH | ||
| #include <string> | ||
| namespace HadoopUtils { | ||
| /** | ||
| * A simple exception class that records a message for the user. | ||
| */ | ||
| class Error { | ||
| private: | ||
| std::string error; | ||
| public: | ||
| /** | ||
| * Create an error object with the given message. | ||
| */ | ||
| Error(const std::string& msg); | ||
| /** | ||
| * Construct an error object with the given message that was created on | ||
| * the given file, line, and functino. | ||
| */ | ||
| Error(const std::string& msg, | ||
| const std::string& file, int line, const std::string& function); | ||
| /** | ||
| * Get the error message. | ||
| */ | ||
| const std::string& getMessage() const; | ||
| }; | ||
| /** | ||
| * Check to make sure that the condition is true, and throw an exception | ||
| * if it is not. The exception will contain the message and a description | ||
| * of the source location. | ||
| */ | ||
| #define HADOOP_ASSERT(CONDITION, MESSAGE) \ | ||
| { \ | ||
| if (!(CONDITION)) { \ | ||
| throw HadoopUtils::Error((MESSAGE), __FILE__, __LINE__, \ | ||
| __PRETTY_FUNCTION__); \ | ||
| } \ | ||
| } | ||
| /** | ||
| * An interface for an input stream. | ||
| */ | ||
| class InStream { | ||
| public: | ||
| /** | ||
| * Reads len bytes from the stream into the buffer. | ||
| * @param buf the buffer to read into | ||
| * @param buflen the length of the buffer | ||
| * @throws Error if there are problems reading | ||
| */ | ||
| virtual void read(void *buf, size_t len) = 0; | ||
| virtual ~InStream() {} | ||
| }; | ||
| /** | ||
| * An interface for an output stream. | ||
| */ | ||
| class OutStream { | ||
| public: | ||
| /** | ||
| * Write the given buffer to the stream. | ||
| * @param buf the data to write | ||
| * @param len the number of bytes to write | ||
| * @throws Error if there are problems writing | ||
| */ | ||
| virtual void write(const void *buf, size_t len) = 0; | ||
| /** | ||
| * Flush the data to the underlying store. | ||
| */ | ||
| virtual void flush() = 0; | ||
| virtual ~OutStream() {} | ||
| }; | ||
| /** | ||
| * A class to read a file as a stream. | ||
| */ | ||
| class FileInStream : public InStream { | ||
| public: | ||
| FileInStream(); | ||
| bool open(const std::string& name); | ||
| bool open(FILE* file); | ||
| void read(void *buf, size_t buflen); | ||
| bool skip(size_t nbytes); | ||
| bool close(); | ||
| virtual ~FileInStream(); | ||
| private: | ||
| /** | ||
| * The file to write to. | ||
| */ | ||
| FILE *mFile; | ||
| /** | ||
| * Does is this class responsible for closing the FILE*? | ||
| */ | ||
| bool isOwned; | ||
| }; | ||
| /** | ||
| * A class to write a stream to a file. | ||
| */ | ||
| class FileOutStream: public OutStream { | ||
| public: | ||
| /** | ||
| * Create a stream that isn't bound to anything. | ||
| */ | ||
| FileOutStream(); | ||
| /** | ||
| * Create the given file, potentially overwriting an existing file. | ||
| */ | ||
| bool open(const std::string& name, bool overwrite); | ||
| bool open(FILE* file); | ||
| void write(const void* buf, size_t len); | ||
| bool advance(size_t nbytes); | ||
| void flush(); | ||
| bool close(); | ||
| virtual ~FileOutStream(); | ||
| private: | ||
| FILE *mFile; | ||
| bool isOwned; | ||
| }; | ||
| /** | ||
| * A stream that reads from a string. | ||
| */ | ||
| class StringInStream: public InStream { | ||
| public: | ||
| StringInStream(const std::string& str); | ||
| virtual void read(void *buf, size_t buflen); | ||
| private: | ||
| const std::string& buffer; | ||
| std::string::const_iterator itr; | ||
| }; | ||
| void serializeInt(int32_t t, OutStream& stream); | ||
| int32_t deserializeInt(InStream& stream); | ||
| void serializeLong(int64_t t, OutStream& stream); | ||
| int64_t deserializeLong(InStream& stream); | ||
| void serializeFloat(float t, OutStream& stream); | ||
| float deserializeFloat(InStream& stream); | ||
| void serializeString(const std::string& t, OutStream& stream); | ||
| void deserializeString(std::string& t, InStream& stream); | ||
| } | ||
| #endif |
| @@ -0,0 +1,81 @@ | ||
| /** | ||
| * Licensed to the Apache Software Foundation (ASF) under one | ||
| * or more contributor license agreements. See the NOTICE file | ||
| * distributed with this work for additional information | ||
| * regarding copyright ownership. The ASF licenses this file | ||
| * to you under the Apache License, Version 2.0 (the | ||
| * "License"); you may not use this file except in compliance | ||
| * with the License. You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| #ifndef HADOOP_STRING_UTILS_HH | ||
| #define HADOOP_STRING_UTILS_HH | ||
| #include <stdint.h> | ||
| #include <string> | ||
| #include <vector> | ||
| namespace HadoopUtils { | ||
| /** | ||
| * Convert an integer to a string. | ||
| */ | ||
| std::string toString(int32_t x); | ||
| /** | ||
| * Convert a string to an integer. | ||
| * @throws Error if the string is not a valid integer | ||
| */ | ||
| int32_t toInt(const std::string& val); | ||
| /** | ||
| * Convert the string to a float. | ||
| * @throws Error if the string is not a valid float | ||
| */ | ||
| float toFloat(const std::string& val); | ||
| /** | ||
| * Convert the string to a boolean. | ||
| * @throws Error if the string is not a valid boolean value | ||
| */ | ||
| bool toBool(const std::string& val); | ||
| /** | ||
| * Get the current time in the number of milliseconds since 1970. | ||
| */ | ||
| uint64_t getCurrentMillis(); | ||
| /** | ||
| * Split a string into "words". Multiple deliminators are treated as a single | ||
| * word break, so no zero-length words are returned. | ||
| * @param str the string to split | ||
| * @param separator a list of characters that divide words | ||
| */ | ||
| std::vector<std::string> splitString(const std::string& str, | ||
| const char* separator); | ||
| /** | ||
| * Quote a string to avoid "\", non-printable characters, and the | ||
| * deliminators. | ||
| * @param str the string to quote | ||
| * @param deliminators the set of characters to always quote | ||
| */ | ||
| std::string quoteString(const std::string& str, | ||
| const char* deliminators); | ||
| /** | ||
| * Unquote the given string to return the original string. | ||
| * @param str the string to unquote | ||
| */ | ||
| std::string unquoteString(const std::string& str); | ||
| } | ||
| #endif |
| @@ -0,0 +1,96 @@ | ||
| /** | ||
| * Licensed to the Apache Software Foundation (ASF) under one | ||
| * or more contributor license agreements. See the NOTICE file | ||
| * distributed with this work for additional information | ||
| * regarding copyright ownership. The ASF licenses this file | ||
| * to you under the Apache License, Version 2.0 (the | ||
| * "License"); you may not use this file except in compliance | ||
| * with the License. You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| #ifndef HADOOP_PIPES_TEMPLATE_FACTORY_HH | ||
| #define HADOOP_PIPES_TEMPLATE_FACTORY_HH | ||
| namespace HadoopPipes { | ||
| template <class mapper, class reducer> | ||
| class TemplateFactory2: public Factory { | ||
| public: | ||
| Mapper* createMapper(MapContext& context) const { | ||
| return new mapper(context); | ||
| } | ||
| Reducer* createReducer(ReduceContext& context) const { | ||
| return new reducer(context); | ||
| } | ||
| }; | ||
| template <class mapper, class reducer, class partitioner> | ||
| class TemplateFactory3: public TemplateFactory2<mapper,reducer> { | ||
| public: | ||
| Partitioner* createPartitioner(MapContext& context) const { | ||
| return new partitioner(context); | ||
| } | ||
| }; | ||
| template <class mapper, class reducer> | ||
| class TemplateFactory3<mapper, reducer, void> | ||
| : public TemplateFactory2<mapper,reducer> { | ||
| }; | ||
| template <class mapper, class reducer, class partitioner, class combiner> | ||
| class TemplateFactory4 | ||
| : public TemplateFactory3<mapper,reducer,partitioner>{ | ||
| public: | ||
| Reducer* createCombiner(MapContext& context) const { | ||
| return new combiner(context); | ||
| } | ||
| }; | ||
| template <class mapper, class reducer, class partitioner> | ||
| class TemplateFactory4<mapper,reducer,partitioner,void> | ||
| : public TemplateFactory3<mapper,reducer,partitioner>{ | ||
| }; | ||
| template <class mapper, class reducer, class partitioner, | ||
| class combiner, class recordReader> | ||
| class TemplateFactory5 | ||
| : public TemplateFactory4<mapper,reducer,partitioner,combiner>{ | ||
| public: | ||
| RecordReader* createRecordReader(MapContext& context) const { | ||
| return new recordReader(context); | ||
| } | ||
| }; | ||
| template <class mapper, class reducer, class partitioner,class combiner> | ||
| class TemplateFactory5<mapper,reducer,partitioner,combiner,void> | ||
| : public TemplateFactory4<mapper,reducer,partitioner,combiner>{ | ||
| }; | ||
| template <class mapper, class reducer, class partitioner=void, | ||
| class combiner=void, class recordReader=void, | ||
| class recordWriter=void> | ||
| class TemplateFactory | ||
| : public TemplateFactory5<mapper,reducer,partitioner,combiner,recordReader>{ | ||
| public: | ||
| RecordWriter* createRecordWriter(ReduceContext& context) const { | ||
| return new recordWriter(context); | ||
| } | ||
| }; | ||
| template <class mapper, class reducer, class partitioner, | ||
| class combiner, class recordReader> | ||
| class TemplateFactory<mapper, reducer, partitioner, combiner, recordReader, | ||
| void> | ||
| : public TemplateFactory5<mapper,reducer,partitioner,combiner,recordReader>{ | ||
| }; | ||
| } | ||
| #endif |
| @@ -0,0 +1,258 @@ | ||
| /** | ||
| * Licensed to the Apache Software Foundation (ASF) under one | ||
| * or more contributor license agreements. See the NOTICE file | ||
| * distributed with this work for additional information | ||
| * regarding copyright ownership. The ASF licenses this file | ||
| * to you under the Apache License, Version 2.0 (the | ||
| * "License"); you may not use this file except in compliance | ||
| * with the License. You may obtain a copy of the License at | ||
| * | ||
| * http://www.apache.org/licenses/LICENSE-2.0 | ||
| * | ||
| * Unless required by applicable law or agreed to in writing, software | ||
| * distributed under the License is distributed on an "AS IS" BASIS, | ||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| * See the License for the specific language governing permissions and | ||
| * limitations under the License. | ||
| */ | ||
| #ifndef HADOOP_PIPES_HH | ||
| #define HADOOP_PIPES_HH | ||
| #ifdef SWIG | ||
| %module (directors="1") HadoopPipes | ||
| %include "std_string.i" | ||
| %feature("director") Mapper; | ||
| %feature("director") Reducer; | ||
| %feature("director") Partitioner; | ||
| %feature("director") RecordReader; | ||
| %feature("director") RecordWriter; | ||
| %feature("director") Factory; | ||
| #else | ||
| #include <string> | ||
| #endif | ||
| namespace HadoopPipes { | ||
| /** | ||
| * This interface defines the interface between application code and the | ||
| * foreign code interface to Hadoop Map/Reduce. | ||
| */ | ||
| /** | ||
| * A JobConf defines the properties for a job. | ||
| */ | ||
| class JobConf { | ||
| public: | ||
| virtual bool hasKey(const std::string& key) const = 0; | ||
| virtual const std::string& get(const std::string& key) const = 0; | ||
| virtual int getInt(const std::string& key) const = 0; | ||
| virtual float getFloat(const std::string& key) const = 0; | ||
| virtual bool getBoolean(const std::string&key) const = 0; | ||
| virtual ~JobConf() {} | ||
| }; | ||
| /** | ||
| * Task context provides the information about the task and job. | ||
| */ | ||
| class TaskContext { | ||
| public: | ||
| /** | ||
| * Counter to keep track of a property and its value. | ||
| */ | ||
| class Counter { | ||
| private: | ||
| int id; | ||
| public: | ||
| Counter(int counterId) : id(counterId) {} | ||
| Counter(const Counter& counter) : id(counter.id) {} | ||
| int getId() const { return id; } | ||
| }; | ||
| /** | ||
| * Get the JobConf for the current task. | ||
| */ | ||
| virtual const JobConf* getJobConf() = 0; | ||
| /** | ||
| * Get the current key. | ||
| * @return the current key | ||
| */ | ||
| virtual const std::string& getInputKey() = 0; | ||
| /** | ||
| * Get the current value. | ||
| * @return the current value | ||
| */ | ||
| virtual const std::string& getInputValue() = 0; | ||
| /** | ||
| * Generate an output record | ||
| */ | ||
| virtual void emit(const std::string& key, const std::string& value) = 0; | ||
| /** | ||
| * Mark your task as having made progress without changing the status | ||
| * message. | ||
| */ | ||
| virtual void progress() = 0; | ||
| /** | ||
| * Set the status message and call progress. | ||
| */ | ||
| virtual void setStatus(const std::string& status) = 0; | ||
| /** | ||
| * Register a counter with the given group and name. | ||
| */ | ||
| virtual Counter* | ||
| getCounter(const std::string& group, const std::string& name) = 0; | ||
| /** | ||
| * Increment the value of the counter with the given amount. | ||
| */ | ||
| virtual void incrementCounter(const Counter* counter, uint64_t amount) = 0; | ||
| virtual ~TaskContext() {} | ||
| }; | ||
| class MapContext: public TaskContext { | ||
| public: | ||
| /** | ||
| * Access the InputSplit of the mapper. | ||
| */ | ||
| virtual const std::string& getInputSplit() = 0; | ||
| /** | ||
| * Get the name of the key class of the input to this task. | ||
| */ | ||
| virtual const std::string& getInputKeyClass() = 0; | ||
| /** | ||
| * Get the name of the value class of the input to this task. | ||
| */ | ||
| virtual const std::string& getInputValueClass() = 0; | ||
| }; | ||
| class ReduceContext: public TaskContext { | ||
| public: | ||
| /** | ||
| * Advance to the next value. | ||
| */ | ||
| virtual bool nextValue() = 0; | ||
| }; | ||
| class Closable { | ||
| public: | ||
| virtual void close() {} | ||
| virtual ~Closable() {} | ||
| }; | ||
| /** | ||
| * The application's mapper class to do map. | ||
| */ | ||
| class Mapper: public Closable { | ||
| public: | ||
| virtual void map(MapContext& context) = 0; | ||
| }; | ||
| /** | ||
| * The application's reducer class to do reduce. | ||
| */ | ||
| class Reducer: public Closable { | ||
| public: | ||
| virtual void reduce(ReduceContext& context) = 0; | ||
| }; | ||
| /** | ||
| * User code to decide where each key should be sent. | ||
| */ | ||
| class Partitioner { | ||
| public: | ||
| virtual int partition(const std::string& key, int numOfReduces) = 0; | ||
| virtual ~Partitioner() {} | ||
| }; | ||
| /** | ||
| * For applications that want to read the input directly for the map function | ||
| * they can define RecordReaders in C++. | ||
| */ | ||
| class RecordReader: public Closable { | ||
| public: | ||
| virtual bool next(std::string& key, std::string& value) = 0; | ||
| /** | ||
| * The progress of the record reader through the split as a value between | ||
| * 0.0 and 1.0. | ||
| */ | ||
| virtual float getProgress() = 0; | ||
| }; | ||
| /** | ||
| * An object to write key/value pairs as they are emited from the reduce. | ||
| */ | ||
| class RecordWriter: public Closable { | ||
| public: | ||
| virtual void emit(const std::string& key, | ||
| const std::string& value) = 0; | ||
| }; | ||
| /** | ||
| * A factory to create the necessary application objects. | ||
| */ | ||
| class Factory { | ||
| public: | ||
| virtual Mapper* createMapper(MapContext& context) const = 0; | ||
| virtual Reducer* createReducer(ReduceContext& context) const = 0; | ||
| /** | ||
| * Create a combiner, if this application has one. | ||
| * @return the new combiner or NULL, if one is not needed | ||
| */ | ||
| virtual Reducer* createCombiner(MapContext& context) const { | ||
| return NULL; | ||
| } | ||
| /** | ||
| * Create an application partitioner object. | ||
| * @return the new partitioner or NULL, if the default partitioner should be | ||
| * used. | ||
| */ | ||
| virtual Partitioner* createPartitioner(MapContext& context) const { | ||
| return NULL; | ||
| } | ||
| /** | ||
| * Create an application record reader. | ||
| * @return the new RecordReader or NULL, if the Java RecordReader should be | ||
| * used. | ||
| */ | ||
| virtual RecordReader* createRecordReader(MapContext& context) const { | ||
| return NULL; | ||
| } | ||
| /** | ||
| * Create an application record writer. | ||
| * @return the new RecordWriter or NULL, if the Java RecordWriter should be | ||
| * used. | ||
| */ | ||
| virtual RecordWriter* createRecordWriter(ReduceContext& context) const { | ||
| return NULL; | ||
| } | ||
| virtual ~Factory() {} | ||
| }; | ||
| /** | ||
| * Run the assigned task in the framework. | ||
| * The user's main function should set the various functions using the | ||
| * set* functions above and then call this. | ||
| * @return true, if the task succeeded. | ||
| */ | ||
| bool runTask(const Factory& factory); | ||
| } | ||
| #endif |