简单版本
需要安装Jdk
解压spark安装包,tar -zxvf .. -C ..
进入安装包下的conf目录下
mv ./spark-env.sh.template spark-env.sh
vi ./spark-env.sh
在最下面增加
export JAVA_HOME=java_home目录
export SPARK_MASTER_IP=hadoop01 在host中配置的路由
export SPARK_MASTER_PORT=7077
然后:
mv slaves.template slaves
vi slaves
在这里配置worker的路由,像我的是
hadoop02
hadoop03
然后远程拷贝到其它机器
scp -r ... node02:/...
启动命令:
./sbin/start-all.sh
启动后,jps ,hadoop01 上有master hadoop02,hadoop03上有worker
webUI:http://hadoop01:8080
高可用
高可用需要zookeeper,需要两个master节点
配置 : master:hadoop01,hadoop02
worker : hadoop03,hadoop04,hadoop05.。。
在如上的conf下的spark-env.sh 删除:SPARK_MASTER_IP。
增加:export SPARK_DAEMON_JAVA_OPTS=
"-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=zk1,zk2,zk3
-Dspark.deploy.zookeeper.dir=/spark"
再在,hadoop01节点的slave中修改slave的配置节点
然后在hadoop01 中启动sbin/start-all.sh
在hadoop02中执行sbin/start-master.sh启动第二个master
Spark-On-Yarn配置运行
安装hadoop
同上安装spark
将一台服务器的spark-env.sh的配置修改为,主要是java与hadoop配置文件目录
export JAVA_HOME=/usr/local/jdk1.7.0_80
export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.4/etc/hadoop
这台修改的服务器可以作为提交任务的入口
spark程序将作为YARN的客户端用于提交任务
启动HDFS和YARN
spark on yarn 的运行模式有两种-(cluster模式和client模式)
### 1.cluster模式 集群模式
./bin/spark-submit \
--class com.sam.spark.day1.WordCount \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
hdfs://node01:9000/wc hdfs://node01:9000/out-yarn-1
#### 2.client模式
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
lib/spark-examples*.jar \
10
两种运行模式的区别
cluster:driver运行在yarn上,结果不能在client上显示,所以最好将运行结果存到外部介质
client :driver运行在client上,会将结果输出到控制台,适合运行结果有输出的程序,如(spark-shell)
spark-shell必须使用client模式
./bin/spark-shell --master yarn --deploy-mode client
两种运行模式的原理
### cluster:Spark Driver首先作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的NodeManager节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。具体过程:
1. 由client向ResourceManager提交请求,并上传jar到HDFS上
这期间包括四个步骤:
a).连接到RM
b).从RM的ASM(ApplicationsManager )中获得metric、queue和resource等信息。
c). upload app jar and spark-assembly jar
d).设置运行环境和container上下文(launch-container.sh等脚本)
2. ResouceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationMaster)
3. NodeManager启动ApplicationMaster,并向ResourceManager AsM注册
4. ApplicationMaster从HDFS中找到jar文件,启动SparkContext、DAGscheduler和YARN Cluster Scheduler
5. ResourceManager向ResourceManager AsM注册申请container资源
6. ResourceManager通知NodeManager分配Container,这时可以收到来自ASM关于container的报告。(每个container对应一个executor)
7. Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。
### client:
在client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。
客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster和executor都 是装载在container里运行,container默认的内存是1G,ApplicationMaster分配的内存是driver- memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。