别拿Hadoop map key当id使

2019-03-28 13:50|来源: 网络

在写mapreduce时,发现一个问题:

Hadoop的map函数的key一般是输入文件的行号,于是乎就希望把这个当作一个unique id来用,但是确出了很严重的问题,在分布式集群中,不同map任务中可能会有很多相同的行号,千万不能把这个key当作id.

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

相关问答

更多
  • 印象中是通过标准输入输出来实现数据的传递的。 另外需要一个东西连接hadoop 与python。就是通过标准输入输出连接。 那个东西本身将hadoop的api封装。 我估计可能原因有两个: 1.没有输入绝对路径。你用的是相对路径。这个可能不成。 2.你可能需要一个插件,连接HADOOP与python 看你的算法好象是在做协同过滤的准备工作。 这个协同过滤单机就可以跑得很快。几十分钟就算完了。
  • 找到离存数据最近的一台机器运行和这个数据相关的map任务,reduce是按照你整理出的key有多少个来决定的。一个机器很难说,处理的快的处理多一点,保持所有机器使用平衡。 上面你都自己写了20个map,和文件大小个数有关,和数据条数无关。 要看你选择的输入格式是什么,默认是行偏移量,然后由你编写map函数,指定key和value是什么。相同的key整合起来传给reduce,由reduce进行下一步处理,最后输出到指定的地方。
  • 您也可以在单个Map Reduce作业中执行此操作。 您的Mapper将读取数据。 假设这是序列化格式,其结构类似于您的类(自定义可写)。 从映射器中,您可以以复杂键的形式收集输出,包括2个部分 - 您收集的内容:值,例如年龄:18。 这可以是文本或自定义可写。 根据您的使用案例,您可能需要使用分区程序来确保所有具有Age的键都转到单个reducer,而具有名称的键转到另一个reducer。 没有分区器所有具有Age:18的键将转到相同的reducer。 You can do this in a singl ...
  • 无需GENERATE字段,然后在FILTER使用它; 您可以将它包含在FILTER语句中以开头: A = load 'map.text' as (M:map[]); B = filter A by M#'key2' != ''; dump B; 在您的数据上,这将返回一条记录: ([key2#v2]) 作为旁注,如果空字符串是有效值,则您可能更喜欢使用的标准是by M#'key2' is not null 。 There is no need to GENERATE a field and then u ...
  • 您正在使用TextInputFormat,并且它使用的RecordReader返回LongWritable作为键和Text作为值。 这就是你超出例外的原因。 请参阅此文档 。 将您的方法签名更改为“public void map(LongWritabe key,Text value,OutputCollector output,Reporter reporter)throws IOException”可以帮助您解决此问题。 -Amit You are using TextInputFormat and th ...
  • 终于搞定了,实际上我改变了 conf.setOutputKeyComparatorClass(TaggedJoiningGroupingComparator.class); 至 conf.setOutputValueGroupingComparator(TaggedJoiningGroupingComparator.class); 也来自hadoop API文档。 - setOutputValueGroupingComparator(Class the ...
  • 好,你正在挖掘hadoop概念。 1)我可以使用显式键值吗? 或自定义输入?:是的,编写自己的(覆盖) RecordReader来执行此操作。 2)为什么Map reduce仅适用于Key Value对?:MapReduce,顾名思义,程序只是将所需数据映射(过滤)到Reduce(基于唯一键的组合)来自提供给程序的数据集。 现在,为什么键值对?:由于您正在处理非结构化数据,因此人们也不希望得到与输出相同的数据。 我们需要对数据进行一些操作。 考虑在java中使用Map,它有助于唯一地识别该对,在Sort&S ...
  • 我认为你没有使用reducer,mapper输出是最终输出 如果你引入减速器,则会发生改组和排序,你会获得所需的输出。 请参考以下问题:减速机的改组和分拣阶段的目的是什么 示例Reducer实现: public class Reduce extends Reducer { public void reduce(Text key, Iterable values, Context context) throws IOExceptio ...
  • 请检查一次导入。 也许您在程序中混合了旧API和新API。 另外,我建议你使用新的API,即mapreduce而不是mapred 。 HTH Please check your imports once. Perhaps you have mixed the old and the new APIs in your program. Also, I would suggest you to use the new API, i'e mapreduce instead of mapred. HTH
  • 我认为对于这种灵活性,您需要拥有从FileInputFormat派生的InputFormat。 使用一些现有的CSV Parser实现起来相对容易。 我正在使用OpenCSV(http://opencsv.sourceforge.net/)并对此感到满意。 处理数据的替代方法可能是蜂巢。 您可以将HDFS中的CSV文件作为外部表威胁,然后分别引用任何列。 具有定义UDF函数和自己的聚合函数的良好能力 - 可以通过这种方式完成许多类型的处理。 I think for this level of flexibi ...