非科班出身,年薪50万的大数据Spark学习心得

需积分: 15 1 下载量 161 浏览量 更新于2024-08-04 收藏 95KB DOCX 举报
"某二本非计算机专业16年毕业,通过深入学习大数据技术Spark,实现了职业转型,目前年薪达到50万。本文是该学习者在尚硅谷学习大数据技术Spark的总结,旨在分享其学习经验和理解,帮助其他有志于大数据领域的学习者。" Spark是大数据处理领域的重要工具,以其高效、易用和可扩展性著称。Spark的核心原理在于它的内核设计,包括了SparkContext、ApplicationMaster、Driver和Executor等关键组件。 Spark应用的提交通常是在Yarn这样的集群管理器上进行。当使用`bin/spark-submit`命令启动Spark应用时,会在集群中启动一个JVM进程,这个进程包含了ApplicationMaster和Driver。其中,ApplicationMaster是一个独立的进程,负责资源的申请和任务的调度;而Driver则是一个运行在JVM中的线程,它通常与SparkContext相联系,SparkContext是Spark程序的入口点,负责创建和管理RDD(弹性分布式数据集)。 Executor是Spark中执行实际计算的实体,它是一个计算对象,同时包含ExecutorBackend作为后台通信接口。Executor们运行在集群的不同节点上,负责执行由Driver分配的任务。 Spark的内部通信机制基于高效的网络框架,早期使用AKKA,现在更多地采用Netty。Netty提供了基于AIO(异步非阻塞I/O)的高性能网络通信能力。在Linux系统中,虽然AIO的底层实现与NIO的EPOLL类似,但在Windows系统上,AIO通过IOCP(I/O完成端口)提供了真正的异步I/O,因此在选择Netty时,需要考虑目标运行环境。 Spark的组件之间通过RPC(远程过程调用)进行通信。Driver通过CoarseGrainedSchedulerBackend与Executor进行交互,Executor则通过CoarseGrainedExecutorBackend响应Driver的调度指令。所有的通信终端都继承自Endpoint,并通过RpcEndpoint接收消息,通过RpcEndpointRef发送或请求消息。 在Spark作业的生命周期中,用户通过SparkConf设置应用名称,创建SparkContext后,逻辑代码被转换为RDD。RDD是Spark的基础数据抽象,它们可以通过转换算子(如map、filter)进行操作,并通过行动算子(如count、collect)触发实际计算。RDD的转换和行动会触发Job的生成,Job会被进一步划分为多个Stage,Stage的划分依据转换算子和依赖关系,尤其是窄依赖和宽依赖。窄依赖允许数据在Stage内部高效传递,而宽依赖则可能导致数据shuffle,从而划分新的Stage。RDD的分区数量在默认情况下是不变的,但某些shuffle操作(如groupByKey、reduceByKey)可能会改变分区数量,这会影响计算的并行度和效率。 通过深入理解Spark的内核原理、组件通信机制以及作业调度流程,可以帮助开发者更好地优化Spark应用,提升大数据处理的效率和性能。这位年薪50万的大佬的学习经验表明,即使是非计算机专业的学习者,也能通过系统学习和实践在大数据领域取得显著成就。