我必须在非常大的文本文件(如5TB大小)中处理数据。处理逻辑使用supercsv解析数据并对其运行一些检查。显然,由于规模相当大,我们计划使用hadoop来利用并行计算的优势。我在我的机器上安装了hadoop,然后开始编写mapper和reducer类,然后我就被卡住了。因为映射需要一个键值对,所以要读取这个文本文件,我不确定在这个特定场景中应该是什么键和值。有人能帮我解决这个问题吗。
我的思考过程是这样的(让我知道我是否正确) 1)使用superCSV和hadoop读取文件为hdfs中的每个文件块生成supercsvbean(我假设hadoop负责拆分文件) 2)对于每个supercsvbeans运行我的检查逻辑。
发布于 2012-10-26 07:00:45
数据是换行分隔的吗?也就是说,如果您只拆分每个换行符上的数据,那么每个块是否总是一个完整的记录?这取决于superCSV如何对文本进行编码,以及实际数据是否包含换行符。
如果是:
只需使用TextInputFormat即可。它为您提供(我认为)字节偏移量作为映射键,并将整行作为值。您可以忽略键,并使用superCSV解析该行。
如果不是:
您必须编写自己的自定义InputFormat -这里有一个很好的教程:http://developer.yahoo.com/hadoop/tutorial/module5.html#fileformat。键是什么以及值是什么的细节对映射器输入并不太重要;只需确保其中一个包含您想要的实际数据。您甚至可以使用NullWritable作为其中之一的类型。
https://stackoverflow.com/questions/13075343
复制相似问题