我有一个需要读取文件的应用程序,该文件是ArrayList的序列化结果。(ArrayList<String>
,此列表中有50000条记录,大小:20MB)
我不知道如何将数据读入hadoop平台。我只有一些意义,我需要覆盖InputFormat和OutpurFormat。
我是hadoop平台的初学者。你能给我一些建议吗?
谢谢,
征。
答案 0 :(得分:2)
首先,您需要扩展FileInputFormat,值得注意的是实现抽象FileInputFormat.createRecordReader方法。
您可以查看LineRecordReader之类的内容(TextInputFormat用于处理文本文件的内容)。
从那里开始,你几乎就是你自己(也就是说它取决于你的ArrayList是如何序列化的)。查看LineRecordReader的源代码,并尝试将其与ArrayList的序列化方式联系起来。
其他一些注意事项,您的文件格式是否可拆分?即你可以寻找文件中的偏移并从那里恢复流(文本文件可以,因为他们只是扫描到当前行的末尾,然后从那里开始)。如果您的文件格式使用压缩,您还需要考虑这一点(例如,您不能随机搜索gzip文件中的位置)。默认情况下,FileInputFormat.isSplittable将返回true,您可能希望最初覆盖为false。如果您坚持使用'unsplittable',请注意您的文件将由单个映射器处理(无论其大小)。
答案 1 :(得分:0)
在处理Hadoop上的数据之前,您应该将数据上传到HDFS或其他支持的文件系统,如果它没有通过别的方式上传到此处。如果您正在控制上传过程,您可以将上传阶段的数据转换为您可以轻松处理的内容,例如:
这是最简单的解决方案,因为您不必干涉Hadoop的内部。