Spark 的使用场景和资源
这里有一些关于 Spark 的不同使用场景和资源:
什么情况下不需要使用 Spark
Spark 就是为处理单台机子无法承载的数据集而生的。但如果你只是处理小数据,那就不需要使用 Spark 了。如果你的数据可以装到一台电脑里,那你可以有很多别的选择去处理数据,比如:
- AWK - 一个处理文档数据的命令行工具
- R - 一个统计计算的编程语言和程序
- Python PyData Stack 一个包括 pandas matplotlib numpy 和 scikit-learn 等库的编程语言
如果你的数据量比内存稍大一些,你还是可以在一台电脑使用 pandas 处理数据。Pandas 也可以分段读取数据。根据你的使用场景,你可以过滤数据和把相关的数据写到硬盘里。
如果数据已经存储到了关系数据库里如 MySQL 或者 Postgres, 你可以利用 SQL 语句来提取、过滤和汇总数据。如果你想同时使用 pandas 和SQL,你可以使用如 SQLAlchemy 这样的库, 它提供了一个抽象层,通过它可以使用Python表达式来操作 SQL 表。
最常用的 Python 机器学习库是 scikit-learn。它有许多算法,涵盖了分类、回归和聚类算法,以及预处理数据、微调模型参数和测试模型结果。但是,如果你想使用更复杂的算法 - 比如深度学习 - 你需要进一步研究 TensorFlow 或 PyTorch。
Spark 的局限
Spark 也有一些局限。
Spark 数据流处理的延迟至少为500毫秒,因为它是将数据分成小批次来运行模拟流处理,而不是一次处理一条记录。有些原生的流处理工具,如 Storm, Apex 或者 Flink ,可以降低此延迟值,可能更适合低延迟应用程序。Flink 和 Apex 也可用于批处理计算,因此,如果你已经将它们用于流处理,则无需在你的科技树里添加 Spark 了。
Spark 的另外一个局限是机器学习的算法。目前,Spark仅支持随输入数据大小线性扩展的算法。通常来讲,深度学习也用不了,尽管有许多项目将Spark与Tensorflow和其他深度学习工具集成在一起。
Hadoop vs Spark
Hadoop 的生态系统比起Spark 的生态系统要老一些。通常来讲,Hadoop MapReduce 要比 Spark 要慢,因为 Hadoop会把中间数据写到硬盘里。但是,许多大公司,如 Facebook 和 LinkedIn,很早就开始使用大数据并围绕 Hadoop 生态系统构建其基础架构。
虽然Spark非常适合迭代算法,但在进行简单计数时并没有比 Hadoop MapReduce的性能有太大提升。为小的性能提升而把遗留代码换成 Spark,特别是在很多已经投入生产的节点上,可能不值得。
Spark之外的存储和大数据处理
除了Spark之外,还有许多工具可用于处理和分析大型数据集。
有时,使用SQL强大的功能和简单的操作来处理大数据也是可以的。某些数据库,如NoSQL和NewSQ,就是为应对这种情况而新开发出来的。
你可能听说过更新的数据库存储系统 HBase 或者 Cassandra。还有分布式的SQL引擎如 Impala 和 Presto。许多技术的语法查询语法和 Python 以及 SQL类似,如果你熟悉 Python 和 SQL ,那么你对这些查询语法应该也比较熟悉了。