在MR作业中处理字节数组的最佳方法

时间:2013-08-29 23:28:49

标签: hadoop mapreduce bytearray

我需要在比较器中比较MR作业的字节数组,但是找不到处理字节数组的好方法,序列化/反序列化的对象有以下字段:

public class GeneralKey {
  String name;
  String type;
  ...other String fields ..
}

@Override 
public void readFields(DataInput input) throw IOException {
  name = input.readUTF();
  type = input.readUTF();
  ...
}

@Override
public void write(DataOutput output) throws IOException {
  output.writeUTF(name);
  output.writeUTF(type);
  ...
}

序列化字节数组看起来像这样: name:[0,0] 2个字节,这2个字节代表名称的长度,因为它为0,name为空 类型:[0,3,96,97,98] 5字节,前2个字节是类型的长度,意味着类型的值是3个字节长,所以需要读取以下3个字节:96,97,98,字符串中的'abc'。

想知道是否有更好的方法来处理可以将前两个字节读取为整数的字节数组,然后可以决定接下来要读取多少字节将它们转换为String。我使用hadoop 1.0.3并在AWS中运行该作业,我尝试了hbase的Bytes类,但由于某种原因它抛出了Class not found error java.lang.ClassNotFoundException:org.apache.hadoop.hbase.util.Bytes

如果有其他库可以用来轻松处理字节数组?感谢

1 个答案:

答案 0 :(得分:0)

我使用字节数组作为键和值,但使用了以下内置类型: BytesWritable