使用 mapreduce 编程模型可以解决哪些不同类别的数据科学问题?
Hadoop的数据科学和MapReduce编程模型
我们先把它分成几部分。
数据科学是关于从原始数据中获取知识。它使用机器学习、统计和其他领域来简化(甚至自动化)决策。数据科学技术可能适用于任何数据大小,但更多的数据意味着更好的预测,从而更精确的决策。
Hadoop是一组旨在处理大量数据的工具的通用名称。Hadoop 中两个最重要的组件是 HDFS 和 MapReduce。
HDFS或 Hadoop 分布式文件系统,是一种特殊的分布式存储,能够保存非常大的数据量。HDFS 上的大文件被分割成块,对于每个块,HDFS API 都会公开其位置。
MapReduce是用于在具有数据的节点上运行计算的框架。MapReduce 大量使用HDFS 暴露的数据局部性:如果可能,数据不会在节点之间传输,而是将代码与数据一起复制到节点。
所以基本上任何不破坏数据局部性原则的问题(包括数据科学任务)都可以使用 MapReduce 有效地实现(并且许多其他问题可能没有那么有效地解决,但仍然足够简单)。
让我们举一些例子。很多时候,分析师只需要对他的表格数据进行一些简单的统计。在这种情况下, Hive基本上是 MapReduce 上的 SQL 引擎,工作得很好(还有 Impala、Shark 等,但它们不使用 Hadoop 的 MapReduce,稍后会详细介绍)。
在其他情况下,分析师(或开发人员)可能希望使用以前的非结构化数据。纯 MapReduce 非常适合转换和标准化数据。
有些人习惯于使用 R 之类的工具进行探索性统计和可视化。使用RHadoop包可以将这种方法应用于大数据量。
当谈到基于 MapReduce 的机器学习时,Apache Mahout是第一个提到的。
然而,即使存在数据局部性,也有一种算法在 Hadoop 上运行缓慢,即迭代算法。迭代算法往往有多个 Map 和 Reduce 阶段。Hadoop 的 MR 框架在每个阶段(有时介于两者之间)读取和写入数据到磁盘,这使得迭代(以及任何多阶段)任务非常缓慢。
幸运的是,有一些替代框架既可以使用数据局部性,也可以在阶段之间将数据保存在内存中。可能,其中最引人注目的是Apache Spark。Spark 完全替代了 Hadoop 的 MapReduce,后者使用自己的运行时并公开了相当丰富的 API 来操作您的分布式数据集。Spark 有几个与数据科学密切相关的子项目:
- Shark和Spark SQL 为存储在 HDFS 上的数据提供了类似 SQL 的替代接口
- Spark Streaming可以轻松处理连续数据流(例如 Twitter 提要)
- MLlib使用非常简单灵活的 API 实现了许多机器学习算法
- GraphX支持大规模图形处理
因此,您可以使用 Hadoop 和相关项目解决大量数据科学问题。
数据科学有许多不同的子领域,如我的帖子中所述)。几乎对于每个领域,科学家和开发人员都做出了重大贡献。要了解有关可以做什么的更多信息,请查看以下网站:
- 数据挖掘算法和机器学习 -> Apache Mahout
- 统计-> RHadoop
- 数据仓库和数据库查询 -> SQL-MapReduce
- 社交网络分析 ->文章
- 生物信息学 ->文章 - 1 ,文章 - 2
此外,还有一些关于 MapReduce + Excel + Cloud 组合的工作,但我还没有找到链接。
数据科学问题有哪些不同类别...
每个“类”都不是纯粹的同质问题域,即由于其通信成本或算法行为,某些问题无法通过 map 和 reduce 方法解决。我所说的行为是指某些问题想要控制所有数据集而不是块。因此,我拒绝列出问题“类”的类型。
不要忘记知道 MapReduce 能做什么对于数据科学来说是不够的。您还应该了解MapReduce 不能做什么。
map/reduce 最适合可并行的离线计算。更准确地说,当可以从输入分区的某些函数的结果中找到结果时,它的效果最好。平均是一个简单的例子;您可以通过对每个分区求和,返回总和和分区中元素的数量,然后使用这些中间结果计算总体平均值来使用 map/reduce 来做到这一点。当中间步骤取决于其他分区的状态时,它不太合适。