当前位置:   article > 正文

Linux-Spark集群与Scala语言的学习、搭建与配置(配图超详细)

Linux-Spark集群与Scala语言的学习、搭建与配置(配图超详细)

文章较长,附目录,此次安装是在VM虚拟环境下进行。文章第一节主要是介绍spark和scala,只需安装配置的朋友可以直接跳到文章第二节,希望我的文章能帮助到你。

目录

一、Spark与Scala介绍

spark

什么是spark?

Spark的历史

spark的特点

spark的组件

Spark生态圈

Scala

什么是Scala?

Scala与Spark的关系

二、下载Spark与Scala安装包

Spark官网地址

Scala官网地址

三、spark+Scala搭建

        Scala部署安装步骤

        spark部署与安装

拓展、Spark与MapReduce的区别


一、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集群搭建icon-default.png?t=N7T8https://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

  1. export SCALA_HOME=/usr/local/soft/scala-2.12.12
  2. export PATH=$PATH:${SCALA_HOME}/bin

刷新profile,使配置后的环境变量生效

source /etc/profile

验证scala

  1. scala -version
  2. scala

出现最后一个箭头指出的Scala即成功。

spark部署与安装

和Scala一样,将文件上传至root下的Downloads并解压Spark到opt下

tar -zxvf /root/Downloads/spark.tgz -C/opt/

  配置Spark的安装路径,并将其添加到系统的环境变量中

  1. vim /etc/profile
  2. export SPARK_HOME=/opt/spark-3.2.1
  3. export PATH=$PATH:${SPARK_HOME}/bin
  4. export PATH=$PATH:${SPARK_HOME}/sbin

刷新profile,使配置后的环境变量生效

source /etc/profile

先复制一下spark中conf的spark-env.sh.template与workers.template并更名

  1. cp /opt/spark-3.2.1/conf/spark-env.sh.template /opt/spark-3.2.1/conf/spark-env.sh
  2. cp /opt/spark-3.2.1/conf/workers.template /opt/spark-3.2.1/conf/workers

添加spark-env.sh文件中的环境变量  直接添加到文件结尾即可

  1. vim /opt/spark-3.2.1/conf/spark-env.sh
  2. export SCALA_HOME=/opt/scala-2.12.15
  3. export JAVA_HOME=/opt/jdk1.8.0_171
  4. export SPARK_MASTER_IP=BigData01
  5. export SPARK_WOKER_CORES=2
  6. export SPARK_WOKER_MEMORY=2g
  7. export HADOOP_CONF_DIR=/opt/HadoopHA
  8. #export SPARK_MASTER_WEBUI_PORT=8080
  9. #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

  1. vim /opt/spark-3.2.1/conf/workers
  2. BigData02
  3. BigData03

分发文件到自己的另外两个节点

  1. scp -r /opt/spark-3.2.1/ BigData02:/opt/
  2. scp -r /opt/spark-3.2.1/ BigData03:/opt/

分别在另外两个节点上上设置环境变量并刷新

  1. vim /etc/profile
  2. export SPARK_HOME=/opt/spark-3.2.1
  3. export PATH=$PATH:${SPARK_HOME}/bin
  4. export PATH=$PATH:${SPARK_HOME}/sbin
  5. source /etc/profile

启动集群

  1. 主节点下:
  2. cd /opt/spark-3.2.1/sbin/
  3. ./start-all.sh
  4. 三个节点分别:
  5. 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框架在数据处理方式、运行速度、容错性、编程模型和适用范围等方面存在明显的区别。选择使用哪个框架取决于具体的应用场景和需求。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/216115
推荐阅读
相关标签
  

闽ICP备14008679号