Hadoop 与 supercsv

标签 hadoop mapreduce supercsv

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

我的思考过程是这样的(请告诉我我是否正确) 1)使用superCSV读取文件,hadoop为hdfs中的每个文件 block 生成supercsv bean。(我假设hadoop负责分割文件) 2)对于每个 supercsvbean 运行我的检查逻辑。

最佳答案

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

如果是:

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

如果没有:

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

关于Hadoop 与 supercsv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075343/

相关文章:

Hadoop MapReduce 思考

java - 如何设置 Hadoop DistributedCache?

csv - 如何使用 Super CSV 部分读取 CSV 文件

java - supercsv 与 jdk 1.7 的兼容性

java - 寻找允许按名称读取列的 Java CSV 库

file - 文件格式存储的最佳实践 (Hadoop)

hadoop - 如何获取 Hive 编译器生成的 MapReduce Jobs 源代码?

hadoop - Hive 查询控制流?

hadoop - MapR 是 MapReduce 的替代品吗

hadoop - 来自内存的对象作为 Hadoop/MapReduce 的输入?