2

我必须处理非常大的文本文件中的数据(如 5 TB 大小)。处理逻辑使用 supercsv 解析数据并对其进行一些检查。显然,由于大小相当大,我们计划使用 hadoop 来利用并行计算。我在我的机器上安装了 hadoop,我开始编写映射器和减速器类,但我被卡住了。因为地图需要一个键值对,所以要读取这个文本文件,我不确定在这个特定场景中应该是什么键和值。有人可以帮我解决这个问题。

我的思考过程是这样的(让我知道我是否正确) 1)使用 superCSV 读取文件,hadoop 为 hdfs 中的每个文件块生成 supercsv bean。(我假设 hadoop 负责拆分文件) 2) 对于这些 supercsvbeans 中的每一个运行我的检查逻辑。

4

1 回答 1

3

数据是否以换行符分隔?即,如果您只是在每个换行符上拆分数据,每个块是否总是一个完整的记录?这取决于 superCSV 如何对文本进行编码,以及您的实际数据是否包含换行符。

如果是:

只需使用 TextInputFormat。它为您提供(我认为)字节偏移量作为映射键,整行作为值。您可以忽略该键,并使用 superCSV 解析该行。

如果不:

您必须编写自己的自定义 InputFormat - 这是一个很好的教程:http: //developer.yahoo.com/hadoop/tutorial/module5.html#fileformat。确切的键是什么以及值是什么的细节对于映射器输入并不重要;只需确保两者之一包含您想要的实际数据。您甚至可以使用 NullWritable 作为其中之一的类型。

于 2012-10-25T23:00:45.223 回答