你好,游客 登录 注册 搜索
背景:
阅读新闻

自定义Hadoop Writable

[日期:2012-12-10] 来源:Linux社区  作者:kokojhuang [字体: ]

Hadoop中已经定义了很多Writable的实现,基本上可以符合我们日常使用,但是在一些特殊的场景我们可能还是需要自己去实现Writable,下面主要说明如何去实现自己的Writeable,及使用自定义的Writable作为map/reduce中的key值时遇到的一些问题。

首先需要实现org.apache.hadoop.io.Writable这个接口,该接口有write和readFields这两个方法,write用于写数据,readFields用于读取数据,具体如下:

private MultipleObject multipleObject; 
 
    @Override 
    public void readFields(DataInput dataInput) throws IOException { 
        length = dataInput.readInt(); 
        bytes = new byte[length]; 
        dataInput.readFully(bytes); 
        if (multipleObject == null) { 
            multipleObject = new MultipleObject(); 
        } 
        multipleObject = SerializeUtil.deserialize(bytes, length, 
                multipleObject.getClass()); 
    } 
 
    @Override 
    public void write(DataOutput dataOutput) throws IOException { 
        if (multipleObject == null) { 
            throw new IOException("Inner multiple object is null"); 
        } 
        DataOutputBuffer out = SerializeUtil.serialize(multipleObject); 
        if (out != null) { 
            bytes = out.getData(); 
            length = out.getData().length; 
            dataOutput.writeInt(length); 
            dataOutput.write(bytes); 
        } 
    } 

linux
相关资讯       Hadoop应用  Hadoop Writable 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款