centos 7.5
spark-2.1.1
直接解压即可,无需配置(spark-2.1.1-bin-hadoop2.7.tgz 集成hadoop环境包 )
# 提交任务 使用spark案例 计算pi
bin/spark-submit --master local[20] \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.1.1.jar 100
# 也可以使用提供的脚本
bin/run-example SparkPi 100
bin/spark-shell --master 'local[2]'
参数说明:--master 'local[2]'
可以不指定 默认local[*] , [] 中表示并行度
Spark context Web UI available at http://192.168.9.21:4040
Spark context available as 'sc' (master = local[*], app id = local-1596820563191).
Spark session available as 'spark'.
SparkShell执行WorkCount
bin/spark-shell
scala> sc.textFile("/root/input").flatMap(_.split("\\W+")).map((_,1)).reduceByKey(_ + _).collect
res7: Array[(String, Int)] = Array((min,1), (sum_low_carbon,3), (u_002,1), (user_low_carbon,7), (pre2diff,2), (100g,2), (partition,7), (19,2), (2017,5), (order,8), (between,2), (0,3), (with,1), (t2,2), (2,6), (cousd,5), (as,3), ("",62), (lag,2), (floor,2), (after1diff,3), ...
scala>
Spark standalone 资源调度系统的Leader。掌管整个集群的资源信息,类似与Yarn中的ResourceManager
Spark 特有资源调度系统的 Slave ,类似Yarn框架中的NodeManager,类似Yarn的NodeManager
每个Spark应用都包含一个driver program 即驱动程序,负责将并行任务发布到集群中,驱动程序包含Spark应用程序中的主函数,定义了分布式数据集并应用在集群中
在之前使用的SparkShell 就是一类驱动程序,我们可以在SparkShell应用程序中键入任何Spark操作,然后由它负责发布
驱动程序通过SparkContext对象来访问Spark,SparkContext对象相当于一个到Spark集群的接连.
在sparkshell中会自动创建 Spark Context 对象 sc
创建 RDD 弹性分布式数据集 (Resilient Distributed Dataset)
Worker中的一个进程(ExecutorBackend),负责具体执行计算和为应用存储数据
Spark会发送应用程序代码(jar包)到每隔执行器,最后SparkContext对象发送任务到执行器开始执行程序
SparkContext对象连接到上述Cluster Manager 获取分配资源, 也可以连接多种Cluster Manager跨应用分配资源
独立模式(寂寞模式).该模式下调度器使用 独立调度器(Spark own standalone Cluster Manager)
解压
重命名并编辑conf/spark-env.sh master地址以及通讯端口(默认7077 可以不配置)
SPARK_MASTER_HOST=spark-node01
SPARK_MASTER_PORT=7077
重命名并编辑conf/slaves 写入worker地址
spark-node01
spark-node02
spakr-node03
分发conf文件夹到所有spark节点
在配置master的节点上sbin/start-all.sh
[root@spark-node01 sbin]# jps
2503 Master
2599 Worker
2699 Jps
启动后可 使用 master hostname:8080 查看Spark WebUI
bin/spark-submit --master spark://spark-node01:7077 \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.1.1.jar 1000
bin/spark-shell --master spark://spark-node01:7077
参数说明:Standalone模式需要指定 --master
通过 --deploy-mode cluster
修改为 Cluster Mode.
bin/spark-submit --master local[20] \
--class org.apache.spark.examples.SparkPi \
--deploy-mode cluster \
./examples/jars/spark-examples_2.11-2.1.1.jar 1000
执行上述代码后 不会输出结果,因为Driver 在集群中某一节点,此时需要通过WebUI查看
Driver : 4040 (只能在运行时查看,或配置历史服务器)
Master : 8080
Worker :8081 (若同一节点开启多个Worker 8082,8083…)
Hsitory UI :18080
重命名并编辑 conf/spark-defaults.conf
# spark.master spark://spark-ndoe01:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop-node01:8021/spark-log
在hadoop创建对应目录 /spark-log
在 conf/spark-env.sh 文件,添加如下配置
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://hadoop-node01/spark-log"
分发配置
启动 sbin/start-history-server.sh
进程名称 HistoryServer
WebUI地址 : 启动的节点host名称:18080
通过配置多个Master,实现高可用,先启动节点处于Active状态,其他都处于Standby状态
编辑 conf/spark-env.sh 添加如下配置
# 注释以下内容:
#SPARK_MASTER_HOST=hadoop201
#SPARK_MASTER_PORT=7077
# 添加以下内容:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk-node01:2181,zk-node02:2181,zk-node03:2181 -Dspark.deploy.zookeeper.dir=/spark"
分发配置文件
启动zookeeper
启动/重启全部spark节点
启动从master sbin/start-master.sh
通过从master节点WebUI 可以看到状态为standby,当处于alive状态的master节点宕机,处于standby会自动切换到alive状态
Spark Clinet 直接连接到Yarn,不需要构建Spark集群。Yarn集群中的节点不需要安装Spark环境,Spark Clinet会将Spark任务所需要的jar包打包提交到RM(hdfs中) 可以理解为该模式下 Spark仅为客户端
同Standalone 一样 Yarn 也有两种模式
client :Driver 程序运行在客户端,用于交互、调试,可立即看到app输出
cluster :Driver 程序运行在ResourceManager 启动的ApplicationMaster上,适用于生产环境
测试环境配置 : 防止内存不足导致任务被意外杀死, 编辑hadoop的yarn-site.xml添加如下内容
<property>
<name>yarn.nodemanager.pmem-check-enabledname>
<value>falsevalue>
property>
<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>
解压Spark安装包(spark-2.1.1-bin-hadoop2.7.tgz)
重命名并编辑 spark-env.sh 配置yarn地址,添加以下配置
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
配置历史服务器 (参考上述) 并启动
Yarn Web UI (8088) 与 Spark历史服务器连接配置,编辑 conf/spark-default.conf 加入如下配置
spark.yarn.historyServer.address=spark-node01:18080
spark.history.ui.port=18080
如运行是报lzo压缩无法找到错误,可在 conf/spark-default.conf 加入以下配置指定lzo jar包位置
spark.jars=/opt/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar
bin/spark-submit \
--master yarn --deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.1.1.jar 1000
在yarn 模式只能读取hdfs中的文件
bin/spark-shell --master yarn
scala> sc.textFile("/opt/input").flatMap(_.split("\\W+")).map((_,1)).reduceByKey(_ + _).collect
模式 | Spark安装节点数 | 启动进程 | 所属者 |
---|---|---|---|
local | 1 | 无 | spark |
Standalone | 多台 | Master Worker | spark |
Yarn | 1 | Yarn HDFS | Hadoop |