Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hadoop/HDFS进行100万个生物度量(小)文件比较_Java_Hadoop_Bigdata_Hadoop2_Hdf - Fatal编程技术网

Java 使用Hadoop/HDFS进行100万个生物度量(小)文件比较

Java 使用Hadoop/HDFS进行100万个生物度量(小)文件比较,java,hadoop,bigdata,hadoop2,hdf,Java,Hadoop,Bigdata,Hadoop2,Hdf,我是hadoop的初学者,阅读hadoop中的smallfile问题,现在我有一个问题需要解决,请帮助我开始 问题: 源结果:大约100多万(约)个文件,每个文件大小接近1KB(无法阻止创建或调整大小) 结果分组: 源结果被分组为1000个文件 所需任务: 要以一对一的方式比较组中具有的文件 文件是遵循特定标准结构(标题、内容等)的二进制细节(生物测量)文件 由于预期源代码的结果会随着时间的推移而增加,我想在hadoop上实现比较 Hadoop的输入: : 请注意,文件名是唯一的ID,仅发送文

我是hadoop的初学者,阅读hadoop中的smallfile问题,现在我有一个问题需要解决,请帮助我开始

问题:

源结果:大约100多万(约)个文件,每个文件大小接近1KB(无法阻止创建或调整大小)

结果分组: 源结果被分组为1000个文件

所需任务:

要以一对一的方式比较组中具有的文件 文件是遵循特定标准结构(标题、内容等)的二进制细节(生物测量)文件

由于预期源代码的结果会随着时间的推移而增加,我想在hadoop上实现比较

Hadoop的输入:

请注意,文件名是唯一的ID,仅发送文件名就可以起到很大的作用

            08RTC345744.txt 08RTC345746.txt
            08RTC345744.txt 08RTC3457XX.txt
            08RTXX457XX.txt 08YYC3457YY.txt
            ..................
             XXXXXXN.txt YYYYYYN.txt
处理算法:(它没有实现,只是一个想法)

  • 逐行读取输入文件
  • 在har://(例如:Read)的帮助下读取行中的每个文件har://xxx/08RTC345744.txt 及har://xxx/08RTC345746.txt )
  • 比较使用相关生物度量算法从hdfs(HAR)读取的文件
  • 如果它们显示相似性,则发出
  • 08RTC345744.txt 
    08RTC345746.txt
    08RTC345745.txt 
    08RTC3457XX.txt
    08RTXX457XB.txt 
    08YYC3457YY.txt
    
    1) 在Hadoop中实现是更好的主意吗

    2) 我读到比较小文件在hadoop中是一个问题,为一组组组形成一个HAR文件然后进行比较是否更好

    3) 我的处理算法:是否有效

    4) 效率高吗?我想,当然不是,还有其他想法吗

    5) 关于MapReduce的生物测量匹配有什么想法吗


    6) HBASE是一种解决方案吗?

    您拥有的数据量在边界线上,可以在hadoop集群中进行处理。一个小集群就足够了,除非你有更多的文件加入

    这里的第一个问题是将数据摄取到集群中。如果我理解正确的话,您有很多小文件,每个文件都包含一条数据记录。你想要的是更少的大文件。为了解决这个问题,我会在摄入之前或摄入时合并这些文件。HAR文件不是一个好的选择。有很多方法可以做到这一点,这主要取决于您的数据将如何到达集群以及以后如何处理。你可以退房。 如果您的数据以无限流的形式传入,请签出: -阿帕奇水槽 -阿帕奇·卡夫卡 -阿帕奇风暴 -阿帕奇火花 如果您的数据已经存在,并且您正在执行一次性工作: -实现自己的合并程序

    这里常见的一点是,您希望将每个文件表示为一条数据记录。然后,您可以决定存储多个记录的文件格式。通过正确配置上述工具,您最终将在HDF上创建包含数据记录的大型文件

    然后,您需要决定如何处理数据。您希望相互比较记录,为此,您还可以使用多种工具:

    • 普通MapReduce。用低级工具实现一切。查看如何有效地进行交叉连接,因为这正是您正在做的
    • 蜂箱。实现一个调用比较算法的UDF,并将整个作业表示为SQL查询
    • 猪。与hive类似,但有自己的脚本语言
    • 阿帕奇火花。具有良好API的更新工具,能够实现与MapReduce类似的作业,但更简单、更干净
    使用什么最终将取决于您的用例和可用环境