scala - 将工作分配给多个核心 : Hadoop or Scala's parallel collections?

标签 scala hadoop mapreduce scala-collections parallel-collections

在 Scala/Hadoop 系统中充分利用多核进行并行处理的更好方法是什么?

假设我需要处理 1 亿份文档。文档不是很大,但处理它们是计算密集型的。如果我有一个包含 100 台机器的 Hadoop 集群,每台机器有 10 个内核,我可以:

A) 向每台机器发送 1000 个文档,让 Hadoop 在 10 个核心(或尽可能多的可用核心)中的每一个上启动一个映射

B) 向每台机器发送1000个文档(仍然使用Hadoop)并使用Scala的并行集合来充分利用多核。 (我会将所有文档放在一个并行集合中,然后对该集合调用 map)。换句话说,使用 Hadoop 在集群级别进行分发,并使用并行集合来管理分发到每台机器内的核心。

最佳答案

Hadoop 将提供的不仅仅是并行化。它提供了一个分发工作的平台、一个处理并发作业的调度程序、一个分布式文件系统、执行分布式归约的能力和容错能力。也就是说,这是一个复杂的系统,有时很难使用。

如果您计划让多个用户提交许多不同的作业,Hadoop 是最佳选择(在两个选项中)。但是,如果您致力于让集群始终通过相同的功能处理文档,那么您可以毫不费力地开发一个具有 Scala 并行集合和参与者的系统以进行机器间通信。 Scala 解决方案将为您提供更多控制权,系统可以实时响应,并且您不必处理大量与您的任务无关的 Hadoop 配置。

如果您需要在大量数据(大于单个节点上容纳的数据)上运行各种作业,请使用 Hadoop。如果您更详细地描述您的要求,我可以为您提供更多信息。

更新:一百万是一个相当小的数字。你可能想做一些计算,看看在一台机器上使用并行收集需要多长时间。这里的优势是开发时间最短!

关于scala - 将工作分配给多个核心 : Hadoop or Scala's parallel collections?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9730028/

相关文章:

hadoop - Parquet谓词下推

Hadoop Mapreduce HDFS block 拆分

Hadoop MapReduce : Two values as key in Mapper-Reducer

Scala:带有案例类和代码块的模式匹配选项

html - 在 Scala 中解析 HTML

hadoop - DataNode 未在任何节点上启动

python - 使用 appengine-mapreduce 达到内存限制

scala - Scala中的纯FP?

Scala Shapeless - 迭代/读取 Generic.Repr 的每个项目或将其转换为 HList

hadoop - pig : how to efficiently LOAD and FILTER a large dataset?