我是hadoop的初学者,在hadoop中读取smallfile问题,现在我有一个问题需要解决,帮助我开始
问题:
来源结果:大约100万+(大约)文件,每个文件大小近1 kb(不能阻止创建或调整大小)
结果分组: 来源结果分组为1000个文件组。
需要的任务:
组中的文件将以一对一的方式进行比较 文件是遵循特定标准结构(标题,内容......等)的二进制细节(生物度量)文件
由于预期源结果会在当时增加,我想在hadoop上实施比较
输入Hadoop:
< InputFile> < HARFile> <输出>
< InputFile Sample>:
请注意,文件名是唯一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<文件名> <算>
醇>
< HARFile SAMPLE文件>
08RTC345744.txt
08RTC345746.txt
08RTC345745.txt
08RTC3457XX.txt
08RTXX457XB.txt
08YYC3457YY.txt
1)在Hadoop中实现是否更好?
2)我读到比较小文件是hadoop中的一个问题,是否最好为一组组形成一个HAR文件然后进行比较?
3)我的处理算法:是否有效?
4)效率高吗?我想,当然不是,还有其他想法吗?5)关于生物度量匹配的MapReduce的想法吗?
6)HBASE是解决方案吗?
答案 0 :(得分:0)
您拥有的数据量位于边界线,以便在hadoop群集中进行处理。除非你有更多的文件进入,否则一个小集群就足够了。
您遇到的第一个问题是将数据提取到群集中。如果我不正确的话,你有很多小文件,每个文件都包含一个数据记录。您想要最终得到的是较大的文件。为了解决这个问题,我会在摄取之前或摄取时合并文件。 HAR文件不是一个好选择。有多种方法可以做到这一点,这主要取决于您的数据将如何到达您的群集以及您将在以后如何处理它。你可以看看。 如果您的数据作为无限制的流进入,请查看: - 阿帕奇水槽 - 阿帕奇卡夫卡 - 阿帕奇风暴 - Apache Spark 如果您的数据已经存在,并且您正在做一次性工作: - 实现自己的合并程序。
这里常见的是您希望将每个文件表示为一个数据记录。然后,您可以决定要存储多个记录的文件格式。通过正确配置上述工具,您将在包含数据记录的HDFS上找到大文件。
然后您需要决定如何处理数据。您希望将记录相互比较,为此您还可以使用许多工具:
使用方法最终取决于您的使用案例和可用环境。