Java Hadoop mapReduce-RecordReader和#xB4;s解析逻辑和可写的.readFields()

Java Hadoop mapReduce-RecordReader和#xB4;s解析逻辑和可写的.readFields(),java,serialization,hadoop,Java,Serialization,Hadoop,我目前正在处理xml数据的mapReduce工作,我认为hadoop中的数据流有些地方我没有正确理解 我正在亚马逊的ElasticMapReduce服务上运行 输入数据:大文件(大大超过64MB,因此它们应该是可拆分的),由许多小xml文件组成,这些文件由以前的s3distcp操作连接,该操作将所有文件连接成一个文件 我正在使用Mahout的XmlInputFormat的一个稍加修改的版本从输入中提取各个xml片段 作为下一步,我想将这些xml片段解析为业务对象,然后将其传递给映射器 现在,我想

我目前正在处理xml数据的mapReduce工作,我认为hadoop中的数据流有些地方我没有正确理解

我正在亚马逊的ElasticMapReduce服务上运行

输入数据:大文件(大大超过64MB,因此它们应该是可拆分的),由许多小xml文件组成,这些文件由以前的s3distcp操作连接,该操作将所有文件连接成一个文件

我正在使用Mahout的XmlInputFormat的一个稍加修改的版本从输入中提取各个xml片段

作为下一步,我想将这些xml片段解析为业务对象,然后将其传递给映射器

现在,我想我遗漏了一些东西:为了让它工作,我的业务对象需要实现可写接口,定义如何从DataInput或DataOutput读取/写入实例。 然而,我不明白这在哪里起作用——读取对象实例所需的逻辑已经在InputFormat的记录读取器中,那么为什么对象必须能够读取/写入自身呢

我已经做了很多研究,我知道(或者更确切地说,假设)在集群中的节点之间传输数据时使用了WritableSerialization,但我想了解这种体系结构背后的原因

InputSplit是在作业提交时定义的—因此,如果名称节点发现数据需要移动到特定节点才能使映射任务工作,那么仅仅将原始数据作为字节流发送是否就足够了?如果输入格式的RecordReader执行相同的操作,为什么我们需要将其解码为可写文件

我真的希望有人能告诉我以上想法中的错误,谢谢