使用hadoop/hdfs比较100万个bio-metric(小)文件

vltsax25  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(347)

我是hadoop的初学者,阅读了hadoop中的smallfile问题,现在我有一个问题需要解决,请帮助我开始
问题:
源结果:大约100万+(约)个文件,每个文件大小接近1KB(无法阻止创建或调整大小)
结果分组:源结果分组为1000个文件一组。
所需任务:
组中的文件将以一对一的方式进行比较文件是遵循特定标准结构(头、内容等)的二进制细节(生物度量)文件
由于源代码的结果预计会随着时间的推移而增加,我想在hadoop上实现比较
hadoop的输入:

<inputfile示例>:
请注意,文件名是唯一的ID,单独发出文件名会有很大帮助

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

过程算法:(没有实现,只是一个想法)
逐行读取输入文件
在har://(例如:read)的帮助下读取行中的每个文件har:///08rtc345744.txt 以及har:///08rtc345746.txt )
使用相关的生物度量算法比较从hdfs(har)读取的文件
如果它们显示相似性,则发出
<harfile示例文件>

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

1) 用hadoop实现是更好的主意吗?
2) 我读到比较小文件在hadoop中是一个问题,为一组组生成一个har文件然后比较是否更好?
3) 我的进程算法:有效还是无效?
4) 有效率吗?我想,当然不是,还有别的想法吗?
5) 关于mapreduce的生物测量匹配有什么想法吗?
6) hbase是解决方案吗?

ki1q1bka

ki1q1bka1#

在hadoop集群中,您所拥有的数据量是可以处理的边界线。一个小的集群就足够了,除非你有更多的文件在里面。
这里的第一个问题是将数据摄取到集群中。你有很多小文件,每个都包含一个数据记录,如果我理解正确的话。你想要得到的是更少更大的文件。为了解决这个问题,我会在摄取之前或摄取时合并这些文件。har文件不是一个好的选择。有很多方法可以做到这一点,这主要取决于您的数据将如何到达您的集群,以及您以后将如何处理它。你可以退房。如果您的数据以无限流的形式传入,请 checkout :-apache flume-apache kafka-apache storm-apache spark如果您的数据已经在某个地方并且您正在执行一次性工作:-实现自己的程序来进行合并。
这里的共同点是,您希望将每个文件表示为一个数据记录。然后,您可以决定存储许多记录的文件格式。通过正确配置上述工具,您的hdfs上最终会出现包含数据记录的大文件。
然后您需要决定如何处理数据。您希望将记录相互比较,为此,还可以使用多种工具:
普通MapReduce。用低级工具实现一切。看看如何使交叉连接有效,因为这是你要做的。
Hive。实现一个调用比较算法的udf,并将整个作业表示为sql查询。
Pig。与hive类似,但有自己的脚本语言。
ApacheSpark。更新的工具,有一个很好的api,能够像mapreduce一样实现作业,但是更简单、更干净。
使用什么最终将取决于您的用例和可用环境。

相关问题