Spark部署
1. Local模式部署:
1) 安装java,配置环境变量
2) 主节点配置
cd $SPARK_HOME/conf
cp spark-env.template spark-env.sh
vim spark-env.sh
export SPARK_MASTER_IP=your_master_ip;
export JAVA_HOME=$Your_Java_home;
3) 版本验证:bin/spark-shell
2. standalone模式部署:
1) 修改spark-env.sh
export SPARK_MASTER_IP=$Your_Master_Ip;
export JAVA_HOME=$Your_java_home;
2) 在conf目录下创建一个slaves文件,
写入 workers的节点hostname,每行一个
3) 将配置文件spark-env.sh和slaves发送到所有worker节点
scp conf/spark-env.sh /software/spark/conf/
scp conf/slaves /software/spark/conf/
4) 配置master和slaves之间免密码登录
。。。略
5) 启动集群:
手动:
master节点:Sbin/start-master.sh
worker节点:./bin/spark-class org.apache.spark.deploy.worker.Worker spark://IP:Port
脚本:
sbin/start-master.sh
sbin/start-slaves.sh
sbin/start-all.sh
sbin/stop-master.sh
sbin/stop-slaves.sh
sbin/stop-all.sh
3. YARN模式部署
1) 配置spark环境变量:
vim /etc/profile
export SPARK_HOME=/home/Hadoop/spark-1.5.0
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/Hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/Hadoop
:wq
source /etc/profile
2) Spark本身的配置
vim spark-env.sh
export JAVA_HOME=$Your_java_home;
export SPARK_MASTER_IP=$Your_Master_Ip;
vim slaves
slave01
slave02
slave03
先启动hadoop后启动spark
Spark程序运行:(local,standalone,YARN,Mesos)
1. Local模式下运行:(以计算圆周率程序为例)
./bin/spark-submit \
#主程序设置本地,local[*],*为线程数
--master local[10] \
#选择主类名称
--class org.apache.spark.examples.SparkPi \
#examples jar包
/home/hadoop/spark-1.5.0/lib/spark-examples-1.5.0-hadoop2.3.0.jar
2. Standalone模式下运行:
1) spark-shell运行
./bin/spark-shell –master spark://IP:PORT –cores 4
4为spark-shell在集群中使用的核数
2) spark-submit运行应用程序
以Spark-Pi为例
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://$MASTER_IP:Port
--executor-memory 2G \
--total-executor-cores 2 \
/home/Hadoop/spark-1.5.0/lib/spark-examples-1.5.0-hadoop2.3.0.jar
可以通过sparkconf中设置spark.cores.max配置获得最多内核的数量
eg:
val conf = new SparkConf()
.setMaster()
.setAppName()
.set(“Spark.cores.max”,”10”)
val sc = new SparkContext(conf)
还可以设置spark.deploy.defaultCores来改变默认值而不必设置spark.cores.max
export SPARK_MASTER_OPTS=”-Dspark.deploy.defaultCores=<value>”
3. YARN模式下运行程序:(yarn-cluster,yarn-client)
1) yarn-cluster(框架会在集群中启动Driver)
./bin/spark-submit \
--class path.to.your.class
--master yarn-cluster [options] <app jar> [app opotions]
eg:
./bin/spark-submit –class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
--num-executors 3 \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 2 \
/home/Hadoop/spark-1.5.0/lib/spark-examples-1.5.0-hadoop2.3.0.jar \
10
首先启动一个AM(application master)进程,将SparkPi作为AM的子进程
Client周期性检查AM以获取状态更新,程序运行结束后,client会立即退出。
2) yarn-client(框架在client上启动Driver)
将yarn-cluster换成yarn-client即可
eg:
./bin/spark-submit –class org.apache.spark.examples.SparkPi \
--master yarn-client \
--num-executors 3 \
--driver-memory 4g \
--executor-memory 2g \
--executor-cores 2 \
/home/Hadoop/spark-1.5.0/lib/spark-examples-1.5.0-hadoop2.3.0.jar
Yarn-client和yarn-cluster区别
Spark executor作为一个yarn的Container,spark可以使多个Tasks在同一容器中运行。
Yarn-cluster模式会将driver运行在AM中,当任务提交后,client就会关闭,用于生产环境(driver挂掉后会自动重新启动)
Yarn-client模式中,AM仅向yarn请求executor,client会和executor通信来调度它们的工作,client不会离开,用于交互和调试.(不可靠,一旦client挂掉,driver也会挂掉)
添加其他jar包:
./bin/spark-submit \
--class my.main.class \
--master yarn-cluster \
--executor-memory 2G \
--num-executors 3 \
--jars my-other-jar.jar,my-other-other-jar.jar
My-main-jar.jar app_arg1 app_arg2
应用程序提交过程:
1.Spark在集群上以独立进程集合方式运行
接受用户Driver程序中main函数的SparkContext对象的协调
2.SparkContext会与多种资源管理器连接(Standalone,Mesos,Yarn)
3.连接后,Spark可以在集群上的节点获取Executor,负责计算和存储
4.spark会将代码(jar)发送给executor
5.最后SparkContext会将任务发送至Executor执行
配置文件参数:
SparkConf中的配置优先级高于 spark-submit中的标志位高于配置文件中的值