目录
Spark支持3种集群模式,分别是standalone、spark on yarn(hadoop2)、以及spark on mesos模式。其中standalone模式是spark自带的集群模式,更常用于测试;spark on yarn是基于yarn来运行任务,通过yarn来管理资源和任务调度,spark从0.6.0版本开始支持;spark on mesos和spark on yarn类似。
本节将介绍两种部署方式:standalone和spark on yarn
说明:三台机器的主机名分别为:bigdata.centos01、bigdata.centos02、bigdata.centos03
说明:spark版本:v2.2.0,Hadoop版本:v2.5.0
一、spark standalone模式
1. 配置
- 修改配置文件名
mv log4j.properties.template log4j.properties
mv slaves.template slaves
mv spark-env.sh.template spark-env.sh
- 修改 conf/spark-env.sh
JAVA_HOME=/opt/modules/jdk8
SCALA_HOME=/opt/modules/scala-2.11.8
# master的主机名和端口
SPARK_MASTER_HOST=bigdata.centos02
SPARK_MASTER_PORT=7077
# master的web监控端口
SPARK_MASTER_WEBUI_PORT=8080
# work节点机器CPU核数
SPARK_WORKER_CORES=1
# work运行内存
SPARK_WORKER_MEMORY=1g
# work运行端口和web监控端口
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081
# spark配置文件所在目录
SPARK_CONF_DIR=/opt/modules/spark-2.2.0-bin/conf
- 修改 conf/slaves
# work节点
bigdata.centos02
2. 服务启动与测试
- 服务启动
sbin/start-all.sh
- 编写Scala测试程序
词频统计,文件路径从参数中传入。将测试程序打包成jar包(命名为sparktest.jar),上传服务器
package com.wangmh.sparks
import org.apache.spark.sql.SparkSession
object Test {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder
.master("local")
.appName("Hdfstest")
.getOrCreate()
val filePath =args(0)
import spark.implicits._
val dataset = spark.read.textFile(filePath)
.flatMap(x => x.split(" "))
.map(x => (x, 1)).groupBy("_1").count().show()
}
}
- 测试文件内容
hadoop hive
hive spark
hbase java
java spark
- 测试
执行命令,cluster模式运行:
bin/spark-submit --master spark://bigdata.centos02:7077 --deploy-mode cluster /opt/datas/sparktest.jar hdfs://bigdata.centos01:9000/user/data/wc.input
访问配置文件中配置web监控页面,查看测试结果:
二、spark on yarn模式
1. 配置
- 修改 conf/spark-env.sh
在standalone配置的基础上加入以下配置:
# Hadoop配置文件目录
HADOOP_CONF_DIR=/opt/modules/hadoop-2.5.0/etc/hadoop
2. 测试
测试之前务必启动yarn的服务。
2.1 spark-shell
- 进入shell命令行
./bin/spark-shell --master yarn --deploy-mode client
- 测试结果
2.2 spark-submit
- 修改Scala程序
package com.wangmh.sparks
import org.apache.spark.sql.SparkSession
import spark.implicits._
object Test {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder
//.master("local") //主要修改了master的值
.master("yarn")
.appName("Hdfstest")
.getOrCreate()
val filePath =args(0)
val dataset = spark.read.textFile(filePath)
.flatMap(x => x.split(" "))
.map(x => (x, 1)).groupBy("_1").count().show()
}
}
- 提交任务
bin/spark-submit --class com.wangmh.sparks.Test --master yarn --deploy-mode cluster /opt/datas/sparktest.jar hdfs:///user/data/wc.input
- 访问yarn的监控页面(http://bigdata.centos01:8088)查看结果