使用 Hadoop/HDFS 比较 100 万个生物特征(小)文件

Posted

技术标签:

【中文标题】使用 Hadoop/HDFS 比较 100 万个生物特征(小)文件【英文标题】:1 million bio-metric (small) File Comparison Using Hadoop/HDFS 【发布时间】:2014-12-26 06:04:21 【问题描述】:

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

问题:

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

结果分组: 源结果被分成 1000 个文件 A 组。

需要的任务:

组中的文件将以一对一的方式进行比较 文件是遵循特定标准结构(标题、内容...等)的二进制细节(生物特征)文件

由于源结果预计会随着时间增加,我想在hadoop上实现比较

Hadoop 的输入:

请注意,文件名是唯一的 id,单独发出文件名会有很大帮助

            08RTC345744.txt 08RTC345746.txt
            08RTC345744.txt 08RTC3457XX.txt
            08RTXX457XX.txt 08YYC3457YY.txt
            ..................
             XXXXXXN.txt YYYYYYN.txt

流程算法:(没有实现,只是一个想法)

    逐行读取输入文件 借助 har:// 读取行中的每个文件(例如:读取 har://xxx/08RTC345744.txt 和 har://xxx/08RTC345746.txt) 比较使用相关生物特征算法从 hdfs (HAR) 读取的文件 如果它们显示相似 Emit

08RTC345744.txt 
08RTC345746.txt
08RTC345745.txt 
08RTC3457XX.txt
08RTXX457XB.txt 
08YYC3457YY.txt

1) 在 Hadoop 中实现是不是更好?

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

3) 我的 流程算法: 是否有效?

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

5) 关于 MapReduce 在生物特征匹配方面的任何想法?

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

【问题讨论】:

【参考方案1】:

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

您遇到的第一个问题是将数据摄取到集群中。如果我没有正确理解,您有很多小文件,每个文件都包含一个数据记录。您最终想要的是更少的大文件。为了解决这个问题,我会在摄取之前或摄取时合并文件。 HAR 文件不是一个好的选择。您可以通过多种方式做到这一点,这主要取决于您的数据将如何到达您的集群以及您稍后将如何处理它。你可以去看看。 如果您的数据以无限流的形式出现,请查看: - 阿帕奇水槽 - 阿帕奇卡夫卡 - 阿帕奇风暴 - 阿帕奇火花 如果您的数据已经在某个地方并且您正在做一次性工作: - 实现您自己的合并程序。

这里的共同点是您希望将每个文件表示为一个数据记录。然后,您可以决定要存储许多记录的文件格式。通过正确配置上述工具,您最终会在 HDFS 上生成包含数据记录的大文件。

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

普通 MapReduce。使用低级工具实现一切。查看如何有效地进行交叉连接,因为这就是您正在做的事情。 蜂巢。实现一个 UDF,它调用您的比较算法并将整个作业表示为 SQL 查询。 猪。类似于 hive,但有自己的脚本语言。 阿帕奇星火。具有良好 API 的较新工具,能够像 MapReduce 一样实现工作,但方式更简单、更简洁。

使用什么最终取决于您的用例和可用环境。

【讨论】:

以上是关于使用 Hadoop/HDFS 比较 100 万个生物特征(小)文件的主要内容,如果未能解决你的问题,请参考以下文章

hadoop hdfs设置quota

《深入剖析Hadoop HDFS》思维导图

这是一篇最通熟易懂的Hadoop HDFS实践攻略!

Hadoop3 - HDFS 文件存储策略

Hadoop3 - HDFS 文件存储策略

Hadoop3 - HDFS 文件存储策略