什么是spark?

Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。

Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里。

为什么要学Spark

Spark是一个开源的类似于Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Spark中的Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS(Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)),因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。它仅仅涉及数据计算,并没有涉及到数据存储,后期需要使用spark对接外部的数据源,比如hdfs。

Spark特性

比MapReduce快的原因:基于内存计算,在mapreduce任务后期计算每个job输出结果需要保存磁盘,后续其他job需要依赖于前面job输出结果。这样大量磁盘IO操作,
性能比较低。而spark在进行计算时候,job可以保存在内存中,后续其他job需要依赖于前面job输出结果。这个时候就直接从内存中获得到。避免磁盘io操作,性能比较高。

进程与线程:
mapreduce任务以进程 的方式运行在yarn集群中,比如程序由100个mapTask,一个task就需要一个进程,这些task要运行就需要开启100个进程。
spark任务以线程的方式运行在进程中,比如程序中有100个mapTask,后期一个task就对应一个线程,这里就不在是进程,这些task需要运行,这里可以极端一点:
只需要开启一个进程,在这个进程中启动100个线程就可以了。进程中可以启动很多个线程,而开启一个进程与开启一个线程需要的时间和调度代价是不一样。开启一个
进程需要的时间远远大于开启一个线程。

部署安装

资源准备

1. spark-2.4.7-bin-hadoop2.7   // 下载路径:<https://spark.apache.org/downloads.html>
2. java1.8.0_282   // <https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html>, 也可以直接yum install java
3. hadoop2.7       // <http://archive.apache.org/dist/hadoop/core/hadoop-2.7.1/>
4. Scale           // <https://www.scala-lang.org/download/2.11.12.htmlhttps://www.scala-lang.org/download/2.11.12.html>

Hadoop安装

[root@rmaster ~]# ssh-keygen -t rsa  # 分别在每台服务器上生成密钥对,复制每个id_rsa.pub到.ssh/authorized_keys,然后粘贴到每个服务器上