Spark和MapReduce对比
MapReduce编程模型的局限性
- 繁杂
只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码 - 处理效率低
Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据
任务调度与启动开销大 - 不适合迭代处理、交互式处理和流式处理
Spark的优势
-
Spark是类Hadoop MapReduce的通用并行框架
Job中间输出结果可以保存在内存,不需要读写HDFS;
比MapReduce平均快10倍 以上。 -
速度快
基于内存数据处理,比MR快100个数量级以上(逻辑回归算法测试);
基于硬盘数据处理,比MR快10个数量级以上 -
易用性
支持Java、Scala、Python、R语言;
交互式shell方便开发测试; -
通用性
一栈式解决方案:批处理、交互式查询、实时流处理、图计算及机器学习; -
多种运行模式
YARN、Mesos、EC2、Kubernets、Standalone、Local
Spark技术栈
-
Spark Core
核心组件,分布式计算引擎
-
Spark SQL
高性能的基于HAdoop的SQL解决方案
-
Spark Streaming
可以实现高吞吐量、具备容错机制的准时流处理系统
-
Spark Graphx
分布式图处理框架
-
Spark MLlib
构建Spark上的分布式机器学习库
安装包下载
大家可以根据自己版本需要到下面的网址下载:
Spark安装包
我这里使用的是2.4.5版本,配置的是单机模式。
Spark安装与文件部署
1、把压缩包上传到linux虚拟机中,解压到指定目录下:
tar -zxvf spark-2.4.5-bin-hadoop2.6.tgz -C /opt/
2、解压好后的文件修改文件名:
mv spark-2.4.5-bin-hadoop2.6/ spark
3、配置环境变量:
vi /etc/profile
添加配置:
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin
配置完成后,source生效
source /etc/profile
4、进入到spark/conf
目录下修改配置文件
对spark-env.sh.template
重命名,进入添加新的内容:
mv spark-env.sh.template spark-env.sh
vi spark-env.sh
新增以下内容:
export SCALA_HOME=/opt/scala
export JAVA_HOME=/opt/jdk
export SPARK_HOME=/opt/spark
#指定master的主机
export SPARK_MASTER_IP=hadoop01
#设置执行器内存大小
export SPARK_EXECUTOR_MEMORY=1G
5、修改slaves文件
mv slaves.template slaves
我们这里配置的是单机模式,所以主机名可以使用本地,不需要修改
如果是建立的集群,则需要把关联的主机名都填入进去:
6、全部修改完成后,Spark安装完成。
Spark的启动
Spark有三种启动模式:本机、Standalong和YARN。
本机和Standalone一般做演示和测试用,YARN在开发时用的较多。
本机
spark-shell --master local[*]
星号中可以自行设置处理器的内核总数,如果为*,则默认为最大。本机可以直接使用spark-shell
启动:
启动后会显示启动的模式,红框标记处。
Standalone模式
在启动Standalone模式之前,我们需要先启动两个进程:
Master和Worker。
当在集群中时,Master和Worker不一定在同一个主机上。
注意:启动这两个节点需要在spark的sbin目录下启动:start-all.sh
。否则会和启动HDFS的start-all.sh
冲突。
sbin/start-all.sh
启动完成后,我们可以启动Spark。
spark-shell --master spark://hadoop01:7077
启动YARN模式
启动YARN模式的指令是:
spark-shell --master yarn
当我们启动后,会显示错误:
Exception in thread “main” org.apache.spark.SparkException: When running with master ‘yarn’ either HADOOP_CONF_DIR or YARN_CONF_DIR must be set in the environment.
提示我们需要设置HADOOP_CONF_DIR or YARN_CONF_DIR。
对spark-enc.sh
添加新的配置:
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
完成后重新启动Master和Worker。同时我们也要启动HDFS。
start-all.sh
/opt/spark/sbin/start-all.sh
然后就可以启动yarn模式了:
spark-shell --master yarn