【Spark】Spark的安装与部署
这段时间太忙,现在终于有点时间补充一下近段日子来的学习笔记,下面讲一讲Spark的安装与部署。
Spark
- 它是一个快速的,通用的集群计算系统。它对Java,Scala,Python和R提供了高层API,并且有一个经优化的支持通用执行图计算的引擎。
- 它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL,用于机器学习的 MLlib,用于图计算的 GraphX 和 Spark Streaming
- 它基于Hadoop MapReduce,它扩展了MapReduce模型,以有效地将其用于更多类型的计算,包括交互式查询和流处理。 Spark的主要特性是它的内存中集群计算,提高了应用程序的处理速度。
总的来说,Spark凭借着内存迭代的特点,比MapReduce的速度更快,并且具有交互式计算模型DAG,拥有容错性数据集合RDD
Driver Program
- 分发任务
- 收集每一个任务的计算机过 注意:一般不会把任务的计算结果存储到Driver中,因为这可能造成Memory Overflow,很危险。一般会把计算结果存储在集群外部,比如MySQL,Oracle,Hbse,HDFS等
- 如果task执行失败,会重试
Spark core
包含两个内容,DAG和RDD。Spark core是spark生态圈的核心,负责读取数据和分布式计算。
- DAG——有向无环图,是一组顶点和边的组合,顶点代表了 RDD, 边代表了对 RDD 的一系列操作。
- RDD——容错分布式数据,RDD分布在不同的集群节点的内存中,可以理解为一大数组,数组的每一个元素就是RDD的一个分区,一个RDD可以分布并被运算在多态计算机节点的内存以及硬盘中, RDD数据块可以放在磁盘上也可以放在内存中(取决于你的设置),如果出现缓冲失效或丢失,RDD分区可以重新计算刷新,RDD是不能被修改的,但是可以通过API被变换生成新的RDD
总体来说Spark core就是spark功能调度管理中心,用来定义和管理RDD,RDD代表了一系列数据集合分布在基质的内存中,spark core 的任务就是对这些数据进行分布式计算 - Java 1.8,需要配置环境变量
- Scala 2.12.10,需要配置环境变量
- spark-2.4.4-bin-hadoop2.7.tgz,需要配置环境变量
此时在命令行输入spark-shell后,报的错误原因是hadoop没有安装
- Hadoop 2.7.1,需要配置环境变量
正常情况下是可以运行成功并进入到Spark的命令行环境下的,但是对于有些用户可能会遇到空指针的错误。这个时候,主要是因为Hadoop的bin目录下没有winutils.exe文件的原因造成的。这里的解决办法是https://github.com/steveloughran/winutils
安装配置成功:
Spark 脚本提交/运行/部署
-
Spark-shell
交互式窗口模式,spark-shell启动完成后,可以在交互窗口中输入scala命令,一行一行的运行 -
Pyspark
与spark-shell类似,是基于python的交互式运行窗口,以脚本的形式运行python命令。 -
Spark-submit
程序部署,spark提供了一个容易上手的应用程序部署工具bin/spark-submit,可以完成spark应用在local、standalone、YARN、Mesos上的快捷部署,可以指定集群资源master,executor/dirver的内存资源等
RDD 的转换操作是返回新的 RDD 的操作。转换出来的 RDD 是惰性求值的,只有在行动操作中用到这些 RDD 时才会被计算
行动操作用于执行计算并按指定的方式输出结果。行动操作接受 RDD,但是返回非 RDD,即输出一个值或者结果。在 RDD 执行过程中,真正的计算发生在行动操作。表 2 描述了常用的 RDD 行动操作。
Reference
- Apache Spark 官方文档中文版
https://github.com/apachecn/spark-doc-zh - Apache Spark Examples
http://spark.apache.org/examples.html - Spark机器学习