standalone模式
00_前提:
已经安装好java(java1.8.0_241)
已经安装好hadoop(hadoop2.10.0)
01_介绍
我们要构建一个由Master+Slave构成的Spark集群,而Spark就运行在集群中。
02_standalone开始配置
2.1复制spark,并命名为spark-standalone
cp -r spark-2.4.0-bin-hadoop2.7 spark-startalone2.2进入conf,配置spark-env.sh,确定master
cd conf for i in .template; do mv ${i} ${i%.}; done vi spark-env.sh SPARK_MASTER_HOST=node1 SPARK_MASTER_PORT=70772.3修改slaves文件,确定worker
vi slaves node1 node2 node32.4 在sbin/spark-config.sh文件下添加JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_2412.5配置环境变量
vi /etc/profile export SPARK_HOME=/usr/hadoop/spark-standalone export PATH=$PATH:$SPARK_HOME/sbin:$SPARK_HOME/bin source /etc/profile2.6把spark-standalone分发到集群节点
scp -r spark-standalone / node2:/usr/hadoop/ scp -r spark-standalone / node3:/usr/hadoop/2.7在spark-standalone下启动集群
sbin/start-all.sh2.8 spark的standalone集群基本配置完毕
8080端口访问masterUI
8081端口访问workeUI
4040端口driverUI,还没执行完可以看见,如果需要随时可以看见,需要配置历史服务。
2.9 例子1——计算Pi
[root@node1 spark-standalone]# bin/spark-submit \ > --master spark://node1:7077 \ > --class org.apache.spark.examples.SparkPi \ > ./examples/jars/spark-examples_2.11-2.4.0.jar 1002.10例子2——shell中wordcount
[root@node1 spark-standalone]# bin/spark-shell --master spark://node1:7077创建一个input目录,写个文件,里面写一些单词,然后在shell里读取,分割,洗牌,统计。和上面local差不多一样。
03_配置历史服务(通用,个别参数根据自己的修改即可)
3.1修改spark-default.conf文件
vi spark-defaults.conf spark.eventLog.enabled true spark.eventLog.dir hdfs://node1:8020/spark-logs
3.2进入hadoop安装目录后,执行命令:
bin/hadoop fs -mkdir /spark-logs如果不放心该命令是否执行成功,可启动hadoop,访问50070端口对应的界面查看是否生成了该目录。
http://192.168.223.100:50070/3.3修改spark-env.sh文件,添加如下配置
vi spark-env.sh export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs" (1) spark.history.ui.port
历史服务器的WebUI的端口号,默认为18080,也可以自行设置。
(2) spark.history.retainedApplications
设置缓存Cache中保存的应用程序历史记录的个数,默认50,如果超过这个值,旧的将被从内存中删除。但并不会从Hdfs中删除。
注:缓存文件数不表示实际显示的文件总数。只是表示不在缓存中的文件可能需要从硬盘读取,速度稍有差别。
(3) spark.history.fs.logDirectory
告诉Spark History Server(Spark历史服务)哪个目录记录着任务的日志信息。如果此时文件中配置了该选项,则稍后在启动Spark History Server 时就不必再指定具体目录了。目录可以是Hadoop APIs支持的任意文件系统。
3.4把修改的文件分发给其他虚拟机
scp spark-defaults.conf node2:/usr/hadoop/spark-standalone/conf/ scp spark-defaults.conf node3:/usr/hadoop/spark-standalone/conf/ scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/ scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/3.5启动并查看Spark历史服务
start-dfs.sh sbin/start-all.sh sbin/start-history-server.sh jps http://192.168.223.100:18080/3.6执行一个小任务
bin/spark-submit \ --master spark://node1:7077 \ --deploy-mode cluster \ --class org.apache.spark.examples.SparkPi \ ./examples/jars/spark-examples_2.11-2.4.0.jar 1000004_master-HA
4.1高可用原理
Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,即存在单点故障的问题。需要给Master进行高可用配置,Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)。
(1)基于文件系统的单点恢复—只用于开发或测试环境
fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。
(2)基于zookeeper的Standby Masters—可用于生产环境
zookeeper有选举和存储功能,可以存储Master的元素据信息,使用zookeeper搭建的Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建Master的HA。为了使选举没有争议,要奇数个节点。
4.2配置HA
该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置。
4.2.1修改spark-env.sh 文件
vi spark-env.sh #SPARK_MASTER_HOST=node1 #SPARK_MASTER_PORT=7077 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs" export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-nodes" spark.deploy.recoveryMode:恢复模式 spark.deploy.zookeeper.url:ZooKeeper的Server地址 spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。包括 Worker、Driver、Application信息。
4.2.2分发上面这个配置文件
scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/ scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/4.2.3启动spark服务
start-dfs.sh start-yarn.sh sbin/start-all.sh sbin/start-history-server.sh zkServer.sh start sbin/start-master.sh4.3查看服务
访问master的spark管理界面是活跃的,而另一台master是待定的,假如第一台宕机,zookeeper安排第二台走马上任。
http://192.168.223.100:8080/ http://192.168.223.101:8080/4.4 测试HA
测试主备切换
在第一台master上使用jps查看master进程id使用kill -9 id号强制结束该进程稍等片刻后刷新第二台master的web界面发现第二台master为Alive4.5执行小任务
4.5.1词频统计
bin/spark-shell --master spark://node1:7077,node2:7077,node3:7077后面的同local下那个类似,如有疑问,参考另一篇spark系列——运行模式1:local模式配置
4.5.2例子计算
bin/spark-submit \ > --master spark://node1:7077,node2:7077,node3:7077 \ > --deploy-mode client \ > --class org.apache.spark.examples.SparkPi \ > ./examples/jars/spark-examples_2.11-2.4.0.jar 1004.5.3例子计算
bin/run-example --master spark://node1:7077,node2:7077,node3:7077 SparkPi注:例子是自带的