点一下关注吧!!!非常感谢!!持续更新!!!
目前已经更新到了:
Hadoop(已更完)
HDFS(已更完)
MapReduce(已更完)
Hive(已更完)
Flume(已更完)
Sqoop(已更完)
Zookeeper(已更完)
HBase(已更完)
Redis (已更完)
Kafka(已更完)
Spark(正在更新!)
章节内容
上节我们完成了如下的内容:
Spark项目下载
Spark环境配置、配置文件配置
项目分发 至 h122和h123服务器
Spark集群架构
在介绍完Spark的核心特性和组件之后,接下来详细探讨一下Spark的集群架构和部署模式。理解Spark的集群架构有助于更好地利用其强大的分布式计算能力,以满足不同的计算需求。
Spark集群主要由以下三个核心组件组成:
驱动程序
集群管理器
执行器
驱动程序(Driver Program)
驱动程序是Spark应用的入口,它负责运行用户定义的main函数,并创建SparkContext对象。SparkContext是与集群交互的接口,它负责调度任务,将任务分发到各个执行器(Executor)中执行。
驱动程序还负责监控任务的执行状态,并收集执行结果。在程序的生命周期中,驱动程序与集群管理器持续通信,确保作业的顺利运行。
集群管理器(Cluster Manager)
集群管理器负责管理集群的资源,并将资源分配给Spark应用。它负责协调驱动程序和执行器的交互,并处理任务的调度。Spark支持多种集群管理器,包括独立模式(Standalone)、YARN、Mesos和Kubernetes。
Standalone:这是Spark自带的集群管理器模式,适用于在小规模集群中独立运行Spark集群。Standalone模式易于设置和管理,适合入门和开发环境。
YARN(Yet Another Resource Negotiator):YARN是Hadoop生态系统中的资源管理器,广泛应用于大规模生产集群。Spark可以与YARN集成,以共享Hadoop集群的资源和数据。
Mesos:Mesos是一个开源的集群资源管理器,可以将集群中的资源划分给多个应用。Mesos支持多种框架,并且具有较高的扩展性和灵活性。
Kubernetes:Kubernetes是一个流行的容器编排平台,Spark可以部署在Kubernetes上,通过Kubernetes的资源管理和容器化能力,实现
更灵活的部署和扩展。
执行器(Executor)
执行器是在工作节点(Worker Node)上运行的进程,负责执行分配的任务。每个执行器都具有自己的内存和CPU资源,并独立执行任务。
执行器在整个Spark应用的生命周期内都会存在,它不仅执行任务,还会将数据缓存在内存中,以加快后续任务的处理速度。
Spark的集群模式
Spark支持多种集群部署模式,适应不同的工作环境和需求:
本地模式(Local Mode)
在本地模式下,Spark在单一节点上运行,无需集群管理器。这种模式主要用于开发、测试和调试,不适合生产环境。使用本地模式时,可以通过指定线程数(如local[*])来决定并行度。
集群模式(Cluster Mode)
在集群模式下,Spark应用部署在集群中,任务分发到多个工作节点上执行。驱动程序可以运行在本地也可以运行在集群中,前者称为客户端模式(Client Mode),后者称为集群模式(Cluster Mode)。
客户端模式:驱动程序在用户的本地机器上运行,适合需要频繁与用户交互的应用。用户提交应用时,集群管理器负责分配资源并启动执行器。
集群模式:驱动程序在集群的一个节点上运行,适合长时间运行的作业和生产环境。用户提交应用后,集群管理器会在集群中选择一个节点作为驱动程序运行的地方。
混合模式(Mesos/Kubernetes)
在Mesos或Kubernetes模式下,Spark可以与其他应用共享集群资源,并根据资源需求动态调整资源的分配。这种模式为大规模集群提供了更高的灵活性和资源利用率,适合企业级应用场景。
集群资源管理
在Spark集群中,资源管理是一个关键问题。不同的集群管理器采用不同的策略来分配资源,确保集群的高效运行。Spark支持的资源管理策略包括:
静态资源分配:在Standalone模式中,资源是预先配置好的,集群管理器会根据这些配置为Spark应用分配资源。
动态资源分配:在YARN和Kubernetes模式中,Spark可以根据当前的工作负载动态调整资源使用,释放不再需要的资源,从而提高集群的整体资源利用率。
集群监控与调优
为了确保Spark集群的稳定运行和高效利用,集群监控与调优是不可或缺的环节。Spark提供了多种监控工具和日志记录功能,帮助管理员了解集群的运行状态并进行调优。
Spark UI:这是一个基于Web的用户界面,显示作业的执行状态、任务的分配情况、资源的使用情况等详细信息。通过Spark UI,用户可以深入了解应用的执行过程,并找出性能瓶颈。
Ganglia、Prometheus等监控工具:这些工具可以与Spark集成,提供更细粒度的监控数据,帮助管理员实时监控集群的健康状态。
日志与指标:Spark生成的日志文件和性能指标数据也可以帮助管理员分析集群的运行情况,发现并解决潜在的问题。
Hadoop 集群启动
在 h121 节点上进行执行,我们启动服务:
start-all.sh
启动的结果如下图所示:
Spark 集群启动
接着我们需要到目录下,启动集群的Spark
cd /opt/servers/spark-2.4.5-bin-without-hadoop-scala-2.12/sbin ./start-all.sh
h121 节点
通过 jps 我可以可以看到:Master 和 Worker
h122 节点
通过 jps 我们可以看到:
h123 节点
通过 jps 我们可也看到:
查看结果
我们通过查看 h121 的日志,可以看到是 8081 的端口(我的8080好像是被占用了)
这个在Spark的目录下的 logs下,如果你也遇到了无法访问,可以看看这个logs
测试运行
这里Spark提供了一个官方的HelloWorld(前提你配置好环境变量,不然你需要到指定目录执行)
run-example SparkPi 10 • 1
可以看到如下的结果为:
SparkShell
我们可以简单的启动一个Shell来测试Spark的效果:
(后续有更深入的学习!)
spark-shell --master local-cluster[*]
这里有一些之前测试的图片:
先不管别的,先写一段感受一下:
val rdd1 = sc.makeRDD(1 to 100).map((_, 1)) rdd1.getNumPartitions