小型Java分布式编程

小型Java分布式编程,java,amazon-ec2,hadoop,distributed-computing,Java,Amazon Ec2,Hadoop,Distributed Computing,我正在学习更多关于hadoop及其应用程序的知识,我知道它面向海量数据集和大型文件。假设我有一个应用程序,其中我处理的文件数量相对较少(比如100k),对于hadoop/hdfs之类的东西来说,这并不是一个很大的数字。但是,在一台机器上运行确实需要大量的时间,所以我想分发这个过程 该问题可以分解为map reduce样式的问题(例如,每个文件都可以独立处理,然后我可以聚合结果)。我对使用AmazonEC2这样的基础设施持开放态度,但我不太确定要探索哪些技术来实际聚合过程的结果。看起来hadoop

我正在学习更多关于hadoop及其应用程序的知识,我知道它面向海量数据集和大型文件。假设我有一个应用程序,其中我处理的文件数量相对较少(比如100k),对于hadoop/hdfs之类的东西来说,这并不是一个很大的数字。但是,在一台机器上运行确实需要大量的时间,所以我想分发这个过程

该问题可以分解为map reduce样式的问题(例如,每个文件都可以独立处理,然后我可以聚合结果)。我对使用AmazonEC2这样的基础设施持开放态度,但我不太确定要探索哪些技术来实际聚合过程的结果。看起来hadoop在这里可能有点过头了


有人能就这类问题提供指导吗?

首先,您可能需要重新考虑您不能合并文件的假设。即使是图像也可以组合——你只需要找出一种方法,让你可以在你的映射器中再次分解它们。将它们与某种类型的哨兵值或它们之间的魔法数字相结合,可能使它们成为一个巨大的文件

其他选项包括HBase,您可以在其中将图像存储在单元格中。HBase还具有内置的TableMapper和TableReducer,可以以半结构化方式将处理结果与原始数据一起存储

<>编辑:至于“Hadoop过度杀戮”问题,你需要考虑如下:

  • Hadoop至少增加了一台机器的开销(HDFS NameNode)。您通常不希望在该机器上存储数据或运行作业,因为它是SPOF

  • Hadoop最适合批量处理数据,延迟相对较高。正如@Raihan所提到的,如果您需要实时或低延迟的结果,还有其他几种FOSS分布式计算体系结构可以更好地满足您的需求

  • 10万个文件并不是那么少。即使每个都是100k,也就是10GB的数据

  • 除上述之外,Hadoop是处理分布式计算问题的一种开销相对较低的方法。它背后有一个巨大的、有帮助的社区,所以如果你需要帮助,你可以很快得到帮助。而且它专注于在廉价硬件和免费操作系统上运行,因此实际上没有任何显著的开销


  • 简言之,在您将其用于其他用途之前,我会先试用它。

    首先,您可能需要重新考虑您无法合并文件的假设。即使是图像也可以组合——你只需要找出一种方法,让你可以在你的映射器中再次分解它们。将它们与某种类型的哨兵值或它们之间的魔法数字相结合,可能使它们成为一个巨大的文件

    其他选项包括HBase,您可以在其中将图像存储在单元格中。HBase还具有内置的TableMapper和TableReducer,可以以半结构化方式将处理结果与原始数据一起存储

    <>编辑:至于“Hadoop过度杀戮”问题,你需要考虑如下:

  • Hadoop至少增加了一台机器的开销(HDFS NameNode)。您通常不希望在该机器上存储数据或运行作业,因为它是SPOF

  • Hadoop最适合批量处理数据,延迟相对较高。正如@Raihan所提到的,如果您需要实时或低延迟的结果,还有其他几种FOSS分布式计算体系结构可以更好地满足您的需求

  • 10万个文件并不是那么少。即使每个都是100k,也就是10GB的数据

  • 除上述之外,Hadoop是处理分布式计算问题的一种开销相对较低的方法。它背后有一个巨大的、有帮助的社区,所以如果你需要帮助,你可以很快得到帮助。而且它专注于在廉价硬件和免费操作系统上运行,因此实际上没有任何显著的开销


  • 简言之,在你放弃它去做其他事情之前,我会先试试。

    我不太明白。Hadoop的reduce阶段就是为了聚合计算结果。是的,但不是使用hdfs,在hdfs中,当我有一堆小文件时,文件大小应该更大一些(我知道有一些技术可以聚合这些文件,在我的例子中,这些文件是不同的文件,比如图像)。我想如果hdfs不合适,我可以一直使用s3之类的东西?你是对的,hdfs不适用于大量的小文件,而且性能非常差,我可以从我自己对大学“集群”的实验中告诉你这一点。幸运的是,我的文件是文本文件,所以将它们合并成一个大文件是可能的,我认为它将性能提高了60倍。:)所以我不确定将文件聚合成更大的文件是否是正确的方法,问题是,这一限制与硬盘是机械式的,因此每次跳转到新文件时,磁头都需要寻找下一个读取位置这一事实紧密相关,而且此操作成本高昂。这就是为什么按顺序读取单个文件要快得多的原因。我不确定我是否理解。Hadoop的reduce阶段就是为了聚合计算结果。是的,但不是使用hdfs,在hdfs中,当我有一堆小文件时,文件大小应该更大一些(我知道有一些技术可以聚合这些文件,在我的例子中,这些文件是不同的文件,比如图像)。我想如果hdfs不合适,我可以一直使用s3之类的东西?你是对的,hdfs不适用于大量的小文件,而且性能非常差,我可以从我自己对大学“集群”的实验中告诉你这一点。幸运的是,我的文件是文本文件,所以将它们合并成一个大文件是可能的,它可以改进