当前位置: 首页 > news >正文

Spark面试题及详细答案100道(71-80)-- 配置与部署

前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

文章目录

  • 一、本文面试题目录
      • 71. Spark standalone模式的部署步骤是什么?
      • 72. 如何在YARN上部署Spark?需要配置哪些关键参数?
      • 73. Spark on YARN的`client`模式和`cluster`模式有什么区别?
      • 74. Spark的`spark-env.sh`和`spark-defaults.conf`配置文件的作用是什么?
      • 75. 如何设置Spark应用程序的名称、资源(内存、核数)等参数?
      • 76. 什么是Spark的历史服务器(History Server)?如何配置和使用?
      • 77. Spark与Hadoop的兼容性如何?需要注意哪些配置?
      • 78. 如何在Spark中集成Hive?
      • 79. 如何在Spark中配置日志级别?
      • 80. Spark应用程序提交的命令(`spark-submit`)的常用参数有哪些?
  • 二、100道Spark面试题目录列表

一、本文面试题目录

71. Spark standalone模式的部署步骤是什么?

Spark standalone模式是Spark自带的集群部署模式,适用于小规模集群,部署步骤如下:

  1. 环境准备

    • 所有节点安装Java(JDK 8+),配置JAVA_HOME
    • 下载Spark二进制包(如spark-3.4.0-bin-hadoop3.tgz),解压到所有节点的相同路径(如/opt/spark)。
    • 配置SSH免密登录(Master节点可无密码登录所有Worker节点)。
  2. 配置Master节点

    • 修改$SPARK_HOME/conf/slaves(或workers,Spark 2.0+),添加所有Worker节点的主机名或IP:
      worker1
      worker2
      worker3
      
    • (可选)修改spark-env.sh,配置Master端口和内存:
      export SPARK_MASTER_HOST=master  # Master节点主机名
      export SPARK_MASTER_PORT=7077    # Master端口(默认7077)
      export SPARK_MASTER_WEBUI_PORT=8080  # WebUI端口(默认8080)
      export SPARK_WORKER_MEMORY=8g    # 每个Worker的内存
      export SPARK_WORKER_CORES=4      # 每个Worker的核数
      
  3. 启动集群

    • 在Master节点执行启动脚本:
      $SPARK_HOME/sbin/start-all.sh
      
    • 验证集群:访问http://master:8080,查看Worker节点是否注册成功。
  4. 提交应用

    $SPARK_HOME/bin/spark-submit \--master spark://master:7077 \--class org.apache.spark.examples.SparkPi \--executor-memory 2g \--total-executor-cores 4 \$SPARK_HOME/examples/jars/spark-examples_2.12-3.4.0.jar \100
    
  5. 停止集群

    $SPARK_HOME/sbin/stop-all.sh
    

72. 如何在YARN上部署Spark?需要配置哪些关键参数?

