从文件中为hadoop中的映射器创建自定义键值

Posted

技术标签:

【中文标题】从文件中为hadoop中的映射器创建自定义键值【英文标题】:creating custom key value for mappers in hadoop from file 【发布时间】:2016-02-18 06:31:16 【问题描述】:

我有一个大小为 50MB 的文件(没有空格的完整文本数据)。我想以这样一种方式对这些数据进行分区,即每个映射器都应该获得 5MB 数据。映射器应该以 (K,V) 格式获取数据,其中键 - 分区编号(如 1,2,..)和值是纯文本 (5MB)。

我阅读了InputFormat (method getSplits)FileInputFormat (FileSplit method)RecordReader,但不明白如何生成和使用拆分来为我的映射器创建所需的自定义 (K,V)。我是 Hadoop MapReduce 编程的新手,所以请建议我在这种情况下如何进行。

【问题讨论】:

没有空格的完整文本数据是什么意思?你能提供一个小例子吗?您需要一个逻辑来为映射器创建 对。比如wordcount例子中的逻辑就是用空格分割文本数据。 我的数据是一个包含字符序列的大文件,例如 sdaccraggrralwghdsgfndsnvfcvnd..... 以 MB 为单位。所以我想对这些数据进行分区以在每个映射器端应用我的处理。我想确定给定映射器的分区 那么,你想用什么分割这个字符串?什么样的逻辑?也许你可以使用 SubString 但你感兴趣的长度是多少? 没有什么我只想将这些数据拆分为相等大小的分区,即每个映射器的长度相等的字符序列(如果我的输入大小为 50mb 并且我有兴趣使用 10 个映射器,则每个映射器的长度为 5mb) 【参考方案1】:

您可以在配置中以字节为单位设置mapreduce.input.fileinputformat.split.maxsize,以告诉映射器您应该获得 5MB 的数据。

【讨论】:

以上是关于从文件中为hadoop中的映射器创建自定义键值的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop MapReduce访问减速器中的映射器输出编号

了解 HIVE 数据库中的映射器和缩减器

如何将不同的数据集传递给同一作业的两个不同的映射器

使用 elasticsearch-persistence ruby​​ 的映射器附件类型的自定义映射

将文件从 AWS EMR 集群中的映射器上传到 S3

如何创建从实体到 dto 的映射器,其中 dto 嵌套在哪里?