Spark部署
local模式local模式就是在本地部署单个spark服务local模式多数用于自学形式在本地进行练手和测试。 官网下载地址 Apache Archive Distribution Directory下载之后将文件夹在linux系统中进行解压缩操作其实通过上面的计算我们就成功将他部署到了local中之后执行下面的命令展示一下bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[2] \ ./examples/jars/spark-examples_2.12-3.3.1.jar \ 10命令详解这是一个使用 Spark 自带的spark-submit脚本来提交任务的标准命令作用是计算圆周率π的近似值。这条命令是学习 Spark 时最经典的入门示例下面我为你逐行拆解它的含义。bin/spark-submit这是 Spark 提供的统一任务提交脚本用于将你的应用程序提交到集群上运行。bin/表示它在 Spark 安装目录下的bin文件夹中。\这是 Linux 系统的续行符告诉终端这行命令还没结束下一行是它的延续。它本身没有实际功能只是为了提升可读性。--class org.apache.spark.examples.SparkPi指定程序运行的入口类。Spark 会去执行spark-examplesJAR 包中SparkPi类的main方法。--master local[2]指定 Spark 任务的运行模式。local表示在本地模式运行不会连接任何集群非常适合开发和测试。[2]表示启用2 个线程来模拟并行计算相当于使用 2 个 CPU 核心来执行任务。./examples/jars/spark-examples_2.12-3.3.1.jar指定要运行的应用程序 JAR 包的路径。这个包包含了 Spark 官方提供的各种示例程序_2.12表示它是为 Scala 2.12 编译的-3.3.1则是 Spark 版本号。10这是传给SparkPi示例程序的参数。在SparkPi程序中这个数字代表循环计算的次数数值越大计算量越大估算出的圆周率也越精确。spark web看板观测执行中的任务Spark web UI at http://192.168.1.191:4040但是当前的看板只能在任务执行的时候可以观测执行之后这个页面就看不到了他自己就会退出。Yarn部署注意下面的部署都是在你已经拥有一个可以使用的hadoop为前提进行配置。不是到yarn修改spark中的配置文件/conf/spark-env.sh添加YARN_CONF_DIR配置保证后续运行任务的路径都变成集群路径[atguiguhadoop102 conf]$ mv spark-env.sh.template spark-env.sh[atguiguhadoop102 conf]$ vim spark-env.shYARN_CONF_DIR/opt/module/hadoop/etc/hadoop之后通过命令启动hadoop:启动HDFS以及YARN集群$ sbin/start-dfs.sh$ sbin/start-yarn.sh执行命令进行测试bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master yarn \./examples/jars/spark-examples_2.12-3.3.1.jar \10可以计算出结果证明执行成功。因为是部署在yarn上的我们可以打开Yarn资源管理页面查看地址http://ResourceManager主机IP:8088/cluster/apps查看运行日志目前是Hadoop的作业运行日志展示如果想获取Spark的作业运行日志请进行如下配置1修改spark-default.conf文件配置日志存储路径写vim spark-defaults.confspark.eventLog.enabled truespark.eventLog.dir hdfs://hadoop102:8020/directory2修改spark-env.sh文件添加如下配置vim spark-env.shexport SPARK_HISTORY_OPTS-Dspark.history.ui.port18080-Dspark.history.fs.logDirectoryhdfs://hadoop102:8020/directory-Dspark.history.retainedApplications30# 参数1含义WEBUI访问的端口号为18080# 参数2含义指定历史服务器日志存储路径读# 参数3含义指定保存Application历史记录的个数如果超过这个值旧的应用程序信息将被删除这个是内存中的应用数而不是页面上显示的应用数。3hdfs://hadoop102:8020/directory 这个文件一定要存在大家自己要创建一下。4为了能从Yarn上关联到Spark历史服务器需要配置spark历史服务器关联路径。目的点击yarn8088上spark任务的history按钮进入的是spark历史服务器18080而不再是yarn历史服务器19888。修改配置文件/opt/module/spark-yarn/conf/spark-defaults.conf添加如下内容spark.yarn.historyServer.addresshadoop102:18080spark.history.ui.port18080重启Spark历史服务sbin/stop-history-server.shsbin/start-history-server.sh配置完成后再次点击就可以直接跳转到spark历史页面中Spark On YARN 两种部署模式详解client模式Driver 进程运行位置Driver 程序运行在提交任务的本地客户端机器你敲 spark-submit 命令的服务器不在 YARN 容器中。资源容器分工AMApplicationMasterYARN 集群中 NodeManager 的容器仅负责申请资源、调度 ExecutorDriver本地客户端进程Executor集群各个 NodeManager 容器执行计算任务。日志输出位置Spark 运行打印的计算日志、print 输出直接打印在本地提交命令的终端窗口YARN 容器日志存于 Hadoop 集群日志服务器需用yarn logs -applicationId查看。网络与适用场景客户端机器必须全程在线、网络稳定一旦断开终端 / 关闭服务器Driver 进程被杀任务直接失败适合开发调试本地实时看日志、排查代码报错测试小任务。优缺点✅ 调试方便日志实时输出在本地 ❌ 提交机器占用资源长期跑任务不稳定网络波动易丢任务。cluster 模式Driver 进程运行位置Driver 内嵌在YARN ApplicationMaster 容器中运行在集群某一台 NodeManager 节点不在本地提交机。资源容器分工AM 容器同时承载 ApplicationMaster Spark Driver 两个核心程序Executor集群其他 NodeManager 容器执行 RDD / 算子计算。日志输出位置所有 Spark 日志、计算输出、异常堆栈全部存在 YARN 集群日志系统本地终端只会打印任务提交信息看不到业务输出必须执行yarn logs -applicationId 任务ID查看完整日志。网络与适用场景提交命令后本地客户端即可断开、关机任务不受影响Driver 在集群内部节点间网络通信更快稳定 适合生产环境定时 / 长期离线计算任务。优缺点✅ 任务稳定性高不依赖提交客户端机器集群内部通信性能更好生产标准用法 ❌ 调试麻烦不能实时看本地日志排错需要去 YARN 拉取日志。对比维度YARN ClientYARN ClusterDriver 所在机器提交任务的本地客户端集群中某台 NodeManagerAM 容器客户端是否可断开不可断开断则任务失败提交完即可断开任务正常运行实时日志位置本地终端直接打印仅集群 YARN 日志本地无业务输出资源占用占用提交服务器 CPU / 内存全部资源由 YARN 集群调度生产推荐不推荐仅调试用生产环境标准部署模式网络依赖客户端与集群保持长连接Driver 在集群内部网络开销更小client命令bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ ./examples/jars/spark-examples_2.12-3.3.1.jar \ 10-------------------------------------------------------------------------------------------------------------------------bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ ./examples/jars/spark-examples_2.12-3.3.1.jar \ 10cluster模式命令bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster ./examples/jars/spark-examples_2.12-3.3.1.jar 10上面是当前最常见的两种部署方式当然也可以使用k8s进行部署大家敬请期待