Spark入门及安装部署

本文介绍了Spark的基本概念,包括其运行模式、速度优势和DAG任务调度。详细阐述了Spark在内存计算上的优势,以及它如何在MapReduce的基础上提供更高效的计算。此外,文章还提供了Spark的伪分布式和完全分布式配置步骤,包括安装、配置环境变量和启动测试。通过这个指南,读者可以了解Spark生态系统并掌握基本的部署技巧。

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

Spark简介

Spark是加州大学伯克利分校AMP实验室开发的大数据处理框架。Spark生态系统也被成为BDAS,力图在算法、机器、人三者之间通过大规模数据集成来展现大数据应用的一个开源平台。Spark在2013年6月进入Apache成为孵化项目,8个月或就成为Apache的顶级项目,围绕Spark推出了Spark SQL、Spark Streaming、MLlib、GraphX、SparkR等组件。(看起来想直接取代Hadoop的地位)。

Spark使用Scala语言实现。具有运行速度快、易用性好(支持多种语言)、通用性强(拥有各种组件)和随处运行(适应Hadoop、Cassandra、Hbase、S3和Tachyon)等特点。

拥有四种运行模式

  1. local模式
  2. standalone,使用spark自带的资源调度框架。
  3. yarn,最流行的方式,使用yarn调度
  4. mesos,国外用的多。

Spark比MapReduce快的原因

  1. spark基于内存迭代,MapReduce基于磁盘迭代。
  2. DAG计算模型在迭代计算上比MR有效率。
  3. Spark是粗粒度的资源调度,MR是细粒度的资源调度。

DAG在spark中任务调度详解

一般而言DAG会比MR在大多数情况下减少shuffle次数。如果不涉及与其他节点的数据交换,spark可以在内存中一次完成操作,也就是中间不需要落盘,减少的IO操作。
但是,如果计算中涉及到了数据交换,spark也会把shuffer的数据写进磁盘。大部分人认为spark是基于内存的计算,所以快。其实这不是主要原因。涉及到计算必然会加载数据进内存。Hadoop也如此。只不过Spark支持将反复计算的数据给Cache到内存中,减少加载耗时。所以对于需要类似迭代的算法比较在行。当然spark基于磁盘预算也比Hadoop快。因为DAG的关系,spark天生适合做批处理任务。

Spark生态系统:

Spark生态系统以Spark Core为核心,能读取各种类型的文件,利用Standalone、YARN和Mesos等资源调度管理。Spark shell和Spark submit交互式批处理、Spark Streaming实时流处理应用、Spark SQL的即时查询、采样近似查询引擎BlinkDB的权衡查询、MLbase/MLlib的机器学习、GraphX的图处理、SparkR的数学计算等等。
在这里插入图片描述

Spark安装部署:

配置伪分布模式:

1、上传spark安装包到虚拟机-Linux

2、解压、配置软连接

[hadoop@master tmp]$ tar -zxvf spark-2.1.2-bin-hadoop2.7.tgz -C /diyhome/
[hadoop@master ~]$ ln -s /diyhome/spark-2.1.2-  bin-hadoop2.7/ ~/spark

3、配置环境变量

1、进去看一看spark目录
因为spark的sbin目录下也有start-all.sh脚本,因此尽量不要配sbin进path
2、配置spark的环境变量

	[hadoop@master ~]$ vi ~/.bashrc
	Path:$SPARK_HOME/bin
	export SPARK_HOME=~/spark
	[hadoop@master ~]$ source ~/.bashrc

4、修改配置文件

配置路径:$SPARK_HOME/conf
[hadoop@master conf]$ cp spark-env.sh.template spark-env.sh
vi spark-env.sh 添加
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export JAVA_HOME=~/jdk
export SCALA_HOME=~/scala
export HADOOP_HOME=~/hadoop
export HADOOP_CONF_DIR=~/hadoop/etc/hadoop/
[hadoop@master conf]$ cp slaves.template slaves

添加

master(你自己的主机名)

5、启动spark

命令

 $SPARK_HOME/sbin
[hadoop@master sbin]$ ./start-master.sh 
[hadoop@master sbin]$ ./start-slaves.sh

6、测试webui

http://192.168.0.199:8080/ Master
http://192.168.0.199:8081/ Worker

[hadoop@master sbin]$ spark-shell --master spark://master:7077

配置Spark-完全分布式 HA

1、上传spark压缩包到Linux操作系统

2、解压、并且配置软连接

[hadoop@master tmp]$ tar -zxvf spark-2.1.2-bin-hadoop2.7.tgz -C /cluster/
[hadoop@master ~]$ ln -s /cluster/spark-2.1.2-bin-hadoop2.7/ ~/spark

3、配置环境变量

[hadoop@master ~]$ vi ~/.bashrc 
export SPARK_HOME=~/spark
[hadoop@master ~]$ source ~/.bashrc

4、修改配置文件$SPARK_HOME/conf

[hadoop@master conf]$ cp spark-env.sh.template  spark-env.sh
[hadoop@master conf]$ vi spark-env.sh
#!/usr/bin/env bash
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export JAVA_HOME=~/jdk
export HADOOP_HOME=~/hadoop
export HADOOP_CONF_DIR=~/hadoop/etc/hadoop/
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=500m
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"
[hadoop@master conf]$ cp slaves.template slaves
[hadoop@master conf]$ vi slaves
# A Spark Worker will be started on each of the machines listed below.
master
slave1
slave2

5、分发slave1,slave2

[hadoop@master conf]$ scp -r /cluster/spark-2.1.2-bin-hadoop2.7/ slave1:/cluster/
[hadoop@master conf]$ scp -r /cluster/spark-2.1.2-bin-hadoop2.7/ slave2:/cluster/
[hadoop@master conf]$ scp ~/.bashrc slave1:~/
[hadoop@master conf]$ scp ~/.bashrc slave2:~/
[hadoop@slave1 ~]$ ln -s /cluster/spark-2.1.2-bin-hadoop2.7/ ~/spark
[hadoop@slave1 ~]$ source ~/.bashrc
[hadoop@slave2 ~]$ ln -s /cluster/spark-2.1.2-bin-hadoop2.7/ ~/spark
[hadoop@slave2 ~]$ source ~/.bashrc

6、启动spark

启动hadoop集群

[hadoop@master conf]$ start-all.sh

启动spark集群

[hadoop@master sbin]$ ./start-all.sh 
[hadoop@slave1 sbin]$ ./start-master.sh 

7、测试

http://192.168.0.199:8080/ —主Master
http://192.168.0.200:8080/ —辅助Master

 [hadoop@slave1 sbin]$ spark-shell \
 > --master spark://master:7077 \
 > --executor-memory 500m \
 > --total-executor-cores 1 
 scala> val text=sc.textFile("hdfs://slave2:9000/a.txt")
 text: org.apache.spark.rdd.RDD[String] = hdfs://slave2:9000/a.txt MapPartitionsRDD[1] at textFile at <console>:24

 scala> val flat=text.flatMap(_.split(" "))
flat: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at flatMap at <console>:26

 scala> val mp=flat.map((_,1))
mp: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[3] at map at <console>:28

 scala> val rd=mp.reduceByKey(_+_)
rd: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:30

 scala> val col=rd.collect
col: Array[(String, Int)] = Array((hello,2), (world,1), (hadoop,1))             

 scala> col.foreach(println)
(hello,2)
(world,1)
(hadoop,1)

附言:本人也是个新手,如有问题还请大佬们勘误。

天道酬勤,学海无涯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值