mapreduce使用snappy数据顺序错误

时间:2015-03-28 05:29:58

标签: java hadoop mapreduce hdfs snappy

当我在HDFS上阅读snappy文件到mapreduce时,我遇到了问题。

我已经定了 job.setInputFormatClass(TextInputFormat.class); 在工作中。

然后我在mapper中得到这样的行值

protected void map(Object key, Text value, Context context) throws IOException, InterruptedException { String[] strs = new String(value.getBytes()).split(String.valueOf(0x09)); LOGGER.info("strs length is " + strs.length); }

如果数据正确,则strs长度为44.但我在用户日志中发现了很多错误长度(大于44)。

然后我打印了值new String(value.getBytes)。我发现打印的字符串不是我的预期。行数据不是我保存到HDFS的字符串。

数据的顺序是错误的,导致映射器中的值不正确。

我可以做些什么来解决问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在阅读Snappy压缩文本文件,但您已经提到了job.setInputFormatClass(TextInputFormat.class),这意味着您将要读取文本文件。您必须先将文件解压缩为文本文件,然后才需要在该文件的顶部运行MR作业。