我必须处理非常大的文本文件(例如5 TB大小)中的数据。处理逻辑使用supercsv解析数据并对其进行一些检查。显然,由于大小很大,我们计划使用hadoop来利用并行计算。我在机器上安装了hadoop,然后开始编写mapper和reducer类,但遇到了麻烦。由于映射需要键值对,因此要读取此文本文件,我不确定在此特定情况下键和值应该是什么。有人可以帮我吗
我的思维过程是这样的(让我知道我是否正确)
1)使用superCSV读取文件,然后hadoop为hdfs中的每个文件块生成supercsv Bean(我假设hadoop负责拆分文件)
2)对于每个supercsvbeans,运行我的检查逻辑。
最佳答案
数据是否用换行符分隔?也就是说,如果您只是将数据拆分到每个换行符上,那么每个块将始终是单个完整记录吗?这取决于superCSV编码文本的方式以及实际数据是否包含换行符。
如是:
只需使用TextInputFormat。它为您提供(我认为)字节偏移作为映射键,并为整行提供值。您可以忽略键,并使用superCSV解析行。
如果不:
您必须编写自己的自定义InputFormat-这是一个很好的教程:http://developer.yahoo.com/hadoop/tutorial/module5.html#fileformat。关键是什么以及值是什么的细节对于映射器输入并不重要。只要确保两者之一包含所需的实际数据即可。您甚至可以将NullWritable用作其中之一的类型。