在YARN上部署Spark(Spark on YARN)需依赖Hadoop YARN集群,步骤及关键配置如下:

  1. 环境准备

    • 已部署Hadoop YARN集群(HDFS和YARN正常运行)。
    • 确保Spark与Hadoop版本兼容(如Spark 3.x兼容Hadoop 2.7+)。
    • 配置HADOOP_CONF_DIR指向Hadoop配置目录(/etc/hadoop/conf):
      export HADOOP_CONF_DIR=/etc/hadoop/conf
      
  2. 关键配置参数(在spark-defaults.conf或提交命令中设置):

    • spark.master=yarn:指定YARN作为集群管理器。
    • spark.yarn.appMasterEnv.JAVA_HOME:YARN ApplicationMaster的JDK路径。
    • spark.executorEnv.JAVA_HOME:Executor的JDK路径。
    • spark.yarn.jars:Spark依赖JAR包的HDFS路径(避免每次提交上传JAR,如hdfs:///spark/jars/*)。
    • spark.yarn.queue:指定YARN队列(默认default)。
    • spark.driver.memory:Driver内存(默认1g)。
    • spark.executor.memory:每个Executor内存(默认1g)。
    • spark.executor.cores:每个Executor的核数(默认1)。
    • spark.dynamicAllocation.enabled:是否开启动态资源分配(默认false)。
  3. 提交应用到YARN

    spark-submit \--master yarn \--deploy-mode cluster \  # 或client模式--class org.apache.spark.examples.SparkPi \--executor-memory 2g \--executor-cores 2 \--num-executors 5 \$SPARK_HOME/examples/jars/spark-examples_2.12-3.4.0.jar \100
    
  4. 验证部署

    • 访问YARN WebUI(http://yarn-resourcemanager:8088)查看应用状态。
    • 访问Spark应用UI(通过YARN WebUI跳转,默认端口4040)。

73. Spark on YARN的client模式和cluster模式有什么区别?

Spark on YARN的clientcluster模式主要区别在于Driver程序的运行位置,具体差异如下:

特性client模式cluster模式
Driver位置运行在提交应用的客户端(如本地机器)运行在YARN集群的某个NodeManager节点上
网络通信Driver与Executor直接通信,需客户端与集群网络通畅Driver在集群内部,通信更高效
客户端依赖客户端需保持运行(关闭则应用失败)客户端提交后可退出,不影响应用运行
适用场景交互式场景(如Spark Shell、调试)生产环境、批处理任务(无需客户端持续连接)
日志查看驱动日志直接输出到客户端控制台需通过YARN WebUI或yarn logs命令查看
资源占用客户端需占用一定资源运行Driver客户端资源占用少

示例

  • client模式提交(适合调试):
    spark-submit --master yarn --deploy-mode client ...
    
  • cluster模式提交(适合生产):
    spark-submit --master yarn --deploy-mode cluster ...
    

选择建议

  • 开发调试用client模式,方便查看实时日志和交互。
  • 生产环境用cluster模式,避免客户端故障影响应用,且更适合自动化任务(如定时调度)。

74. Spark的spark-env.shspark-defaults.conf配置文件的作用是什么?

spark-env.shspark-defaults.conf是Spark的核心配置文件,分别用于环境变量应用参数配置:

  1. spark-env.sh

    • 作用:配置Spark运行的环境变量,如JVM参数、集群地址、资源限制等,影响Spark进程(Master/Worker/Driver/Executor)的启动。
    • 位置$SPARK_HOME/conf/spark-env.sh(需从模板spark-env.sh.template复制)。
    • 常见配置
      export JAVA_HOME=/usr/lib/jvm/java-8-openjdk  # JDK路径
      export SPARK_MASTER_HOST=master              # Standalone模式Master地址
      export SPARK_WORKER_MEMORY=8g                # Standalone模式Worker内存
      export SPARK_WORKER_CORES=4                  # Standalone模式Worker核数
      export SPARK_DAEMON_JAVA_OPTS="-Xmx2g"       # Master/Worker的JVM参数
      export HADOOP_CONF_DIR=/etc/hadoop/conf      # Hadoop配置目录(YARN模式)
      
  2. spark-defaults.conf

    • 作用:配置Spark应用的默认参数(如spark.masterspark.executor.memory),可被spark-submit命令的参数覆盖。
    • 位置$SPARK_HOME/conf/spark-defaults.conf(需从模板spark-defaults.conf.template复制)。
    • 常见配置
      spark.master                     yarn                  # 默认集群管理器
      spark.driver.memory              1g                    # Driver默认内存
      spark.executor.memory            2g                    # Executor默认内存
      spark.executor.cores             2                     # 每个Executor默认核数
      spark.sql.shuffle.partitions     200                   # SQL Shuffle默认分区数
      spark.serializer                 org.apache.spark.serializer.KryoSerializer  # 序列化器
      spark.yarn.jars                  hdfs:///spark/jars/*  # YARN模式下的JAR包路径
      

优先级spark-submit命令参数 > spark-defaults.conf > spark-env.sh(环境变量)。

75. 如何设置Spark应用程序的名称、资源(内存、核数)等参数?

设置Spark应用的名称和资源参数可通过**spark-submit命令**、代码配置文件实现,常用方式如下:

  1. 通过spark-submit命令设置(优先级最高):

    spark-submit \--name "MySparkApp" \  # 应用名称--master yarn \        # 集群管理器--deploy-mode cluster \ # 部署模式--driver-memory 2g \   # Driver内存--executor-memory 4g \ # 每个Executor内存--executor-cores 2 \   # 每个Executor的核数--num-executors 10 \   # Executor总数(YARN模式)--total-executor-cores 20 \ # 所有Executor的总核数(Standalone模式)--class com.example.MyApp \ # 主类myapp.jar \            # 应用JAR包arg1 arg2              # 应用参数
    
  2. 在代码中设置(仅部分参数生效,如名称、内存):

    import org.apache.spark.sql.SparkSessionval spark = SparkSession.builder().appName("MySparkApp") // 应用名称.config("spark.driver.memory", "2g").config("spark.executor.memory", "4g").config("spark.executor.cores", "2").getOrCreate()
    
  3. 通过spark-defaults.conf设置(默认值,可被命令覆盖):

    spark.app.name                   MySparkApp
    spark.driver.memory              2g
    spark.executor.memory            4g
    spark.executor.cores             2
    

注意

  • 资源参数(内存、核数)需根据集群实际容量调整,避免超过集群限制。
  • num-executors仅在YARN模式有效,Standalone模式通过total-executor-cores控制总核数。
  • 应用名称会显示在Spark UI和集群管理器(如YARN)中,便于识别。

76. 什么是Spark的历史服务器(History Server)?如何配置和使用?

Spark历史服务器(History Server) 用于持久化和展示已完成的Spark应用程序日志和统计信息,弥补实时UI(4040端口)在应用结束后关闭的不足。

配置步骤

  1. 配置存储路径

    • spark-defaults.conf中指定日志存储目录(通常为HDFS路径,确保所有节点可访问):
      spark.eventLog.enabled           true                   # 启用事件日志
      spark.eventLog.dir               hdfs:///spark/eventLogs  # 日志存储路径(HDFS或本地)
      spark.history.fs.logDirectory    hdfs:///spark/eventLogs  # 历史服务器读取日志的路径
      
  2. 配置历史服务器端口(可选):

    • spark-env.sh中设置WebUI端口(默认18080):
      export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080"
      
  3. 启动历史服务器

    $SPARK_HOME/sbin/start-history-server.sh
    
  4. 访问历史服务器

    • 打开浏览器访问http://history-server-host:18080,查看所有已完成的应用日志。
  5. 停止历史服务器

    $SPARK_HOME/sbin/stop-history-server.sh
    

使用场景

  • 分析已完成应用的性能瓶颈(如查看Stage、Task详情)。
  • 排查失败应用的错误日志。
  • 审计应用资源使用情况。

注意:需确保spark.eventLog.dir目录存在且有写入权限(如hdfs dfs -mkdir -p /spark/eventLogs)。

77. Spark与Hadoop的兼容性如何?需要注意哪些配置?

Spark与Hadoop兼容性良好,可无缝集成HDFS、YARN和Hive,但需注意版本匹配和配置细节:

  1. 版本兼容性

    • Spark官方对Hadoop的支持版本通常为Hadoop 2.7+和3.x(如Spark 3.4支持Hadoop 2.7-3.3)。
    • 避免使用跨大版本组合(如Spark 3.x + Hadoop 1.x,可能存在API不兼容)。
    • 查看Spark官网的“Downloads”页面获取具体版本兼容表。
  2. 关键配置

    • HDFS集成:无需额外配置,Spark默认使用Hadoop的core-site.xmlhdfs-site.xml访问HDFS。
    • YARN集成
      • 配置HADOOP_CONF_DIR指向Hadoop配置目录:
        export HADOOP_CONF_DIR=/etc/hadoop/conf
        
      • 确保YARN的yarn.resourcemanager.hostname等参数正确配置。
    • 依赖包
      • 下载预编译的Spark版本(如spark-3.4.0-bin-hadoop3.tgz),避免手动编译。
      • 若需自定义Hadoop版本,需重新编译Spark并指定Hadoop版本:
        ./dev/make-distribution.sh --name custom-spark --tgz -Phadoop-3.3
        
  3. 注意事项

    • YARN的资源隔离:确保YARN的yarn.nodemanager.resource.memory-mbyarn.scheduler.maximum-allocation-mb足够分配Spark的Executor内存。
    • HDFS权限:Spark应用需有HDFS路径的读写权限(如输出目录、事件日志目录)。
    • 加密配置:若Hadoop启用了Kerberos认证,需为Spark配置相应的安全凭证(如spark.yarn.keytabspark.yarn.principal)。

78. 如何在Spark中集成Hive?

Spark集成Hive可实现访问Hive表、使用HiveQL和共享Hive元数据,步骤如下:

  1. 环境准备

    • 已安装Hive并配置Metastore(支持本地Derby或远程MySQL/PostgreSQL)。
    • 确保Spark与Hive版本兼容(如Spark 3.x兼容Hive 2.3+)。
  2. 配置Hive元数据

    • 将Hive的配置文件(hive-site.xml)复制到Spark的conf目录:
      cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf/
      
    • hive-site.xml中需正确配置Metastore地址(如远程Metastore):
      <property><name>hive.metastore.uris</name><value>thrift://hive-metastore-host:9083</value>
      </property>
      
  3. 添加Hive依赖

    • Spark默认包含Hive支持(-Phive-Phive-thriftserver模块),无需额外安装。
    • 若使用自定义编译的Spark,需确保编译时包含Hive模块。
  4. 验证集成

    • 启动Spark Shell(自动加载Hive配置):
      spark-shell --master yarn
      
    • 在Spark中访问Hive表:
      // 查看Hive数据库
      spark.sql("show databases").show()// 读取Hive表
      val df = spark.table("default.user")
      df.show()// 创建Hive表
      spark.sql("create table if not exists spark_hive_test (id int, name string)")
      
  5. 启动Thrift Server(可选)

    • 允许通过JDBC/ODBC访问Spark SQL(兼容HiveServer2):
      $SPARK_HOME/sbin/start-thriftserver.sh --master yarn
      
    • 使用Beeline连接:
      beeline -u jdbc:hive2://localhost:10000 -n username
      

注意:若Hive启用了Kerberos,需在spark-env.sh中配置相应的安全参数。

79. 如何在Spark中配置日志级别?

Spark的日志级别控制(如DEBUG、INFO、WARN、ERROR)可通过以下方式配置,用于减少冗余日志或调试问题:

  1. 通过log4j2.properties配置(全局默认)

    • 复制模板文件并修改:
      cp $SPARK_HOME/conf/log4j2.properties.template $SPARK_HOME/conf/log4j2.properties
      
    • 编辑log4j2.properties,设置根日志级别或特定类的日志级别:
      # 根日志级别(默认INFO)
      rootLogger.level = WARN# 特定类的日志级别(如Spark SQL)
      logger.org.apache.spark.sql.name = org.apache.spark.sql
      logger.org.apache.spark.sql.level = INFO# Spark Core的日志级别
      logger.org.apache.spark.name = org.apache.spark
      logger.org.apache.spark.level = ERROR
      
    • 生效范围:所有Spark应用(需重启Spark服务或重新提交应用)。
  2. 在代码中动态设置(针对当前应用)

    import org.apache.log4j.{Level, Logger}// 设置Spark核心日志级别为WARN
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)// 设置Spark SQL日志级别为ERROR
    Logger.getLogger("org.apache.spark.sql").setLevel(Level.ERROR)// 设置Hadoop相关日志级别为ERROR
    Logger.getLogger("org.apache.hadoop").setLevel(Level.ERROR)
    
    • 生效范围:仅当前应用,不影响其他应用。
  3. 通过spark-submit命令临时设置

    spark-submit \--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/path/to/custom-log4j2.properties" \--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/path/to/custom-log4j2.properties" \...
    
    • 适用于临时覆盖默认日志配置,无需修改全局文件。

常见日志级别(从低到高):TRACE < DEBUG < INFO < WARN < ERROR < FATAL。生产环境通常用WARN或ERROR减少日志量,调试时用DEBUG或INFO。

80. Spark应用程序提交的命令(spark-submit)的常用参数有哪些?

spark-submit是提交Spark应用的统一命令,常用参数按功能分类如下:

  1. 集群与部署模式

    • --master <url>:指定集群管理器(如yarnspark://master:7077local[*])。
    • --deploy-mode <mode>:部署模式(clientcluster,默认client)。
    • --queue <queue-name>:YARN队列名称(默认default)。
  2. 应用基本信息

    • --name <name>:应用名称(显示在UI中)。
    • --class <class-name>:主类全路径(如org.apache.spark.examples.SparkPi)。
    • --jars <paths>:依赖的额外JAR包(逗号分隔)。
    • --packages <packages>:Maven坐标的依赖包(如org.apache.hadoop:hadoop-aws:3.3.1)。
  3. 资源配置

    • --driver-memory <memory>:Driver内存(如2g,默认1g)。
    • --driver-cores <cores>:Driver核数(仅YARN cluster模式有效,默认1)。
    • --executor-memory <memory>:每个Executor内存(如4g,默认1g)。
    • --executor-cores <cores>:每个Executor的核数(YARN/Standalone模式,默认1)。
    • --num-executors <num>:Executor总数(仅YARN模式,默认2)。
    • --total-executor-cores <num>:所有Executor的总核数(仅Standalone模式)。
  4. 配置参数

    • --conf <key=value>:设置Spark配置参数(如spark.sql.shuffle.partitions=200)。
    • --properties-file <file>:指定配置文件(默认spark-defaults.conf)。
  5. 示例

    spark-submit \--master yarn \--deploy-mode cluster \--name "UserAnalysis" \--class com.example.UserAnalysis \--driver-memory 2g \--executor-memory 4g \--executor-cores 2 \--num-executors 10 \--conf spark.sql.shuffle.partitions=200 \--jars /path/to/mysql-connector.jar \user-analysis.jar \2023-01-01 2023-01-31
    

注意:参数需在应用JAR包和应用参数之前指定,不同集群管理器支持的参数略有差异(如num-executors仅YARN有效)。

二、100道Spark面试题目录列表

文章序号Spark 100道
1Spark面试题及答案100道(01-10)
2Spark面试题及答案100道(11-20)
3Spark面试题及答案100道(21-30)
4Spark面试题及答案100道(31-44)
5Spark面试题及答案100道(41-55)
6Spark面试题及答案100道(56-70)
7Spark面试题及答案100道(71-80)
8Spark面试题及答案100道(81-90)
9Spark面试题及答案100道(91-100)

文章转载自:

http://iJ2oGy3X.rmchq.cn
http://jziNq0u3.rmchq.cn
http://GyOvnh8l.rmchq.cn
http://Z6aDuKes.rmchq.cn
http://4kAfpUdB.rmchq.cn
http://dWZa9Rj5.rmchq.cn
http://hjIQHGxF.rmchq.cn
http://6VgnokQn.rmchq.cn
http://Uakciw7X.rmchq.cn
http://ypqva8s7.rmchq.cn
http://dRe6vPJK.rmchq.cn
http://gMUSIJdV.rmchq.cn
http://MUIxQmMj.rmchq.cn
http://88gtTzeT.rmchq.cn
http://sLGRguA4.rmchq.cn
http://SfEjYskX.rmchq.cn
http://35isRDHO.rmchq.cn
http://r4zkCDDA.rmchq.cn
http://SXszotBP.rmchq.cn
http://PYZdO2W0.rmchq.cn
http://FxPoJs68.rmchq.cn
http://YecWdCra.rmchq.cn
http://WfrLwqyg.rmchq.cn
http://fiKH5HmC.rmchq.cn
http://7Mz6j0wr.rmchq.cn
http://eVlCSgEP.rmchq.cn
http://FIqcUbCp.rmchq.cn
http://EwvZNTIb.rmchq.cn
http://KS5UWRfD.rmchq.cn
http://EC3PwWZv.rmchq.cn
http://www.dtcms.com/a/374805.html

相关文章:

  • UDP特点及报文结构
  • ollama离线部署加载Qwen3-0.6b模型
  • 零基础12周精通Linux学习计划
  • Linux Shell 条件测试与 if 语句全解析
  • C语言内存精讲系列(九):深化详述 int 3(附录:int3 调试关键工具与实战案例)
  • 案例开发 - 日程管理 - 第六期
  • TCP 三次握手、四次挥手
  • 问题排查:之前运行正常的系统,突然批量接口报 404
  • 【Java实战㊱】Spring Boot邂逅Redis:缓存加速的奇妙之旅
  • Spring Cache 多租户缓存隔离解决方案实践
  • Mybatis-12 第三方缓存-EhCache
  • 【C++】特别的程序错误处理方式——异常机制
  • 嵌入式设备上mqtt库的使用
  • 【Linux基础知识系列:第一百二十六篇】使用dd命令进行磁盘复制
  • 从零到一使用Linux+Nginx+MySQL+PHP搭建的Web网站服务器架构环境——LNMP(上)
  • 使用虚拟机Ubuntu搭建mosquito服务器 使esp32、上位机通信
  • 云计算技术栈
  • 国产时序数据库选型指南-从大数据视角看透的价值
  • 东京本社招聘 | 财务负责人 多个日本IT岗位(Java/C++/Python/AWS 等),IT营业同步招募
  • AWS ALB 详解:智能流量调度器
  • Django REST框架:ModelViewSet全面解析
  • 基于Centos7.9搭建svn服务端
  • PyTorch 和nn.Conv2d详解
  • pytorch基本运算-分离计算
  • 基于容器化云原生的 MySQL 及中间件高可用自动化集群项目
  • “图观”端渲染场景编辑器
  • 构建分布式京东商品数据采集系统:基于 API 的微服务实现方案
  • HTML5点击转圈圈 | 深入了解HTML5技术中的动态效果与用户交互设计
  • springboot rabbitmq 延时队列消息确认收货订单已完成
  • CString(MFC/ATL 框架)和 QString(Qt 框架)