1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.mapreduce;
19
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.io.OutputStream;
23
24 import org.apache.hadoop.hbase.client.Delete;
25 import org.apache.hadoop.hbase.client.Mutation;
26 import org.apache.hadoop.hbase.client.Put;
27 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
28 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
29 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
30 import org.apache.hadoop.io.serializer.Deserializer;
31 import org.apache.hadoop.io.serializer.Serialization;
32 import org.apache.hadoop.io.serializer.Serializer;
33
34 public class MutationSerialization implements Serialization<Mutation> {
35 @Override
36 public boolean accept(Class<?> c) {
37 return Mutation.class.isAssignableFrom(c);
38 }
39
40 @Override
41 public Deserializer<Mutation> getDeserializer(Class<Mutation> c) {
42 return new MutationDeserializer();
43 }
44
45 @Override
46 public Serializer<Mutation> getSerializer(Class<Mutation> c) {
47 return new MutationSerializer();
48 }
49
50 private static class MutationDeserializer implements Deserializer<Mutation> {
51 private InputStream in;
52
53 @Override
54 public void close() throws IOException {
55 in.close();
56 }
57
58 @Override
59 public Mutation deserialize(Mutation mutation) throws IOException {
60 MutationProto proto = MutationProto.parseDelimitedFrom(in);
61 return ProtobufUtil.toMutation(proto);
62 }
63
64 @Override
65 public void open(InputStream in) throws IOException {
66 this.in = in;
67 }
68
69 }
70 private static class MutationSerializer implements Serializer<Mutation> {
71 private OutputStream out;
72
73 @Override
74 public void close() throws IOException {
75 out.close();
76 }
77
78 @Override
79 public void open(OutputStream out) throws IOException {
80 this.out = out;
81 }
82
83 @Override
84 public void serialize(Mutation mutation) throws IOException {
85 MutationType type;
86 if (mutation instanceof Put) {
87 type = MutationType.PUT;
88 } else if (mutation instanceof Delete) {
89 type = MutationType.DELETE;
90 } else {
91 throw new IllegalArgumentException("Only Put and Delete are supported");
92 }
93 ProtobufUtil.toMutation(type, mutation).writeDelimitedTo(out);
94 }
95 }
96 }