如第一节所说,spark依赖的存储引擎和资源调度框架均可以替换,上一节默认都在本地,要改成集群模式,只需要把对应的存储引擎和资源调度框架替换上即可。
这里主要讲独立集群模式(standlone)和yarn集群模式:前者只依赖hdfs作为存储,使用standlone自带的master和worker作为计算资源;后者依赖hdfs作为存储,依赖yarn调度分配计算资源。
参考前文
参考前文
standlone模式我们只需要使用HDFS作为存储,所以只需要start-dfs.sh启动分布式文件系统即可;yarn模式还需要start-yarn.sh开启yarn调度集群。
下载位置 http://spark.apache.org/downloads.html
注意选择适合对应hadoop版本的spark,点击下载会自动选择最近的镜像下载
当前安装使用2.3.3版本
如下解压后,进入conf目录
tar -zxf spark-2.3.3-bin-hadoop2.7
配置SPARK_HOME并添加到PATH中
spark-env.sh.template改名为spark-env.sh,内容如下
# java安装目录
export JAVA_HOME=/usr/java/jdk1.8.0_201.jdk
# hadoop配置目录
export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.7/etc/hadoop
# 指定spark master机器名或ip
export SPARK_MASTER_IP=localhost
# 指定spark worker的内存/核数/实例个数
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
slaves.template改名为slaves
这里填写对应Worker的机器名或ip,每行一个,这里我们只有本地一个worker,内容如下
localhost
如果存在多个机器上的Worker,则全部需要在此登记,并将Spark整个安装目录同步到不同的Worker机器上,即每个机器上都必须安装spark全部文件
yarn模式下的spark相当于用spark替换了hadoop中的计算引擎mapreduce,所以执行时每个节点必须存在指定的spark jar包,有两种方式:
注意独立集群模式,使用HDFS作为公共的分布式文件系统,但是资源调度系统依赖自己实现的standlone模式完成,因此需要开启集群即为开启standlone分布式资源管理系统,包括独立实现的Master和Worker进程。
sbin/start-master.sh 开启master,此时jps看到名为Master的进程
sbin/start-slaves.sh 开启slaves,此时jps看到名为Worker的进程
最简单直接sbin/start-all.sh
此时可通过http://localhost:8080/查看集群master和worker节点状态
bin/spark-shell --master xxx
类似上一节,开启进入scala交互的命令行,可在此快速验证原型
注意这里的master分为多种,默认不指定master执行spark-shell为相当于
bin/spark-shell -master 'local[*]'
这样具体执行语句在本地工作,包括如下
要想运行在集群上,必须指定集群地址
具体的集群master URL需要从http://localhost:8080/查看,有些人直接写http://localhost:7077并不一定对
如本人电脑上查看对应的standlone master url如下:
如下语句连接集群
bin/spark-shell --master 'spark://wenzhoudeMacBook-Pro.local:7077'
master直接指定yarn或自动获取yarn 分配的master url,如下语句连接集群
bin/spark-shell --master yarn
全部的master url格式参考文档
比如最简单wordcount spark实现,可如下操作
hadoop fs -put ./word.data /
sc.textFile("hdfs://localhost:9000/word.data").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
可以通过http://localhost:4040/jobs/查看集群运行的任务和状态
参考官方文档
原创,转载请注明来自