embulk-executor-mapreduce 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/build.gradle +2 -0
  3. data/classpath/activation-1.1.jar +0 -0
  4. data/classpath/apacheds-i18n-2.0.0-M15.jar +0 -0
  5. data/classpath/apacheds-kerberos-codec-2.0.0-M15.jar +0 -0
  6. data/classpath/api-asn1-api-1.0.0-M20.jar +0 -0
  7. data/classpath/api-util-1.0.0-M20.jar +0 -0
  8. data/classpath/avro-1.7.4.jar +0 -0
  9. data/classpath/commons-beanutils-1.7.0.jar +0 -0
  10. data/classpath/commons-cli-1.2.jar +0 -0
  11. data/classpath/commons-codec-1.6.jar +0 -0
  12. data/classpath/commons-collections-3.2.1.jar +0 -0
  13. data/classpath/commons-compress-1.4.1.jar +0 -0
  14. data/classpath/commons-configuration-1.6.jar +0 -0
  15. data/classpath/commons-digester-1.8.jar +0 -0
  16. data/classpath/commons-httpclient-3.1.jar +0 -0
  17. data/classpath/commons-io-2.4.jar +0 -0
  18. data/classpath/commons-lang-2.6.jar +0 -0
  19. data/classpath/commons-logging-1.1.3.jar +0 -0
  20. data/classpath/commons-math3-3.1.1.jar +0 -0
  21. data/classpath/commons-net-3.1.jar +0 -0
  22. data/classpath/curator-client-2.6.0.jar +0 -0
  23. data/classpath/curator-framework-2.6.0.jar +0 -0
  24. data/classpath/curator-recipes-2.6.0.jar +0 -0
  25. data/classpath/embulk-executor-mapreduce-0.1.0.jar +0 -0
  26. data/classpath/gson-2.2.4.jar +0 -0
  27. data/classpath/hadoop-annotations-2.6.0.jar +0 -0
  28. data/classpath/hadoop-auth-2.6.0.jar +0 -0
  29. data/classpath/hadoop-client-2.6.0.jar +0 -0
  30. data/classpath/hadoop-common-2.6.0.jar +0 -0
  31. data/classpath/hadoop-hdfs-2.6.0.jar +0 -0
  32. data/classpath/hadoop-mapreduce-client-app-2.6.0.jar +0 -0
  33. data/classpath/hadoop-mapreduce-client-common-2.6.0.jar +0 -0
  34. data/classpath/hadoop-mapreduce-client-core-2.6.0.jar +0 -0
  35. data/classpath/hadoop-mapreduce-client-jobclient-2.6.0.jar +0 -0
  36. data/classpath/hadoop-mapreduce-client-shuffle-2.6.0.jar +0 -0
  37. data/classpath/hadoop-yarn-api-2.6.0.jar +0 -0
  38. data/classpath/hadoop-yarn-client-2.6.0.jar +0 -0
  39. data/classpath/hadoop-yarn-common-2.6.0.jar +0 -0
  40. data/classpath/hadoop-yarn-server-common-2.6.0.jar +0 -0
  41. data/classpath/hadoop-yarn-server-nodemanager-2.6.0.jar +0 -0
  42. data/classpath/htrace-core-3.0.4.jar +0 -0
  43. data/classpath/httpclient-4.2.5.jar +0 -0
  44. data/classpath/httpcore-4.2.4.jar +0 -0
  45. data/classpath/jackson-core-asl-1.9.13.jar +0 -0
  46. data/classpath/jackson-jaxrs-1.9.13.jar +0 -0
  47. data/classpath/jackson-mapper-asl-1.9.13.jar +0 -0
  48. data/classpath/jackson-xc-1.9.13.jar +0 -0
  49. data/classpath/jaxb-api-2.2.2.jar +0 -0
  50. data/classpath/jaxb-impl-2.2.3-1.jar +0 -0
  51. data/classpath/jersey-client-1.9.jar +0 -0
  52. data/classpath/jersey-core-1.9.jar +0 -0
  53. data/classpath/jersey-guice-1.9.jar +0 -0
  54. data/classpath/jersey-json-1.9.jar +0 -0
  55. data/classpath/jersey-server-1.9.jar +0 -0
  56. data/classpath/jettison-1.1.jar +0 -0
  57. data/classpath/jetty-util-6.1.26.jar +0 -0
  58. data/classpath/jline-0.9.94.jar +0 -0
  59. data/classpath/jsr305-1.3.9.jar +0 -0
  60. data/classpath/leveldbjni-all-1.8.jar +0 -0
  61. data/classpath/netty-3.7.0.Final.jar +0 -0
  62. data/classpath/paranamer-2.3.jar +0 -0
  63. data/classpath/protobuf-java-2.5.0.jar +0 -0
  64. data/classpath/servlet-api-2.5.jar +0 -0
  65. data/classpath/snappy-java-1.0.4.1.jar +0 -0
  66. data/classpath/stax-api-1.0-2.jar +0 -0
  67. data/classpath/xmlenc-0.52.jar +0 -0
  68. data/classpath/xz-1.0.jar +0 -0
  69. data/classpath/zookeeper-3.4.6.jar +0 -0
  70. data/lib/embulk/executor/mapreduce.rb +3 -0
  71. data/src/main/java/org/embulk/executor/mapreduce/AttemptState.java +154 -0
  72. data/src/main/java/org/embulk/executor/mapreduce/BufferWritable.java +74 -0
  73. data/src/main/java/org/embulk/executor/mapreduce/BufferedPagePartitioner.java +158 -0
  74. data/src/main/java/org/embulk/executor/mapreduce/EmbulkInputFormat.java +37 -0
  75. data/src/main/java/org/embulk/executor/mapreduce/EmbulkInputSplit.java +61 -0
  76. data/src/main/java/org/embulk/executor/mapreduce/EmbulkMapReduce.java +359 -0
  77. data/src/main/java/org/embulk/executor/mapreduce/EmbulkPartitioningMapReduce.java +303 -0
  78. data/src/main/java/org/embulk/executor/mapreduce/EmbulkRecordReader.java +63 -0
  79. data/src/main/java/org/embulk/executor/mapreduce/MapReduceExecutor.java +391 -0
  80. data/src/main/java/org/embulk/executor/mapreduce/MapReduceExecutorTask.java +60 -0
  81. data/src/main/java/org/embulk/executor/mapreduce/PageWritable.java +66 -0
  82. data/src/main/java/org/embulk/executor/mapreduce/PartitionKey.java +11 -0
  83. data/src/main/java/org/embulk/executor/mapreduce/Partitioner.java +11 -0
  84. data/src/main/java/org/embulk/executor/mapreduce/Partitioning.java +12 -0
  85. data/src/main/java/org/embulk/executor/mapreduce/PluginArchive.java +189 -0
  86. data/src/main/java/org/embulk/executor/mapreduce/RemoteTaskFailedException.java +10 -0
  87. data/src/main/java/org/embulk/executor/mapreduce/SetContextClassLoader.java +19 -0
  88. data/src/main/java/org/embulk/executor/mapreduce/TimestampPartitioning.java +291 -0
  89. metadata +131 -0
