转载请注明出处,谢谢合作~
Spark 概述
Apache Spark 是一个用于大规模数据处理的计算分析引擎,提供了不同语言(Java, Scala, Python, R)的 high-level API 和优化层来支撑通用性的执行流程图,同时提供了丰富的 higher-level 模块来应对不用的场景,包括采用 SQL 结构化数据处理的 Spark SQL 模块,适用于机器学习的 MLlib 模块,适用于图计算的 GraphX 模块,以及适用于增量计算和流式计算的 Structured Streaming 模块。
安全
Spark 中的安全机制默认是关闭的,这意味着在默认情况下你的 Spark 系统很容易收到攻击。请在下载和使用之前参考 Spark Security 。
下载
你可以从网站的下载页(downloads page)获取 Spark,该文档适用于 Spark 3.0.0 版本。Spark 采用 Hadoop 的客户端依赖库操作 HDFS 和 YARN,下载包提供了集成主流 Hadoop 版本的下载版本。用户也可以下载没有集成 Hadoop 的版本,通过配置 classpath 的方式(by augmenting Spark’s classpath)集成任意的 Hadoop 版本。Scala 和 Java 用户通过 Maven 将 Spark 融合到自己的项目当中,Python 用户可以通过 PyPI 安装 Spark。
如果你想通过源码编译 Spark,参见 Building Spark。
Spark 可以运行在 Windows 或者 UNIX-like (e.g. Linux, Mac OS) 系统,前提是提供相应版本的 Java,即可以运行在 x86_64 和 ARM64 平台的 JVM。只要你的环境变量 PATH 中配置有 java 命令所在的路径或者包含指向 Java 安装目录的JAVA_HOME
环境变量,就可以让 Spark 运行在任何一台机器上。
Spark 依赖 Java 8/11,Scala 2.12,Python 2.7+/3.4+ 和 R 3.1+。在 Spark 3.0.0 版本中,Java 8u92 之前的版本被标记为弃用,Python 2 和 低于 3.6 的 Python 被标记为弃用,低于 3.4 版本的 R 被标记为弃用。Spark 3.0 采用的 Scala 版本是 2.12,你需要使用相应版本的 Scala (2.12.x)。
对于 Java 11,当 Apache Arrow 的运行涉及到 Netty 时需要添加启动参数-Dio.netty.tryReflectionSetAccessible=true
,来避免错误:java.lang.UnsupportedOperationException: sun.misc.Unsafe or java.nio.DirectByteBuffer.(long, int) not available
。
运行示例和 Shell
Spark 提供了一些示例程序,不同语言版本(Scala, Java, Python and R )的示例程序存储在目录examples/src/main
当中。你可以在 Spark 的根目录使用命令 bin/run-example <class> [params]
运行 Java 或者 Scala 版本的示例程序(该命令会调用 spark-submit
script 脚本启动应用程序)。例如:
./bin/run-example SparkPi 10
你也可以通过相应版本的 Scala shell 来交互式的运行 Spark,这是学习 Spark 框架的一个很好的途径。
./bin/spark-shell --master local[2]
参数 --master
可以指定集群地址(master URL for a distributed cluster), 或者设置为 local
在本地单线程的运行,或者设置为 local[N]
在本地多线程的运行,N 表示线程数量。你应该在 local
模式下进行测试。可以通过 --help
参数获取完整的帮助信息。
Spark 同时提供了 Python API,可以通过启动 Python 解释器bin/pyspark
交互式的运行 Spark:
./bin/pyspark --master local[2]
示例应用程序也提供了 Python 版本,例如:
./bin/spark-submit examples/src/main/python/pi.py 10
在 1.4 版本之后 Spark 还提供了 R API (只包括 DataFrames API),可以通过启动 R 解释器`bin/sparkR 交互式的运行 Spark:
./bin/sparkR --master local[2]
示例应用程序也提供了 R 版本,例如:
./bin/spark-submit examples/src/main/r/dataframe.R
启动集群
Spark 集群模式概述(cluster mode overview)解释了在集群上运行 Spark 的一些关键概念,Spark 可以自己启动集群或者依赖现有的一些集群资源管理模块。目前提供的部署模式有以下几种:
- Standalone Deploy Mode:在独立集群部署 Spark
- Apache Mesos
- Hadoop YARN
- Kubernetes
接下来干点啥呢
编程指南:
- Quick Start:快速上手 Spark API,从这里开始!
- RDD Programming Guide:Spark 基础概念 - RDDs(核心但是比较老的 API),累加器,广播变量
- Spark SQL, Datasets, and DataFrames:通过关系型查询语句对结构化数据进行处理(比 RDDs 新的 API)
- Structured Streaming:通过关系型查询语句对结构化流式数据进行处理(采用 Datasets and DataFrames, 比 DStreams 新的 API)
- Spark Streaming:通过 DStreams 进行流式数据处理(老 API)
- MLlib:机器学习算法
- GraphX:图计算
API 文档:
- Spark Scala API (Scaladoc)
- Spark Java API (Javadoc)
- Spark Python API (Sphinx)
- Spark R API (Roxygen2)
- Spark SQL, Built-in Functions (MkDocs)
部署指南:
- Cluster Overview:集群模式涉及到的概念和模块概述
- Submitting Applications:打包部署应用程序
- 部署模式:
- Amazon EC2:在 5 分钟内让你的集群在 EC2 上跑起来的脚本
- Standalone Deploy Mode:不依赖第三方集群资源管理组件快速启动独立 Spark 集群
- Mesos:采用 Apache Mesos 部署私有集群
- YARN:把 Spark 部署在 Hadoop NextGen (YARN) 上
- Kubernetes:在 K8s 部署 Spark
其他文档:
- Configuration:自定义 Spark 配置
- Monitoring:监控 Spark 应用程序的行为和状态
- Tuning Guide:优化性能和内存使用的最佳实践
- Job Scheduling:在 Spark 应用程序中调度资源
- Security:Spark 安全模块
- Hardware Provisioning:集群硬件资源推荐
- 集成其他存储系统:
- Migration Guide:Spark 组件迁移指南
- Building Spark:通过 Maven 构建 Spark
- Contributing to Spark
- Third Party Projects:与 Spark 相关的第三方项目
外部资源:
- Spark Homepage:主页
- Spark Community:社区
- StackOverflow tag
apache-spark
- Mailing Lists:邮件列表,有什么问题都在这里提问
- AMP Camps:UC Berkeley 训练营:一些有关 Spark 的讨论和练习;线上免费资源:Videos, slides,exercises
-
Code Examples:示例代码,在
examples
的子目录中获取(Scala, Java, Python, R)