Apache Spark介绍及集群搭建
简介
Spark是一个针对于大规模数据处理的统一分析引擎。其处理速度比MapReduce快很多。其特征有:
spark比mapreduce在内存中快100x,比mapreduce在磁盘中快10x spark比mapreduce快的主要2个原因: 1)spark的job中间结果数据可以保存在内存中,mapreduce的job中间结果数据只能够保存在磁盘。后面又有其他的job需要依赖于前面job的输出结果,对于spark来说,直接可以从内存获取得到, 大大减少磁盘io操作,对于mapreduce来说就需要进行大量磁盘io操作,性能来说肯定是降低了。 2)mapreduce以进程的方式运行在整合yarn中,比如一个job有100个mapTask,这个时候运行100个map task就需要启动100个进程。 spark以线程的方式运行的进程中,运行100个map task可以只启动1个进程,在一个进程中运行100个线程。启动一个进程和启动一个线程时间代价肯定不一样,启动进程需要的时间和调度大大增加。
2、易用性
可以快速写一个Spark应用程序通过 java/scala/python/R/SQL不同的语言去进行代码开发
3、通用性
Spark框架是一个生态系统,有很多不同的模块(sparksql、sparkStreaming、Mlib、Graphx)应用到不同的业务场景中。
4、兼容性
Spark程序就是一个计算任务的程序,哪里可以给当前这个任务提供对应的资源,我们就可以把这个任务提交到哪里去运行。
standAlone
spark自带的集群模式,任务的资源分配由Master负责。
yarn
spark可以把任务提交到yarn中去运行,任务的资源分配由resourceManager负责
mesos
是一个apache开源的类似于yarn的资源管理平台
Spark集群的安装部署
1 新建文件夹,分别用来存放压缩包、解压后的文件
mkdir -p /export/software
mkdir -p /export/servers
2 把安装文件放到服务器上的software文件夹内 然后解压到servers文件夹内
cd /export/software tar -zxvf spark-2.1.3-bin-hadoop2.7.tgz -C /export/servers/
cd /export/servers
mv spark-2.1.3-bin-hadoop2.7 spark
3 修改配置文件
cd /export/servers/spark/conf mv spark-env.sh.template spark-env.sh vim spark-env.sh
#指定java环境变量
export JAVA_HOME=/export/servers/jdk1.8.0_141
#指定spark集群中老大地址
export SPARK_MASTER_HOST=node1
#指定spark集群中老大端口
export SPARK_MASTER_PORT=7077
mv slaves.template slaves
vim slaves
#指定哪些节点是worker
node2
node3
4 添加spark的环境变量
vim /etc/profile
export SPARK_HOME=/export/servers/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
5 分发spark的安装目录和spark变量
scp -r spark node2:/export/servers
scp -r spark node3:/export/servers
scp /etc/profile node2:/etc
scp /etc/profile node3:/etc
6 在所有节点执行脚本
source /etc/profile
启动和关闭Spark集群
在主节点上的spark目录下sbin目录执行
./start-all.sh
./stop-all.sh
7 基于zk构建Spark HA集群
#安装zk集群
#修改配置文件
vim spark-env.sh
#需要注释掉手动指定那个节点是master
#指定spark集群中老大地址
#export SPARK_MASTER_HOST=node1
#引入zk相关配置 构建sparkHA
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,n
ode2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark"
#分发spark-env.sh 到其他节点
scp spark-env.sh node2:$SPARK_HOME/conf
scp spark-env.sh node3:$SPARK_HOME/conf
#启动zk器群
#启动spark集群
#为了保证master的高可用 可以在其他节点单独启动Master
sbin/start-master.sh
Spark集群的管理界面:
master主机名或者ip:8080