Spark 3.1.3 集群搭建 + Spark-SQL 整合 Hive 记录

承接上一篇 ClickHouse 部署笔记,本文记录 Linux 环境 Spark 3.1.3 集群部署,包含 Standalone、On Yarn 两种调度模式,以及 Spark-SQL 对接 Hive 元数据的实操配置。

一、Standalone 模式

Standalone 是 Spark 自带资源调度框架,适合学习理解 Master/Worker 架构。 解压安装包,复制模板配置文件,在 spark-env.sh 配置 Master 地址、核数、内存、JDK 和 Hadoop 类路径;workers 配置从节点,分发文件到各节点后执行 start-all.sh 启动集群,WebUI 访问地址 http://master:8080/。

避坑:Spark 与 Hadoop 存在同名启动脚本,优先使用 ./ 执行,防止调用混淆。

提供 spark-submit 两种提交方式:client(日志本地输出,测试用)、cluster(日志存集群,生产上线),同时支持 spark-shell 直连集群。

复制代码
# client
spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 \
  --executor-memory 512m --total-executor-cores 1 --deploy-mode client \
  spark-examples_2.12-3.1.3.jar 100

# cluster
spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 \
  --executor-memory 512M --total-executor-cores 1 --deploy-mode cluster \
  spark-examples_2.12-3.1.3.jar 100

二、On Yarn 模式

生产主流方案,复用已有 Yarn 资源调度。先停止 Standalone,在 spark-env.sh 指定 Hadoop 配置目录;修改 yarn-site.xml 关闭虚拟内存、物理内存检查,避免容器被无故杀死,分发配置并重启 Yarn。 同样支持 client / cluster 两种提交模式,cluster 模式需要通过 yarn logs -applicationId 查看任务日志。

配置 Spark History Server

开启事件日志持久化,修改 spark-defaults.conf,配置日志存储路径、保留任务数量,在 HDFS 创建对应目录,启动历史服务,用于任务结束后回看执行 UI。

复制代码
spark.eventLog.enabled  true
spark.eventLog.dir      hdfs://master:9000/user/spark/applicationHistory
spark.yarn.historyServer.address        master:18080
spark.eventLog.compress true
spark.history.fs.logDirectory   hdfs://master:9000/user/spark/applicationHistory
spark.history.retainedApplications      15

三、Spark-SQL 几种使用方式

  1. 代码打包 spark-submit 提交:生产常用

  2. spark-shell:交互式 REPL,适合调试

  3. spark-sql:专用 SQL 命令行 注意:spark-shell、spark-sql 交互式工具仅支持 local / yarn-client,不支持 yarn-cluster。

    spark-sql --master yarn --deploy-mode client

四、Spark-SQL 整合 Hive

目标:Spark-SQL 直接读取 Hive 元数据表,核心四步:

  1. Hive 开启 metastore 服务,hive-site.xml 配置 hive.metastore.uris;
  2. 将 hive-site.xml 拷贝至 Spark 的 conf 目录;
  3. 启动 metastore(前台调试 / nohup 后台常驻);
  4. 把 MySQL 驱动包放到 Spark jars,Spark 才能连接 Hive 的元数据库 MySQL。

启动 spark-sql,spark.sql.shuffle.partitions 默认200,小数据集测试建议调低,减少调度开销。

复制代码
spark-sql --master yarn --deploy-mode client --conf spark.sql.shuffle.partitions=2

示例建外部表:

复制代码
create table student(
id  string,
name string,
age int,
gender string,
clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/data/spark/stu/input/';

create external table score(
student_id  string,
cource_id string,
sco int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS textfile
location '/data/spark/score/input/';

两条开窗 TopN 业务 SQL:

复制代码
-- 各班总分前三名
select  tt1.id
        ,tt1.name
        ,tt1.clazz
        ,tt1.sum_score
        ,tt1.rn
from (
    select  t1.id
            ,t1.name
            ,t1.clazz
            ,t2.sum_score
            ,row_number() over(partition by t1.clazz order by t2.sum_score desc) as rn
    from student t1
    join (
        select  student_id as id
                ,sum(sco) as sum_score
        from score
        group by student_id
    ) t2 on t1.id = t2.id
) tt1 where tt1.rn <= 3;

-- 各科成绩前十
select  t1.student_id
        ,t1.cource_id
        ,t1.sco
        ,t1.rn
from (
        select  student_id
                ,cource_id
                ,sco
                ,row_number() over(partition by cource_id order by sco desc) as rn
        from score
) t1 where rn<=10;

五、Broadcast Join 手动Hint优化

Spark 自动广播小表阈值默认 10M,可调整参数;统计信息不准时,手动加 /*+broadcast(a)*/ 提示广播小表,消除 Shuffle,提升 Join 性能。

复制代码
set spark.sql.autoBroadcastJoinThreshold=10m;
select /*+broadcast(a)*/ * from
students as a
join
scores as b
on a.id=b.id;

小结

Standalone 多用于学习架构,生产优先 On Yarn。Spark-SQL 对接 Hive 元数据后可复用已有 Hive 表。高频坑点:交互式 SQL 不支持 yarn-cluster、shuffle 分区默认值偏大、Yarn 内存检查容易杀掉容器。Spark SQL 相比原生 MapReduce 语法友好、执行效率更高。

相关推荐
FserSuN1 小时前
Hive 分区表存储与查询优化学习总结
hive·hadoop·学习
念何架构之路2 小时前
Go 标准库 database/sql 详解
数据库·sql·golang
Decay__14 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
梦影_17 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
乌恩大侠19 小时前
「AI-RAN」Aerial,使用ORAN C1模式
人工智能·5g·spark·o-ru·ai-ran
呆萌很1 天前
达梦(DM8)数据库常用SQL
数据库·sql
跟太阳说早安1 天前
极简数据库SQL
数据库·sql
凤凰院凶涛QAQ1 天前
《MySQL内核拆解:从SQL到InnoDB》(三) : 数据库设计 & 聚合查询 & 分组查询
数据库·sql·mysql
测试盐1 天前
spark作业日志定位过程
java·hadoop·spark