Hadoop hdfs中的两个文件比较

Hadoop hdfs中的两个文件比较,hadoop,mapreduce,Hadoop,Mapreduce,我想写一个MapReduce来比较hdfs中的两个大文件。你有没有想过如何做到这一点。或者,因为文件大小非常大,所以如果有其他方法进行比较,那么思想地图缩减将是一种理想的方法。 谢谢您的帮助。您可以通过两个步骤完成此操作 首先使行号成为文本文件的一部分: 假设初始文件如下所示: I am awesome He is my best friend 现在,将其转换为如下内容: 1,I am awesome 2,He is my best friend 这可以通过MapReduce作业本身或其他工

我想写一个MapReduce来比较hdfs中的两个大文件。你有没有想过如何做到这一点。或者,因为文件大小非常大,所以如果有其他方法进行比较,那么思想地图缩减将是一种理想的方法。
谢谢您的帮助。

您可以通过两个步骤完成此操作

  • 首先使行号成为文本文件的一部分:
  • 假设初始文件如下所示:

    I am awesome
    He is my best friend
    
    现在,将其转换为如下内容:

    1,I am awesome
    2,He is my best friend
    
    这可以通过MapReduce作业本身或其他工具来完成

    二,。现在编写一个MapReduce步骤,其中在mapper中,行号作为键,实际句子的其余部分作为值。然后在reducer中比较这些值。当它不匹配时,输出行号(键)和有效负载,无论您在这里想要什么。此外,如果
    值的计数仅为1,则这也是不匹配的

    编辑:更好的方法

    更好的方法是,只需在映射器中发出一次读取的完整行作为键,并将值设为数字,例如1。因此,以我上面的示例为例,映射器输出如下:

    < I am awesome,1 >
    
    < He is my best friend,1 >
    
    <我太棒了,1>
    <他是我最好的朋友,1>
    
    在reducer中,只需检查
    值的计数
    ,如果不是2,则表示不匹配


    但是这种方法有一个缺点,如果有可能在两个不同的地方出现完全相同的行,那么不必检查reducer中给定键的
    值的长度,而应该将其检查为2的倍数。

    一个可能的解决方案是,在映射作业中将行号作为计数。 有两个文件,如下所示:

    文件1: 我在这里,第一行 我很棒——第二行 你是我最好的朋友——第三行

    文件2也是类似的类型

    现在您的地图作业输出应该是这样的,

    一旦完成了两个文件的映射作业,就有两条记录(key,value)要减少的值相同


    在reduce时,您可以比较计数器或生成输出,依此类推。如果线路也存在于不同的位置,则输出可能不匹配,这表明该线路不匹配

    我有一个比较文件和密钥的解决方案。在您的例子中,如果您知道您的ID是唯一的,那么您可以在映射中将ID作为键发出,将整个记录作为值发出。假设您的文件具有ID,Line1然后作为键和值从映射器发出

    在洗牌和排序阶段,ID将被排序,您将获得一个迭代器,其中包含来自这两个文件的数据。即,来自两个具有相同ID的文件的记录将在同一迭代器中结束

    然后在reducer中,比较迭代器中的两个值,如果它们匹配,则继续下一个记录。否则,如果它们不匹配,则将它们写入输出

    我这样做了,效果很好

    场景-没有匹配的键 如果两个文件之间没有匹配的ID,它们将只有一个迭代器值

    场景2-重复密钥 如果文件有重复的键,迭代器将有2个以上的值

    注意:仅当迭代器只有2个值时,才应比较这些值。 **提示:**迭代器的值不会总是按顺序排列。要识别特定文件中的值,请在映射器中的行末尾添加一个小指示器,如Line1;文件1 第1行;文件2
    然后在reducer上,您将能够识别哪个值属于哪个映射器。

    您好,Amar,谢谢您的回复。但是我的文件有两个文件中都显示的项目ID。我需要比较两个ID是否相同以及它们对应的值。文件中有什么并不重要,对吗?你说的比较是指二进制比较,对吗?在你的文件中,你可以有一个id,而不是
    I awesome
    ,比如说
    1234456565
    。我的意思是,假设我有这两个文件。文件1包含ID:1…。。身份证号码:2…。身份证号码:3…。文件2 ID:5…。。身份证号码:3…。ID:6…。现在进行比较。我需要首先匹配两个文件中的ID,然后进行比较。而且顺序也没有问题。做一件事,从你的两个文件中发布一个片段,并详细说明这个问题。我需要整理整行代码,它们以ID开头,在同一行中有几个其他值。