介绍
spark框架自身带的 分布式集群资源管理和任务调度框架,类似于Hadoop Yarn框架
Standalone Yarn
Master ResourceManager
worker s NodeManager
唯独有一点不同的是:
一台机器只能运行一个Nodemanager,但是spark standalone在一台机器上可以同时运行多个Workers
安装部署(伪分布式)
conf/spark-env.sh
SPARK_MASTER_HOST=bigdata-hpsk01.huadian.com
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=2g
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081
mv slaves.template slaves
配置worker节点运行的主机,一行一个
bigdata-hpsk01.huadian.com
启动服务
启动主节点
sbin/start-master.sh
启动从节点
sbin/start-slaves.sh
注意:配置免密钥登录
ssh-keygen -t rsa
ssh-copy-id huadian@bigdata-hpsk01.huadian.com
测试
可以通过webui页面查看
8080/8081
可以发现最后一条mi没有输出结果,其实是到webui端口的Executor中了。
spark application运行的过程
回顾MapReduce程序运行在Yarn集群组成
-1.Application Master
应用的管理者,负责资源的申请,task运行监控调度
-2.Task的运行
MapTask和ReduceTask,都是运行在Nodemanager上Container容器中。
spark application运行在集群下,包含2部分
-1.Driver Program -JVM 进程
相当于AppMaster,应用的管理者,主要是调度job的执行
就是程序Main方法,必须创建sparkContext实例对象
端口号4040,提供应用的监控
-2.Executor s
每一个Executor是一个JVM进程,里面包含内存和CPU(可以理解为容器container),运行Task—相当于线程池
那么executor可以运行多少个tasks,就看有多少core
相关文档:
http://spark.apache.org/docs/2.2.0/cluster-overview.html
提交spark应用运行在local模式
将程序打成jar包传入linux,(注意,在打成jar前先编译一下,不编译可能会显示找不到该类,如果需要存入mysql,还要再spark的jars目录下添加mysql的jar包)
bin/spark-submit \
--class com.huadian.bigdata.spark.core.TrackLogAnalyseSpark \
spark-learning-1.0-SNAPSHOT.jar \
local[2]
提交spark应用运行在sparkStandalone上
bin/spark-submit \
--master spark://bigdata-hpsk01.huadian.com:7077 \
--class com.huadian.bigdata.spark.core.TrackLogAnalyseSpark \
spark-learning-1.0-SNAPSHOT.jar \
spark://bigdata-hpsk01.huadian.com:7077
数据没有在本地显示:
设置每个Spark application运行的资源:
bin/spark-submit \
--master spark://bigdata-hpsk01.huadian.com:7077 \
--class com.huadian.bigdata.spark.core.TrackLogAnalyseSpark \
--executor-cores 1 \
--total-executor-cores 2 \ #executor的个数= total-executor-cores / executor-cores
--driver-memory 512M \
--executor-memory 512M \
spark-learning-1.0-SNAPSHOT.jar \
spark://bigdata-hpsk01.huadian.com:7077