统一的大数据分析引擎:Spark
spark概述
spark是apache下的大数据处理分析引擎。它提供了 Java、Scala、Python 和 R 中的高级 API,以及支持通用执行图的优化引擎。它还支持丰富的高级工具集:
- SQL 和结构化数据处理的 Spark SQL
- 用于机器学习的 MLlib
- 用于图形处理的 GraphX
- 用于增量计算和流处理的结构化流
spark优点:
- 快速:Apache Spark 使用最先进的 DAG 调度器、查询优化器和物理执行引擎,为批处理和流数据实现了高性能
- 易用:超过80种的高级操作,使得spark很容易创建并行应用;可以很好的与python、java、R、SQL交互。
- 结合SQL、流、以及复杂的分析
- Spark 支持一系列库,包括 SQL 和 DataFrames、用于机器学习的 MLlib、GraphX 和 Spark Streaming。 您可以在同一个应用程序中无缝组合这些库
- Spark 可以在 Hadoop、Apache Mesos、Kubernetes、独立或云端运行。 它可以访问不同的数据源
安全
默认情况下,spark种的安全性是关闭的。这意味着很容易受到攻击;有关安全一节的讲解
下载
Spark 将 Hadoop 的客户端库用于 HDFS 和 YARN,为少数流行的 Hadoop 版本预先打包了下载。用户还可以下载“Hadoop free”二进制文件,并通过增加 Spark 的类路径来使用任何 Hadoop 版本运行 Spark。Scala 和 Java 用户可以使用其 Maven 将 Spark 包含在他们的项目中,Python 用户可以从 PyPI 安装 Spark。
如果你想要编译spark的源码,请参见building spark
spark可以在windows以及类unix系统上运行,它应该在运行受支持的 Java 版本的任何平台上运行。你只需要做的就是在你的系统上设置好java环境。
在安装spark时需要注意对应的编程语言以及所需环境的兼容性(省略了一部分关于兼容性方面的概述)。
- 对于 Python 3.9,由于 Apache Arrow 中支持的 Python 版本,Arrow 优化和 Pandas UDF 可能不起作用。请参考最新的python兼容性页面
- 对于 Java 11,Apache Arrow 库还需要
-Dio.netty.tryReflectionSetAccessible=true
(这可以防止 java.lang.UnsupportedOperationException: sun.misc.Unsafe 或 java.nio.DirectByteBuffer.(long, int) not available 当 Apache Arrow 在内部使用 Netty 时)
Spark示例
spark提供了多种开发环境下的示例,在examples/src/main
目录下。使用bin/run-example <class> [params]
命令来运行示例,在这个命令执行之后会调用更通用的spark-submit
脚本来启动应用程序。
./bin/run-example SparkPi 10
您还可以通过 Scala shell 的修改版本以交互方式运行 Spark。 这是学习框架的好方法
# 指定在本地使用2个线程运行
./bin/spark-shell --master local[2]
--master
选项指定了分布式集群的master
url、或指定本地使用一个线程在本地运行、或 指定local[N]
使用 N
个线程在本地运行;
使用
--help
帮助了解更多spark的选项意义
spark也提供了一个python
的API,在python 解释器中以交互方式运行 Spark:
./bin/pyspark --master local[2]
spark还提供了python的示例应用:
./bin/spark-submit examples/src/main/python/pi.py 10
spark从1.4版本提供了R
的API(只包括DataFrames APIs),在 R 解释器中以交互方式运行 Spark:
./bin/sparkR --master local[2]
spark还提供了R的示例应用:
./bin/spark-submit examples/src/main/r/dataframe.R
在集群上启动spark
在spark集群模式页面,解释了有关spark运行在集群上的重要概念。Spark 可以单独运行,也可以在多个现有的集群管理器上运行,目前提供了以下多种部署选项:
- standalone 部署模式:在一个私有集群上简单部署spark
- Apache Mesos
- Hadoop YARN
- Kubernetes