@@ -0,0 +1,189 @@
1
+ package org.embulk.executor.mapreduce;
2
+
3
+ import java.util.List;
4
+ import java.util.ArrayList;
5
+ import java.io.File;
6
+ import java.io.InputStream;
7
+ import java.io.OutputStream;
8
+ import java.io.FileOutputStream;
9
+ import java.io.IOException;
10
+ import java.nio.file.Path;
11
+ import java.nio.file.Files;
12
+ import java.nio.file.DirectoryStream;
13
+ import java.nio.file.NoSuchFileException;
14
+ import java.nio.file.NotDirectoryException;
15
+ import java.util.zip.ZipEntry;
16
+ import java.util.zip.ZipOutputStream;
17
+ import java.util.zip.ZipInputStream;
18
+ import com.fasterxml.jackson.annotation.JsonCreator;
19
+ import com.fasterxml.jackson.annotation.JsonProperty;
20
+ import com.google.common.collect.ImmutableList;
21
+ import com.google.common.io.ByteStreams;
22
+ import org.jruby.embed.ScriptingContainer;
23
+ import org.jruby.embed.InvokeFailedException;
24
+
25
+ public class PluginArchive
26
+ {
27
+ public static class GemSpec
28
+ {
29
+ private final String name;
30
+ private final List<String> requirePaths;
31
+
32
+ @JsonCreator
33
+ public GemSpec(
34
+ @JsonProperty("name") String name,
35
+ @JsonProperty("requirePaths") List<String> requirePaths)
36
+ {
37
+ this.name = name;
38
+ this.requirePaths = requirePaths;
39
+ }
40
+
41
+ @JsonProperty("name")
42
+ public String getName()
43
+ {
44
+ return name;
45
+ }
46
+
47
+ @JsonProperty("requirePaths")
48
+ public List<String> getRequirePaths()
49
+ {
50
+ return requirePaths;
51
+ }
52
+ }
53
+
54
+ private static class LocalGem
55
+ extends GemSpec
56
+ {
57
+ private final File localPath;
58
+
59
+ public LocalGem(File localPath, String name, List<String> requirePaths)
60
+ {
61
+ super(name, requirePaths);
62
+ this.localPath = localPath;
63
+ }
64
+
65
+ public File getLocalPath()
66
+ {
67
+ return localPath;
68
+ }
69
+ }
70
+
71
+ public static class Builder
72
+ {
73
+ private final ImmutableList.Builder<LocalGem> localGems = ImmutableList.builder();
74
+
75
+ @SuppressWarnings("unchecked")
76
+ public Builder addLoadedRubyGems(ScriptingContainer jruby)
77
+ {
78
+ List<List<String>> tuples = (List<List<String>>) jruby.runScriptlet("Gem.loaded_specs.map {|k,v| [k, v.full_gem_path, v.require_paths].flatten }");
79
+ for (List<String> tuple : tuples) {
80
+ String name = tuple.remove(0);
81
+ String fullGemPath = tuple.remove(0);
82
+ List<String> requirePaths = ImmutableList.copyOf(tuple);
83
+ addSpec(new File(fullGemPath), name, requirePaths);
84
+ }
85
+ return this;
86
+ }
87
+
88
+ public Builder addSpec(File localPath, String name, List<String> requirePaths)
89
+ {
90
+ localGems.add(new LocalGem(localPath, name, requirePaths));
91
+ return this;
92
+ }
93
+
94
+ public PluginArchive build()
95
+ {
96
+ return new PluginArchive(localGems.build());
97
+ }
98
+ }
99
+
100
+ private final List<LocalGem> localGems;
101
+
102
+ private PluginArchive(List<LocalGem> localGems)
103
+ {
104
+ this.localGems = localGems;
105
+ }
106
+
107
+ @SuppressWarnings("unchecked")
108
+ public void restoreLoadPathsTo(ScriptingContainer jruby)
109
+ {
110
+ List<String> loadPaths = (List<String>) jruby.runScriptlet("$LOAD_PATH");
111
+ for (LocalGem localGem : localGems) {
112
+ Path localGemPath = localGem.getLocalPath().toPath();
113
+ for (String requirePath : localGem.getRequirePaths()) {
114
+ loadPaths.add(localGemPath.resolve(requirePath).toString());
115
+ }
116
+ }
117
+ jruby.setLoadPaths(loadPaths);
118
+ }
119
+
120
+ public List<GemSpec> dump(OutputStream out)
121
+ throws IOException
122
+ {
123
+ ImmutableList.Builder<GemSpec> builder = ImmutableList.builder();
124
+ try (ZipOutputStream zip = new ZipOutputStream(out)) {
125
+ for (LocalGem localGem : localGems) {
126
+ zipDirectory(zip, localGem.getLocalPath().toPath(), localGem.getName() + "/");
127
+ builder.add(new GemSpec(localGem.getName(), localGem.getRequirePaths()));
128
+ }
129
+ }
130
+ return builder.build();
131
+ }
132
+
133
+ private static void zipDirectory(ZipOutputStream zip, Path directory, String name)
134
+ throws IOException
135
+ {
136
+ try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(directory)) {
137
+ for (Path path : dirStream) {
138
+ if (Files.isDirectory(path)) {
139
+ zipDirectory(zip, path, name + path.getFileName() + "/");
140
+ } else {
141
+ zip.putNextEntry(new ZipEntry(name + path.getFileName()));
142
+ try (InputStream in = Files.newInputStream(path)) {
143
+ ByteStreams.copy(in, zip);
144
+ }
145
+ zip.closeEntry();
146
+ }
147
+ }
148
+ } catch (NoSuchFileException | NotDirectoryException ex) {
149
+ // ignore
150
+ }
151
+ }
152
+
153
+ public static PluginArchive load(File localDirectory, List<GemSpec> gemSpecs,
154
+ InputStream in) throws IOException
155
+ {
156
+ try (ZipInputStream zip = new ZipInputStream(in)) {
157
+ unzipDirectory(zip, localDirectory.toPath());
158
+ }
159
+
160
+ ImmutableList.Builder<LocalGem> builder = ImmutableList.builder();
161
+ for (GemSpec gemSpec : gemSpecs) {
162
+ builder.add(new LocalGem(
163
+ new File(localDirectory, gemSpec.getName()),
164
+ gemSpec.getName(),
165
+ gemSpec.getRequirePaths()));
166
+ }
167
+ return new PluginArchive(builder.build());
168
+ }
169
+
170
+ private static void unzipDirectory(ZipInputStream zip, Path directory)
171
+ throws IOException
172
+ {
173
+ while (true) {
174
+ ZipEntry entry = zip.getNextEntry();
175
+ if (entry == null) {
176
+ break;
177
+ }
178
+ Path path = directory.resolve(entry.getName());
179
+ if (entry.getName().endsWith("/")) {
180
+ Files.createDirectories(path);
181
+ } else {
182
+ Files.createDirectories(path.getParent());
183
+ try (OutputStream out = Files.newOutputStream(path)) {
184
+ ByteStreams.copy(zip, out);
185
+ }
186
+ }
187
+ }
188
+ }
189
+ }
@@ -0,0 +1,10 @@
1
+ package org.embulk.executor.mapreduce;
2
+
3
+ public class RemoteTaskFailedException
4
+ extends RuntimeException
5
+ {
6
+ public RemoteTaskFailedException(String message)
7
+ {
8
+ super(message);
9
+ }
10
+ }
@@ -0,0 +1,19 @@
1
+ package org.embulk.executor.mapreduce;
2
+
3
+ public class SetContextClassLoader
4
+ implements AutoCloseable
5
+ {
6
+ private final ClassLoader original;
7
+
8
+ public SetContextClassLoader(ClassLoader classLoader)
9
+ {
10
+ this.original = Thread.currentThread().getContextClassLoader();
11
+ Thread.currentThread().setContextClassLoader(classLoader);
12
+ }
13
+
14
+ @Override
15
+ public void close()
16
+ {
17
+ Thread.currentThread().setContextClassLoader(original);
18
+ }
19
+ }
@@ -0,0 +1,291 @@
1
+ package org.embulk.executor.mapreduce;
2
+
3
+ import org.joda.time.DateTimeZone;
4
+ import com.google.common.base.Optional;
5
+ import org.embulk.config.Config;
6
+ import org.embulk.config.ConfigDefault;
7
+ import org.embulk.config.ConfigSource;
8
+ import org.embulk.config.ConfigException;
9
+ import org.embulk.config.Task;
10
+ import org.embulk.config.TaskSource;
11
+ import org.embulk.spi.time.Timestamp;
12
+ import org.embulk.spi.type.TimestampType;
13
+ import org.embulk.spi.type.LongType;
14
+ import org.embulk.spi.Column;
15
+ import org.embulk.spi.PageReader;
16
+ import org.embulk.spi.Schema;
17
+ import org.embulk.spi.Buffer;
18
+
19
+ public class TimestampPartitioning
20
+ implements Partitioning
21
+ {
22
+ public interface PartitioningTask
23
+ extends Task
24
+ {
25
+ @Config("column")
26
+ public String getColumn();
27
+
28
+ @Config("unit")
29
+ public String getUnit();
30
+
31
+ @Config("timezone")
32
+ @ConfigDefault("\"UTC\"")
33
+ public DateTimeZone getTimeZone();
34
+
35
+ @Config("unix_timestamp_unit")
36
+ @ConfigDefault("\"sec\"")
37
+ public String getUnixTimestamp();
38
+
39
+ public Column getTargetColumn();
40
+ public void setTargetColumn(Column column);
41
+ }
42
+
43
+ private static enum Unit
44
+ {
45
+ HOUR(60*60),
46
+ DAY(24*60*60);
47
+ //WEEK
48
+ //MONTH,
49
+ //YEAR;
50
+
51
+ private final int unit;
52
+
53
+ private Unit(int unit)
54
+ {
55
+ this.unit = unit;
56
+ }
57
+
58
+ public long utcPartition(long seconds)
59
+ {
60
+ return seconds / unit;
61
+ }
62
+
63
+ public static Unit of(String s)
64
+ {
65
+ switch (s) {
66
+ case "hour": return HOUR;
67
+ case "day": return DAY;
68
+ //case "week": return WEEK;
69
+ //case "month": return MONTH;
70
+ //case "year": return YEAR;
71
+ default:
72
+ throw new ConfigException(
73
+ String.format("Unknown unit '%s'. Supported units are hour and day"));
74
+ }
75
+ }
76
+ }
77
+
78
+ private static enum UnixTimestampUnit
79
+ {
80
+ SEC(1),
81
+ MILLI(1000),
82
+ MICRO(1000000),
83
+ NANO(1000000000);
84
+
85
+ private final int unit;
86
+
87
+ private UnixTimestampUnit(int unit)
88
+ {
89
+ this.unit = unit;
90
+ }
91
+
92
+ public long toSeconds(long v)
93
+ {
94
+ return v / unit;
95
+ }
96
+
97
+ public static UnixTimestampUnit of(String s)
98
+ {
99
+ switch (s) {
100
+ case "sec": return SEC;
101
+ case "milli": return MILLI;
102
+ case "micro": return MICRO;
103
+ case "nano": return NANO;
104
+ default:
105
+ throw new ConfigException(
106
+ String.format("Unknown unix_timestamp_unit '%s'. Supported units are sec, milli, micro, and nano"));
107
+ }
108
+ }
109
+ }
110
+
111
+ @Override
112
+ public TaskSource configure(ConfigSource config, Schema schema, int outputTaskCount)
113
+ {
114
+ PartitioningTask task = config.loadConfig(PartitioningTask.class);
115
+ Column column = findColumnByName(schema, task.getColumn());
116
+
117
+ if (!task.getTimeZone().equals(DateTimeZone.UTC)) {
118
+ // TODO
119
+ throw new ConfigException("Timestamp partitioner supports only UTC time zone for now");
120
+ }
121
+
122
+ // validate unit
123
+ Unit.of(task.getUnit());
124
+
125
+ // validate type
126
+ if (column.getType() instanceof TimestampType) {
127
+ // ok
128
+ } else if (column.getType() instanceof LongType) {
129
+ // validate unix_timestamp_unit
130
+ UnixTimestampUnit.of(task.getUnixTimestamp());
131
+ } else {
132
+ throw new ConfigException(
133
+ String.format("Partitioning column '%s' must be timestamp or long but got '%s'", column.getName(), column.getType()));
134
+ }
135
+
136
+ task.setTargetColumn(column);
137
+
138
+ return task.dump();
139
+ }
140
+
141
+ private static Column findColumnByName(Schema schema, String columnName)
142
+ {
143
+ for (Column column : schema.getColumns()) {
144
+ if (column.getName().equals(columnName)) {
145
+ return column;
146
+ }
147
+ }
148
+ throw new ConfigException(
149
+ String.format("Column '%s' is not found in schema", columnName));
150
+ }
151
+
152
+ @Override
153
+ public Partitioner newPartitioner(TaskSource taskSource)
154
+ {
155
+ PartitioningTask task = taskSource.loadTask(PartitioningTask.class);
156
+
157
+ Column column = task.getTargetColumn();
158
+ if (column.getType() instanceof TimestampType) {
159
+ return new TimestampPartitioner(column, Unit.of(task.getUnit()));
160
+ } else if (column.getType() instanceof LongType) {
161
+ return new LongUnixTimestampPartitioner(column, Unit.of(task.getUnit()), UnixTimestampUnit.of(task.getUnixTimestamp()));
162
+ } else {
163
+ throw new AssertionError();
164
+ }
165
+ }
166
+
167
+ private static class LongPartitionKey
168
+ implements PartitionKey
169
+ {
170
+ public static Buffer newKeyBuffer()
171
+ {
172
+ Buffer buffer = Buffer.allocate(8);
173
+ buffer.limit(8);
174
+ return buffer;
175
+ }
176
+
177
+ private long value;
178
+
179
+ public LongPartitionKey()
180
+ { }
181
+
182
+ private LongPartitionKey(long value)
183
+ {
184
+ this.value = value;
185
+ }
186
+
187
+ public void set(long value)
188
+ {
189
+ this.value = value;
190
+ }
191
+
192
+ @Override
193
+ public void dump(Buffer buffer)
194
+ {
195
+ // TODO optimize
196
+ buffer.array()[0] = (byte) (((int) (value >>> 0)) & 0xff);
197
+ buffer.array()[1] = (byte) (((int) (value >>> 4)) & 0xff);
198
+ buffer.array()[2] = (byte) (((int) (value >>> 8)) & 0xff);
199
+ buffer.array()[3] = (byte) (((int) (value >>> 12)) & 0xff);
200
+ buffer.array()[4] = (byte) (((int) (value >>> 16)) & 0xff);
201
+ buffer.array()[5] = (byte) (((int) (value >>> 20)) & 0xff);
202
+ buffer.array()[6] = (byte) (((int) (value >>> 24)) & 0xff);
203
+ buffer.array()[7] = (byte) (((int) (value >>> 28)) & 0xff);
204
+ }
205
+
206
+ @Override
207
+ public LongPartitionKey clone()
208
+ {
209
+ return new LongPartitionKey(value);
210
+ }
211
+
212
+ @Override
213
+ public boolean equals(Object other)
214
+ {
215
+ if (!(other instanceof LongPartitionKey)) {
216
+ return false;
217
+ }
218
+ LongPartitionKey o = (LongPartitionKey) other;
219
+ return value == o.value;
220
+ }
221
+
222
+ @Override
223
+ public int hashCode()
224
+ {
225
+ return (int) (value ^ (value >>> 32));
226
+ }
227
+ }
228
+
229
+ private static abstract class AbstractTimestampPartitioner
230
+ implements Partitioner
231
+ {
232
+ protected final Column column;
233
+ protected final Unit unit;
234
+ private final LongPartitionKey key;
235
+
236
+ public AbstractTimestampPartitioner(Column column, Unit unit)
237
+ {
238
+ this.column = column;
239
+ this.unit = unit;
240
+ this.key = new LongPartitionKey();
241
+ }
242
+
243
+ @Override
244
+ public Buffer newKeyBuffer()
245
+ {
246
+ return LongPartitionKey.newKeyBuffer();
247
+ }
248
+
249
+ protected LongPartitionKey updateKey(long v)
250
+ {
251
+ key.set(v);
252
+ return key;
253
+ }
254
+ }
255
+
256
+ private static class TimestampPartitioner
257
+ extends AbstractTimestampPartitioner
258
+ {
259
+ public TimestampPartitioner(Column column, Unit unit)
260
+ {
261
+ super(column, unit);
262
+ }
263
+
264
+ @Override
265
+ public PartitionKey updateKey(PageReader record)
266
+ {
267
+ Timestamp v = record.getTimestamp(column);
268
+ return super.updateKey(unit.utcPartition(v.getEpochSecond()));
269
+ }
270
+ }
271
+
272
+ private static class LongUnixTimestampPartitioner
273
+ extends AbstractTimestampPartitioner
274
+ {
275
+ private final UnixTimestampUnit unixTimestampUnit;
276
+
277
+ public LongUnixTimestampPartitioner(Column column, Unit unit,
278
+ UnixTimestampUnit unixTimestampUnit)
279
+ {
280
+ super(column, unit);
281
+ this.unixTimestampUnit = unixTimestampUnit;
282
+ }
283
+
284
+ @Override
285
+ public PartitionKey updateKey(PageReader record)
286
+ {
287
+ long v = record.getLong(column);
288
+ return super.updateKey(unit.utcPartition(unixTimestampUnit.toSeconds(v)));
289
+ }
290
+ }
291
+ }
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: embulk-executor-mapreduce
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sadayuki Furuhashi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Executes tasks on Hadoop.
14
+ email:
15
+ - frsyuki@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - build.gradle
21
+ - lib/embulk/executor/mapreduce.rb
22
+ - src/main/java/org/embulk/executor/mapreduce/AttemptState.java
23
+ - src/main/java/org/embulk/executor/mapreduce/BufferWritable.java
24
+ - src/main/java/org/embulk/executor/mapreduce/BufferedPagePartitioner.java
25
+ - src/main/java/org/embulk/executor/mapreduce/EmbulkInputFormat.java
26
+ - src/main/java/org/embulk/executor/mapreduce/EmbulkInputSplit.java
27
+ - src/main/java/org/embulk/executor/mapreduce/EmbulkMapReduce.java
28
+ - src/main/java/org/embulk/executor/mapreduce/EmbulkPartitioningMapReduce.java
29
+ - src/main/java/org/embulk/executor/mapreduce/EmbulkRecordReader.java
30
+ - src/main/java/org/embulk/executor/mapreduce/MapReduceExecutor.java
31
+ - src/main/java/org/embulk/executor/mapreduce/MapReduceExecutorTask.java
32
+ - src/main/java/org/embulk/executor/mapreduce/PageWritable.java
33
+ - src/main/java/org/embulk/executor/mapreduce/PartitionKey.java
34
+ - src/main/java/org/embulk/executor/mapreduce/Partitioner.java
35
+ - src/main/java/org/embulk/executor/mapreduce/Partitioning.java
36
+ - src/main/java/org/embulk/executor/mapreduce/PluginArchive.java
37
+ - src/main/java/org/embulk/executor/mapreduce/RemoteTaskFailedException.java
38
+ - src/main/java/org/embulk/executor/mapreduce/SetContextClassLoader.java
39
+ - src/main/java/org/embulk/executor/mapreduce/TimestampPartitioning.java
40
+ - classpath/activation-1.1.jar
41
+ - classpath/apacheds-i18n-2.0.0-M15.jar
42
+ - classpath/apacheds-kerberos-codec-2.0.0-M15.jar
43
+ - classpath/api-asn1-api-1.0.0-M20.jar
44
+ - classpath/api-util-1.0.0-M20.jar
45
+ - classpath/avro-1.7.4.jar
46
+ - classpath/commons-beanutils-1.7.0.jar
47
+ - classpath/commons-cli-1.2.jar
48
+ - classpath/commons-codec-1.6.jar
49
+ - classpath/commons-collections-3.2.1.jar
50
+ - classpath/commons-compress-1.4.1.jar
51
+ - classpath/commons-configuration-1.6.jar
52
+ - classpath/commons-digester-1.8.jar
53
+ - classpath/commons-httpclient-3.1.jar
54
+ - classpath/commons-io-2.4.jar
55
+ - classpath/commons-lang-2.6.jar
56
+ - classpath/commons-logging-1.1.3.jar
57
+ - classpath/commons-math3-3.1.1.jar
58
+ - classpath/commons-net-3.1.jar
59
+ - classpath/curator-client-2.6.0.jar
60
+ - classpath/curator-framework-2.6.0.jar
61
+ - classpath/curator-recipes-2.6.0.jar
62
+ - classpath/embulk-executor-mapreduce-0.1.0.jar
63
+ - classpath/gson-2.2.4.jar
64
+ - classpath/hadoop-annotations-2.6.0.jar
65
+ - classpath/hadoop-auth-2.6.0.jar
66
+ - classpath/hadoop-client-2.6.0.jar
67
+ - classpath/hadoop-common-2.6.0.jar
68
+ - classpath/hadoop-hdfs-2.6.0.jar
69
+ - classpath/hadoop-mapreduce-client-app-2.6.0.jar
70
+ - classpath/hadoop-mapreduce-client-common-2.6.0.jar
71
+ - classpath/hadoop-mapreduce-client-core-2.6.0.jar
72
+ - classpath/hadoop-mapreduce-client-jobclient-2.6.0.jar
73
+ - classpath/hadoop-mapreduce-client-shuffle-2.6.0.jar
74
+ - classpath/hadoop-yarn-api-2.6.0.jar
75
+ - classpath/hadoop-yarn-client-2.6.0.jar
76
+ - classpath/hadoop-yarn-common-2.6.0.jar
77
+ - classpath/hadoop-yarn-server-common-2.6.0.jar
78
+ - classpath/hadoop-yarn-server-nodemanager-2.6.0.jar
79
+ - classpath/htrace-core-3.0.4.jar
80
+ - classpath/httpclient-4.2.5.jar
81
+ - classpath/httpcore-4.2.4.jar
82
+ - classpath/jackson-core-asl-1.9.13.jar
83
+ - classpath/jackson-jaxrs-1.9.13.jar
84
+ - classpath/jackson-mapper-asl-1.9.13.jar
85
+ - classpath/jackson-xc-1.9.13.jar
86
+ - classpath/jaxb-api-2.2.2.jar
87
+ - classpath/jaxb-impl-2.2.3-1.jar
88
+ - classpath/jersey-client-1.9.jar
89
+ - classpath/jersey-core-1.9.jar
90
+ - classpath/jersey-guice-1.9.jar
91
+ - classpath/jersey-json-1.9.jar
92
+ - classpath/jersey-server-1.9.jar
93
+ - classpath/jettison-1.1.jar
94
+ - classpath/jetty-util-6.1.26.jar
95
+ - classpath/jline-0.9.94.jar
96
+ - classpath/jsr305-1.3.9.jar
97
+ - classpath/leveldbjni-all-1.8.jar
98
+ - classpath/netty-3.7.0.Final.jar
99
+ - classpath/paranamer-2.3.jar
100
+ - classpath/protobuf-java-2.5.0.jar
101
+ - classpath/servlet-api-2.5.jar
102
+ - classpath/snappy-java-1.0.4.1.jar
103
+ - classpath/stax-api-1.0-2.jar
104
+ - classpath/xmlenc-0.52.jar
105
+ - classpath/xz-1.0.jar
106
+ - classpath/zookeeper-3.4.6.jar
107
+ homepage: https://github.com/embulk/embulk-executor-mapreduce
108
+ licenses:
109
+ - Apache 2.0
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.1.9
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: MapReduce executor plugin for Embulk
131
+ test_files: []