我正在学习更多关于hadoop及其应用程序的知识,我知道它适用于大量数据集和大型文件。假设我有一个应用程序,我正在处理相对少量的文件(比如100k),这对于像hadoop / hdfs这样的东西来说并不是一个巨大的数字。但是,在一台机器上运行需要花费大量的时间,所以我想分发这个过程。
问题可以分解为地图缩小样式问题(例如,每个文件可以独立处理,然后我可以聚合结果)。我愿意使用Amazon EC2等基础设施,但我不太确定要实际汇总流程结果的技术。看起来像hadoop在这里可能有点矫枉过正。
任何人都可以提供有关此类问题的指导吗?
答案 0 :(得分:1)
首先,您可能需要重新考虑您无法合并文件的假设。即使是图像也可以组合在一起 - 你只需要弄清楚如何以一种允许你在映射器中再次打破它们的方式来做到这一点。将它们与它们之间的某种哨兵值或幻数组合在一起可能会将它们变成一个巨大的文件。
其他选项包括HBase,您可以将图像存储在单元格中。 HBase还有一个内置的TableMapper和TableReducer,可以以半结构化的方式存储处理结果和原始数据。
编辑:关于“是Hadoop矫枉过正”的问题,您需要考虑以下事项:
Hadoop至少添加了一台开销机器(HDFS NameNode)。您通常不希望在该计算机上存储数据或运行作业,因为它是SPOF。
Hadoop最适合批处理数据,具有相对较高的延迟。正如@Raihan所提到的,如果您需要实时或低延迟的结果,还有其他几种FOSS分布式计算架构可以更好地满足您的需求。
100k文件不是很少。即使它们每个都是100k,也就是10GB的数据。
除了上述内容之外,Hadoop是一种处理分布式计算问题的相对低开销的方法。它背后有一个庞大而有用的社区,因此您可以在需要时快速获得帮助。它专注于在廉价硬件和免费操作系统上运行,因此确实没有任何重大开销。
简而言之,我会在你丢弃它之前尝试它。