Spark集群的详细安装步骤以及idea编写WordCount程序

本文详细介绍了Spark的概述,强调了其速度快、易用、通用和兼容性的特点。接着,文章逐步指导如何安装Spark集群,包括下载安装包、配置文件、启动和停止服务,以及访问Web界面。在内容的最后部分,文章讲述了如何在IDEA中创建Maven项目编写WordCount程序,并提交到Spark集群执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们简单讲述了一些为什么要学习scala?scala和Spark是个怎样的关系。
通过我们前面的讲解我们也知道了spark底层是用scala来编写的 ,要想学好spark 我们就必须会scala这门语言。那么我们今天就来简单讲解一下Spark

Spark入门

一、Spark概述

1.1什么是Spark

什么是Spark(官网:http://spark.apache.org
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已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。

1.2为什么要学习Spark

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

Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。

1.3Spark特点

1.3.1快

与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。
在这里插入图片描述

1.3.2易用

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。
在这里插入图片描述

1.3.3通用

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

1.3.4兼容性

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。
在这里插入图片描述

二、Spark集群安装

2.1下载Spark安装包

下载地址spark官网:http://spark.apache.org/downloads.html
这里我们使用 spark-2.0.2-bin-hadoop2.7版本.
在这里插入图片描述

2.2规划安装目录

mkdir /opt/bigdata

2.3上传解压安装包

tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz

2.4重命名目录

mv spark-2.0.2-bin-hadoop2.7 spark

2.5修改配置文件

配置文件目录在 /opt/bigdata/spark/conf

vi spark-env.sh

修改文件(先把spark-env.sh.template重命名为spark-env.sh)

#配置java环境变量
export JAVA_HOME=/opt/bigdata/jdk1.7.0_67
#指定spark老大Master的IP
export SPARK_MASTER_HOST=node1
#指定spark老大Master的端口
export SPARK_MASTER_PORT=7077

vi slaves 修改文件(先把slaves.template重命名为slaves)

node2
node3
node4

2.6拷贝配置到其他主机

通过scp 命令将spark的安装目录拷贝到其他机器上

scp -r /opt/bigdata/spark node2:/opt/bigdata
scp -r /opt/bigdata/spark node3:/opt/bigdata
scp -r /opt/bigdata/spark node4:/opt/bigdata

2.7配置Spark环境变量

将spark添加到环境变量,添加以下内容到 /etc/profile

export SPARK_HOME=/opt/bigdata/spark
export PATH=$PATH:$SPARK_HOME/bin

注意最后 source /etc/profile 刷新配置

2.8启动Spark

在主节点上启动spark

/opt/bigdata/spark/sbin/start-all.sh 

2.9停止Spark

在主节点上停止spark集群

/opt/bigdata/spark/sbin/stop-all.sh 

2.10Spark的Web界面

正常启动spark集群后,可以通过访问 http://node1:8080,查看spark的web界面,查看相关信息。

三、Spark角色介绍

Spark是基于内存计算的大数据并行计算框架。因为其基于内存计算,比Hadoop中MapReduce计算框架具有更高的实时性,同时保证了高效容错性和可伸缩性。从2009年诞生于AMPLab到现在已经成为Apache顶级开源项目,并成功应用于商业集群中,学习Spark就需要了解其架构。
Spark架构图如下:
在这里插入图片描述
Spark架构使用了分布式计算中master-slave模型,master是集群中含有master进程的节点,slave是集群中含有worker进程的节点。

  • Driver Program :运⾏main函数并且新建SparkContext的程序。
  • Application:基于Spark的应用程序,包含了driver程序和集群上的executor。
  • Cluster Manager:指的是在集群上获取资源的外部服务。目前有三种类型
    (1)Standalone: spark原生的资源管理,由Master负责资源的分配
    (2)Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
    (3)Hadoop Yarn: 主要是指Yarn中的ResourceManager
  • Worker Node: 集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slaves文件配置的Worker节点,在Spark on Yarn模式下就是NodeManager节点
  • Executor:是在一个worker node上为某应⽤启动的⼀个进程,该进程负责运⾏行任务,并且负责将数据存在内存或者磁盘上。每个应⽤都有各自独立的executor。
  • Task :被送到某个executor上的工作单元。

四、初始Spark程序

通过上面集群的安装之后,我们现在就可以运行一个简单的Spark程序了那么我们下面来执行我们的第一个spark程序。

4.1执行第一个Spark程序

普通模式提交任务
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node1:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
examples/jars/spark-examples_2.11-2.0.2.jar \
10

该算法是利用蒙特·卡罗算法求圆周率PI,通过计算机模拟大量的随机数,最终会计算出比较精确的π。
在这里插入图片描述

4.2在IDEA中编写WordCount程序

在生产环境中,通常会在IDEA中编写程序,然后打成jar包,最后提交到集群。最常用的是创建一个Maven项目,利用Maven来管理jar包的依赖。

4.2.1.创建一个项目

在这里插入图片描述

4.2.2.选择Maven项目,然后点击next

在这里插入图片描述
或者创建一个scala项目

4.2.3.pom文件
  • 这里说一些 如果你的spark用的是1.0的版本那么这里需要使用SDK是2.10的版本
  • 如果你使用的是2.0.2版本的Spark那么这里要需要使用SDK是2.11的版本
4.2.4编写Spark程序

我们这里先编写1.0版本的Spark程序

ackage cn.test.spark

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD


object WordCount {
  def main(args: Array[String]): Unit = {
    //设置spark的配置文件信息
    val sparkConf: SparkConf = new SparkConf().setAppName("WordCount")
    //构建sparkcontext上下文对象,它是程序的入口,所有计算的源头
    val sc: SparkContext = new SparkContext(sparkConf)
    //读取文件
    val file: RDD[String] = sc.textFile(args(0))

    //对文件中每一行单词进行压平切分
    val words: RDD[String] = file.flatMap(_.split(" "))
    //对每一个单词计数为1 转化为(单词,1)
    val wordAndOne: RDD[(String, Int)] = words.map(x=>(x,1))
    //相同的单词进行汇总 前一个下划线表示累加数据,后一个下划线表示新数据
    val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
    //保存数据到HDFS
    result.saveAsTextFile(args(1))
    sc.stop()
  }
}

然后选择编译成功的jar包,并将该jar上传到Spark集群中的某个节点上

4.2.5 首先启动hdfs和Spark集群
启动hdfs
start-all.sh

启动spark
/opt/bigdata/spark/sbin/start-all.sh
4.2.6使用spark-submit命令提交Spark应用(注意参数的顺序)
spark-submit \
--class cn.test.spark.WordCount \
--master spark://node1:7077 \
--executor-memory 1g \
--total-executor-cores 2 \
/root/spark-1.0-SNAPSHOT.jar \
/words.txt \
/spark_out

这里通过spark-submit提交任务到集群上。用的是spark的Standalone模式
Standalone模式是Spark内部默认实现的一种集群管理模式,这种模式是通过集群中的Master来统一管理资源。

4.2.7查看Spark的Web管理界面

地址: 节点IP:8080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值