Spark standalone集群搭建:
1、上传解压 tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz
2、修改安装包的名称(最好保留版本号)mv spark-1.6.0-bin-hadoop2.6 spark-1.6.0
3、进入conf目录,修改slaves和Spark-env.sh
slaves(Worker进程所在的节点):
node2
node3
node4
spark-env.sh
export SPARK_MASTER_IP=hadoop1 Matser的IP
export SPARK_MASTER_PORT=7077 提交任务的端口
export SPARK_WORKER_CORES=2 每个Worker进程管理2个core
export SPARK_WORKER_MEMORY=2G 每个Worker进程管理2G内存
export SPARK_WORKER_INSTANCES=1 在每个虚拟机或者真实的物理机上启动的Worker的数量 defult 1
4、将安装包同步到其他的节点上 scp -r spark-1.6.0 root@node2:/opt/local/
5、如果想要修改master的监控端口 在start-master.sh 脚本里面修改 不修改默认8080
6,启动sbin目录下./start-all.sh
web端访问:http://node1:8080/
测试:bin目录下
./spark-submit --master spark://node1:7077 --deploy-mode cluster --
total-executor-cores 3 --class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 1000
./spark-submit --master spark://node1:7077 --deploy-mode cluster 提交模式(defult:client,cluster)
--total-executor-cores 3(小于集群core的总数) 集群为当前的application奉献了3个core
--class org.apache.spark.examples.SparkPi ../lib/spark-examples-1.6.0-hadoop2.6.0.jar 1000(并发度 使用1000个线程来计算)
Spark standalone模式
Master:资源管理的主节点,掌握集群的资源情况
实际上就是一个进程
Worker:只是管理某一台机器 或者 管理某一部分资源 2G内存和2个core
也是一个进程,Worker会管理他所在机器的资源
Driver:与任务调度有关
Spark 在Standalone上运行分为两种模式
node1 master 也是提交应用程序的客户端
node2 worker
node3 worker
node4 worker
1、client 测试程序
Driver进程是在客户端启动的
Driver(SparkContext对象)的作用:
分发任务
回收task的计算结果
回收task的执行情况
心跳
可以在提交应用程序的客户端上监控task的执行情况
适应场景:
测试 生产环境下为什么不使用client模式?
如果我要提交100个application到集群运行,Driver每次都会在client节点启动,那么就会操作客户端100次网卡流量暴增的问题
2、cluster 适合在生产环境
Driver进程是在集群某一台Worker上启动的
是无法查看task的执行情况的
如果我要提交100个application到集群运行,每次Driver会随机在某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上的