1.spark集群的开启
1)在hadoop的sbin目录下使用start-dfs.sh和start-yarn.sh命令开启dfs集群;
2)在spark的sbin目录下使用start-master.sh和start-slaves.sh命令开启Master和Worker;
3)在hadoop的sbin目录下使用mr-jobhistory-daemon.sh start historyserver开启yarn的日志记录;
4)在spark的sbin目录下使用start-history-server.sh开启spark的日志记录。
2.spark集群的关闭
1)stop-master.sh和stop-slaves.sh关闭spark;
2)stop-dfs.sh和stop-yarn.sh关闭dfs集群;
3)mr-jobhistory-daemon.sh stop historyserver和stop-history-server.sh关闭日志
3.spark集群的使用
1)Spark-shell
使用命令$ ./bin/spark-shell可以自动创建一个特殊的解释器感知型SparkContext,便于使用scala语言进行本地测试。
2)Spark-submit
提交任务到集群,支持yarn-cluster和yarn-client两种模式:
yarn-cluster:适用于生产环境;
yarn-client:适用于交互、调试,希望立即看到app的输出
yarn-cluster和yarn-client的区别在于appMaster:yarn appMaster,每个yarn app实例有一个appMaster进程,是为app启动的第一个container;负责从ResourceManager请求资源,获取到资源后,告诉NodeManager为其启动container;appMaster消除了active client的需要,app client启动app后可以结束,协调由运行在cluster上被yarn管理的进程继续
yarn-cluster mode:Spark的dirver 运行在 appMaster中,appMaster进程同时负责driving app,请求资源;启动spark app的client不需要一直存在于整个spark app运行生命周期
yarn-client mode:某些情况需要与spark交互,要求user input,如spark-shell和pyspark,这样的spark app需要spark-driver运行在初始化spark app的client端进程中。这种情况,appMaster仅仅用于从yarn集群请求executor,app client会和请求的container通信来调度他们工作。
spark-submit [options] <app jar | python file> [app options]
Options:
--master MASTER_URL spark://host:port, mesos://host:port, yarn, or local.
--deploy-mode DEPLOY_MODE driver运行之处,client运行在本机,cluster运行在集群
--class CLASS_NAME 应用程序包的要运行的class
--name NAME 应用程序名称
--jars JARS 用逗号隔开的driver本地jar包列表以及executor类路径
--py-files PY_FILES 用逗号隔开的放置在Python应用程序PYTHONPATH上的.zip, .egg, .py文件列表
--files FILES 用逗号隔开的要放置在每个executor工作目录的文件列表
--properties-file FILE 设置应用程序属性的文件放置位置,默认是conf/spark-defaults.conf
--driver-memory MEM driver内存大小,默认512M
--driver-java-options driver的java选项
--driver-library-path driver的库路径Extra library path entries to pass to the driver
--driver-class-path driver的类路径,用--jars 添加的jar包会自动包含在类路径里
--executor-memory MEM executor内存大小,默认1G
Spark standalone with cluster deploy mode only:
--driver-cores NUM driver使用内核数,默认为1
--supervise 如果设置了该参数,driver失败是会重启
Spark standalone and Mesos only:
--total-executor-cores NUM executor使用的总核数
YARN-only:
--executor-cores NUM 每个executor使用的内核数,默认为1
--queue QUEUE_NAME 提交应用程序给哪个YARN的队列,默认是default队列
--num-executors NUM 启动的executor数量,默认是2个
--archives ARCHIVES 被每个executor提取到工作目录的档案列表,用逗号隔开
用得较多的参数是:
--class:应用程序的入口点(例如,org.apache.spark.examples.SparkPi)
--master:集群的master URL(例如,spark://localhost:7077)
--deploy-mode:将driver部署到worker节点(cluster模式)或者作为外部客户端部署到本地(client模式),默认情况下是client模式
--conf:用key=value格式强制指定Spark配置属性,用引号括起来
--application-jar:包含应用程序和所有依赖的jar包的路径,路径必须是在集群中是全局可见的,例如,hdfs://路径或者file://路径
--application-arguments:传递给主类中main函数的参数
4.spark的三种部署方式
1)Standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。
# Run on a Spark Standalone cluster in clusterdeploy mode with supervise
./bin/spark-submit \
--classorg.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster
--supervise
--executor-memory 20G \
--total-executor-cores 100 \
/path/to/examples.jar \
1000
2)Spark On Mesos模式。这是很多公司采用的模式,官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。
3)Spark On YARN模式。这是一种最有前景的部署模式。但限于YARN自身的发展,目前仅支持粗粒度模式(Coarse-grained Mode)。
yarn-cluster:
# Run on a YARN cluster
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
--classorg.apache.spark.examples.SparkPi \
--masteryarn-cluster \ # can also be`yarn-client` for client mode
--executor-memory 20G \
--num-executors 50 \
/path/to/examples.jar \
1000
其中,第一种类似于MapReduce 1.0所采用的模式,内部实现了容错性和资源管理,后两种则是未来发展的趋势,部分容错性和资源管理交由统一的资源管理系统完成:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架,比如MapReduce,公用一个集群资源,最大的好处是降低运维成本和提高资源利用率(资源按需分配)。
5.spark程序的开发
可以使用的IDE主要有有Eclipse、Intellij IDEA。
6.spark及hadoop的WebUI地址
Spark的jobs(只有有job运行时可以打开)http://192.168.80.129:4040/jobs/
Spark的WebUI查看http://192.168.80.129:8082
hadoop的WebUI查看http://192.168.80.129:50070
hadoop的application查看http://192.168.80.129:8088
参考资料:
Apache Spark三种分布式部署方式比较
https://yq.aliyun.com/articles/37493
Spark Submit提交应用程序