文章较长,附目录,此次安装是在VM虚拟环境下进行。文章第一节主要是介绍spark和scala,只需安装配置的朋友可以直接跳到文章第二节,希望我的文章能帮助到你。
目录
一、Spark与Scala介绍
spark
什么是spark?
Spark官网介绍
Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters.
Apache Spark™ 是一种多语言引擎,用于在单节点机器或集群上执行数据工程、数据科学和机器学习。
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。
是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。
Spark的历史
Spark的历史
Apache Spark是一个大数据处理框架,其历史可以追溯到2009年,当时它诞生于美国加州大学伯克利分校的AMP实验室。最初,Spark只是一个实验性的项目,代码量非常少,属于轻量级的框架。然而,随着大数据和机器学习领域的快速发展,Spark逐渐受到了广泛的关注和应用。
在2010年,伯克利大学正式开源了Spark项目,这为其后续的快速发展奠定了基础。随着越来越多的开发者和公司开始使用Spark,它的生态系统也逐渐丰富起来,包括Spark SQL、Spark Streaming、MLlib和GraphX等组件的加入,使得Spark成为了一个功能强大的大数据处理框架。
2013年,Spark成为了Apache软件基金会下的顶级项目,这也标志着Spark进入了高速发展的阶段。在这个阶段,Spark的社区活跃度非常高,吸引了大量的第三方开发者贡献代码和优化算法,从而使得Spark的性能和功能得到了不断提升。
随着时间的推移,Spark在大数据领域的应用越来越广泛,成为了大数据处理领域的领导者之一。现在,Spark已经被广泛应用于数据仓库、实时数据流处理、机器学习、图形计算等多个领域,并且还在不断扩展其应用范围。
总之,Apache Spark的历史充满了发展和创新,其从轻量级框架逐渐演变成为功能强大的大数据处理框架,为大数据和机器学习领域的发展做出了重要贡献。
spark的特点
Spark是一种快速、通用、易用、代码简洁、可扩展的大数据处理引擎,具有以下特点:
- 速度快:Spark利用内存计算和DAG(有向无环图)执行引擎等技术,使得处理大规模数据时具有非常高的速度。
- 通用性强:Spark支持多种数据处理方式,包括批处理、流处理、机器学习、图形处理等,可以处理多种数据类型和来源。
- 可扩展性好:Spark可以方便地水平扩展,支持在分布式环境下运行,能够处理海量数据。
- 容错性强:Spark支持数据的弹性分布式数据集(RDD),可以在节点发生故障时进行数据重建和恢复。
- 易于使用:Spark支持使用Scala、Java、Python和R语言进行编程,提供了丰富的API和库,使得开发人员可以更加便捷地使用Spark进行大数据处理。
- 生态系统完善:Spark的生态系统包含了众多组件,如Spark SQL、Spark Streaming、MLlib、GraphX等,这些组件可以相互协作,提供了完整的大数据解决方案。
Spark高级组件架构
spark的组件
spark的框架中包含多个紧密的组件,这些组件分别承担以下作用:
- SparkSQL是Apache Spark用于处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame,并且可以作为分布式SQL查询引擎来使用,SparkSQL是一个功能强大、易于使用的分布式SQL查询引擎,它提供了统一的数据访问方式、Hive集成和标准连接等特性,使得用户可以方便地进行大数据处理和分析。
- Spark Streaming是Apache Spark的一个扩展模块,用于实时数据流的处理。它是一个流式处理框架,可以对来自各种数据源(如Kafka、Flume、Twitter、ZeroMQ或TCP sockets等)的实时数据流进行高效、容错的处理。
- Spark MLlib是Apache Spark的机器学习库,它提供了许多常见的机器学习算法和工具,用于数据挖掘和预测分析。MLlib的设计目标是使机器学习算法易于使用和扩展,同时保持高性能。
- Spark GraphX 是 Apache Spark 的一个分布式图处理框架,它基于 Spark 平台提供对图计算和图挖掘的简洁易用且丰富的接口,极大地方便了对分布式图处理的需求。
- Apache Spark是一个快速、通用、可扩展的大数据处理引擎,专为大规模数据处理而设计。
Spark生态圈
Spark生态圈
Spark生态圈以Spark Core为核心,从HDFS、Amazon S3和HBase等持久层读取数据,以Mesos、YARN和自身携带的Standalone为Cluster Manager调度Job,完成Spark应用程序的计算。这些应用程序可以来自于不同的组件,包括Spark SQL、Spark Streaming、MLlib、GraphX等。
Scala
什么是Scala?
Scala是一门多范式的编程语言,并集成面向对象编程和函数式编程的各种特性。它是一种面对对象的语言。每个值、每一个函数都是一个对象,所以Scala具有非常强的面对对象编程的特性,如封装、继承和多态性。
同时,Scala也是一门函数式的编程语言,它支持嵌套,代表每一位程序员都可以用它来写出具有简洁性、可读性和可组合性,适合编写高效、可维护的代码
Scala与Spark的关系
Scala与Spark的关系非常密切,可以说是Spark的主要编程语言之一。Spark是由Scala编写的,并且Spark的API也是用Scala编写的。因此,使用Scala编写Spark应用程序可以更加直接、高效和简洁。同时,Scala还支持与其他编程语言的互操作性,为开发人员提供了更加灵活的应用场景选择。
二、下载Spark与Scala安装包
Spark官网地址
Scala官网地址
我这里使用的是Linux搭建,下载后缀名为.rgz,如果是在其他系统搭建,请下载对应版本。
选择好你需要的版本,保存到本地。推荐保存到除C盘以外任何盘
三、spark+Scala搭建
注:在搭建前需要有java,Hadoop的集群支持,我这里使用的是已经搭建好了的。没有搭建的朋友可以跟着我的这篇文章搭建。Hadoop集群搭建https://blog.csdn.net/qq_49513817/article/details/136525399?spm=1001.2014.3001.5501
Scala部署安装步骤
将文件上传至root下的Downloads并解压Scala到opt下
tar -zxvf /root/Downloads/scala-2.12.15.tgz -C/opt/
配置Scala的安装路径,并将其添加到系统的环境变量中
vim /etc/profile
export SCALA_HOME=/opt/scala-2.12.15
export PATH=$PATH:${SCALA_HOME}/bin
刷新profile,使配置后的环境变量生效
source /etc/profile
验证scala
scala -version
scala
出现最后一个箭头指出的Scala即成功。
spark部署与安装
和Scala一样,将文件上传至root下的Downloads并解压Spark到opt下
tar -zxvf /root/Downloads/spark.tgz -C/opt/
配置Spark的安装路径,并将其添加到系统的环境变量中
vim /etc/profile
export SPARK_HOME=/opt/spark-3.2.1
export PATH=$PATH:${SPARK_HOME}/bin
export PATH=$PATH:${SPARK_HOME}/sbin
刷新profile,使配置后的环境变量生效
source /etc/profile
先复制一下spark中conf的spark-env.sh.template与workers.template并更名
cp /opt/spark-3.2.1/conf/spark-env.sh.template /opt/spark-3.2.1/conf/spark-env.sh
cp /opt/spark-3.2.1/conf/workers.template /opt/spark-3.2.1/conf/workers
添加spark-env.sh文件中的环境变量 直接添加到文件结尾即可
vim /opt/spark-3.2.1/conf/spark-env.sh
export SCALA_HOME=/opt/scala-2.12.15
export JAVA_HOME=/opt/jdk1.8.0_171
export SPARK_MASTER_IP=BigData01
export SPARK_WOKER_CORES=2
export SPARK_WOKER_MEMORY=2g
export HADOOP_CONF_DIR=/opt/HadoopHA
#export SPARK_MASTER_WEBUI_PORT=8080
#export SPARK_MASTER_PORT=7070
其中SCALA_HOME、JAVA_HOME、HADOOP_CONF_DIR分别对应Scala、Java、Hadoop的路径,SPARK_MASTER_IP是自己的主机ip,SPARK_WOKER_CORES是每个节点能使用的内核数量,SPARK_WOKER_MEMORY是工作节点赋予的内存大小
修改从节点ip 修改为自己的另外两个节点ip
vim /opt/spark-3.2.1/conf/workers
BigData02
BigData03
分发文件到自己的另外两个节点
scp -r /opt/spark-3.2.1/ BigData02:/opt/
scp -r /opt/spark-3.2.1/ BigData03:/opt/
分别在另外两个节点上上设置环境变量并刷新
vim /etc/profile
export SPARK_HOME=/opt/spark-3.2.1
export PATH=$PATH:${SPARK_HOME}/bin
export PATH=$PATH:${SPARK_HOME}/sbin
source /etc/profile
启动集群
主节点下:
cd /opt/spark-3.2.1/sbin/
./start-all.sh
三个节点分别:
jps
在主节点上出现Master 在s1上出现Worker在s2上出现Worker
在浏览器上输入自己的ip:8080查看
至此、Spark搭建成功
拓展、Spark与MapReduce的区别
Spark框架与MapReduce框架
虽然Spark框架与MapReduce框架都是用于处理大规模数据的分布式计算框架,但它们之间存在一些关键的区别。
- 数据处理方式:MapReduce采用批量处理的方式,将输入数据分割成小块进行并行处理。这意味着它需要将中间结果写入磁盘,然后在下一阶段读取这些结果进行计算。相比之下,Spark采用基于内存的数据处理方式,可以在内存中对数据进行操作,避免了磁盘I/O的性能瓶颈,从而大大提高了计算速度。
- 运行速度:由于Spark将中间结果缓存在内存中,减少了数据在磁盘和内存之间的交换,因此其运行速度通常比MapReduce更快。这在迭代算法、交互式查询等场景中尤为明显,Spark在这些场景下能够更好地发挥优势。
- 容错性:Spark的容错性较高,它采用了DAG(有向无环图)的分布式并行计算模型,能够自动检测并恢复失败的任务,确保计算的正确性和可靠性。而MapReduce的容错性相对较低,需要手动处理失败的任务。
- 编程模型:MapReduce的编程模型相对简单,只提供了map和reduce两种操作。而Spark提供了更丰富的操作类型,包括转换和行动操作两大类,这使得Spark在编程上更加灵活和通用。
- 适用范围:MapReduce适合对静态数据进行离线批处理操作,例如日志分析、网页排名等。而Spark适合对实时流式数据进行实时计算、交互式查询、机器学习等高级应用。然而,需要注意的是,Spark在处理实时流式数据时,需要更多的内存来实现快速处理。
综上所述,Spark框架与MapReduce框架在数据处理方式、运行速度、容错性、编程模型和适用范围等方面存在明显的区别。选择使用哪个框架取决于具体的应用场景和需求。