一、先说人话
HDFS、YARN、Spark、Hudi、Kyuubi、Ranger、Datasophon 这七个名字,不是七个能分开买的产品,是同一栋楼里的七个工种。它们有上下顺序,顺序错了,活就干不成。
找谁办什么事,按问题对号入座就行:文件落在哪问 HDFS;谁先干、给多少资源问 YARN;怎么算问 Spark;表叫什么、字段叫什么问 Metastore;能不能改一行问 Hudi;从哪连进来问 Kyuubi;谁能看问 Ranger。
这一关不讲怎么加工数据,只把家什摆清楚。摆清楚了,后面几关你说"跑个 Spark"的时候,心里知道它在跟谁要资源、结果又落到谁身上。
二、拆开看:七件主家什 + 两件查病的
下面每张卡都是四拍:像什么、其实是什么、真名、坏了会怎样。真名那一行是可以直接抄进配置的东西,别只看个热闹。
先看这张分层图:从下往上是地基 → 调度和机器 → 账本 → 总闸,右边那根虚线竖条是门禁。你写的任何一条 SQL,都得从最上面那道闸进来,再一层层往下走到硬盘。
像什么:盖楼先浇的水泥地基。楼上面怎么装修都行,地基一塌,整栋楼一起塌。
其实是什么:存海量文件的分布式文件系统,所有表的文件本体就物理落在这上面。你在总闸里看到的"库、表",只是这些文件的另一个门牌号。
- 真名
HDFS- 门牌
- 湖里按层分库:
dwi_gk_hudi/dwr_gk_hudi/dm_gk_hudi;仓里是dm_gk_dws
坏了会怎样:地基塌,全厂停摆。生产 dm_gk_hudi 2,763 张表、落地库 dm_gk_hudi_sit 3,027 张表,一张都读不出来,页面全空。
像什么:工地上的水电调度室。谁先用、用几度电、用几吨水,都由它排;排不上的就在门口站着等。
其实是什么:集群的资源管家。每个 Spark 任务要多少 vcore、多少内存,得它点头;它不点头,任务就一直在队列里排队。
- 真名
YARN- 在哪
http://yarn.sinopharmholding.com:10001/cluster
坏了会怎样:机器全在转,就是没人分到活。真实情况:单项目 756 个任务分在 10 台 worker 上,其中 10.160.10.26 一台承接 218 个、排队 3.8 分钟,其余 9 台基本空闲——活不是不够,是分得不均。
像什么:一台加工机器,加一本挂在墙上的户口本。机器负责把料加工成件;户口本记着楼里有哪几户、每户叫什么名。
其实是什么:Spark 3.x 是真正干活的引擎,ETL 全部是 Spark SQL;Hive Metastore 只管元数据——有哪张表、字段叫什么、分区是什么,一个字节的数据都不存。
- 真名
Spark 3.x+Hive Metastore- 表属性
- Hive 表是
type='parquet';要能改一行就换 Hudi
坏了会怎样:机器还在响,你一查就"查无此表"。数据文件明明躺在 HDFS 上,可户口本没了,没人知道它叫什么、有哪些字段。
像什么:一本活页账本。普通账本写错了只能划掉重抄一本;活页账本能抽掉一页换新的,还能翻回上周那页,看当时到底写了什么。
其实是什么:湖里的主表格式(COW)。比普通 Hive 表多三件事:能 upsert(改一行)、能增量读(只看新改的)、能回看历史版本(时间旅行)。
- 真名
Hudi(表格式,不是数据库)- 建表 1
type='cow'- 建表 2
primaryKey='system_code,biz_id'(必须存在,可多字段)- 建表 3
preCombineField='hoodie_event_time'(只能 Date/Timestamp)
增量读的真写法,一行 SQL:
call copy_to_temp_view(table=>'库.表', view_name=>'v', query_type=>'incremental', begin_instance_time=>…, end_instance_time=>…)
坏了会怎样:建表漏了 primaryKey,账本就从一本变成一摞散页——改一行改不动,只能整表重刷一遍,跑几小时换一行数。
像什么:整栋楼的总水闸,外加一排统一插座。不管你在几楼、哪个屋,水都从这一个闸进来,插头都只有这一种。
其实是什么:SQL 网关。湖内所有层的写和查都从它进,不直连 Spark。换了机器、换了人,地址都是这一个。
- 真名
jdbc:kyuubi://…:10009- 办公室
10.160.4.50和10.160.4.236,办公网里直连,不用挂 VPN- VPN
10.160.4.100:10009,在家或外网走这条,注意防火墙和 TLS- DEV 必带
kyuubi.engine.share.level.subdomain=<子域>
坏了会怎样:闸一乱,全厂的 SQL 都进不来;或者一群人挤进同一个引擎,互相把对方的会话踩掉。最要命的一条——DEV 账号必须带 subdomain tag(这是平台准入要求,不带会不会被 KILL 我们没证到)——放在第四节,连"怎么糊过去"一起讲清楚。
像什么:楼门口的刷卡门禁,加每人兜里一张工牌。楼里每间屋你都看得见,但不是每间都推得开。
其实是什么:Kerberos 认"你是谁",Ranger 定"你能进哪间、能看哪几列"。两层配合,管到表、管到字段。
- 真名
Kerberos+Ranger- 管什么
- HDFS / Hive / Spark 的细粒度授权
坏了会怎样:两种极端都会出事:门禁松了,经营数据谁都能捞;门禁紧了、工牌过期,整条链路清一色 403,任务从第一步就挂。
像什么:常驻工地的装修队。水电、门禁、通风这些活,他们照图纸一次装齐;哪根线松了,也是他们上门。
其实是什么:大数据组件的一键部署与运维平台。HDFS、YARN、Spark、Hudi、Kyuubi 这一整套,靠它装起来、升上去。
- 真名
Datasophon
坏了会怎样:装不了新组件,也升不了版本,只能一台台手改配置。十台机器改漏一台,就是一个谁都说不清的怪故障。
像什么:医生的听诊器。楼里哪根管子有异响,贴上听一听,就知道响在哪一层。
其实是什么:集群与任务的诊断工具。任务卡住、节点异常,先上这儿看,不用一头扎进日志里。
- 真名
Compass
坏了会怎样:任务卡住只能靠猜,一层层翻日志,几个小时就耗进去了。
像什么:楼道里那排水电表和仪表盘。不用拆墙,看表就知道这栋楼还正不正常。
其实是什么:Prometheus 收指标,Grafana 把指标画成面板。Doris 生产集群健不健康,看一张面板就够。
- 真名
Prometheus+Grafana- 面板
http://10.160.4.111:8182/d/1fFiWJ4mz/doris-prod-cluster
坏了会怎样:供数层悄悄变慢,页面转半天圈,等你发现的时候,已经是业务在群里问了。
像什么:另外四件家什——进料口、出料口、值班表、货架。
其实是什么:DataX 管入湖,SeaTunnel 管出湖入仓,DolphinScheduler 管编排,Doris 管对外供数。这四件后面各自单独开一关,这里先记住站位:谁在进水那一头,谁在出水那一头。
- 真名
DataX/SeaTunnel/DolphinScheduler/Doris
搞错会怎样:这四件现在不用深究,但记住一点——接错头就是"入湖的管子接去供数",数据在中间那一层原地打转,谁都拿不到结果。
一张表收着:家什、比喻、职责、症状
| 家什名 | 比喻 | 职责 | 出问题的症状 |
|---|---|---|---|
| HDFS | 水泥地基 | 存文件 | 全厂读不出 |
| YARN | 水电调度 | 分资源排队 | 218 个挤一台,排 3.8 分钟 |
| Spark、Hive | 机器+户口 | 干活、记表名 | 查无此表 |
| Hudi | 活页账本 | 改行、增量读 | 改不动,整表重刷 |
| Kyuubi | 总水闸 | SQL 唯一入口 | 不带 tag(必须带) |
| Ranger、Kerberos | 门禁+工牌 | 细粒度授权 | 该看的 403 |
| Datasophon | 装修队 | 一键装运维 | 装不上升不动 |
| Compass | 听诊器 | 诊断任务 | 卡住只能猜 |
| Prometheus、Grafana | 仪表盘 | 指标与面板 | 慢了才发现 |
| DataX、SeaTunnel、海豚、Doris | 另开一关 | 入湖出湖编排供数 | 先记站位 |
三、串起来:一次完整的流程
光认家什没用,得知道一次请求怎么穿过这栋楼。下面从你按下回车那一下开始,走到文件落到硬盘为止。
- 连总闸。客户端连
jdbc:kyuubi://…:10009。办公网走10.160.4.50或10.160.4.236,在家走 VPN 的10.160.4.100:10009。DEV 账号在连接串里带上kyuubi.engine.share.level.subdomain=<子域>,这条是硬要求。 - 要资源。SQL 进来后要起 Spark 应用,YARN 按队列入账,分给它 vcore 和内存。分不到就排队,排多久可以去
http://yarn.sinopharmholding.com:10001/cluster看。 - 干活。Spark 3.x 跑 Spark SQL,读上面的 Hudi / Hive 表,按 SDI → DWI → DWR 的层一层层往上加工。
- 对户口。写之前先确认 Metastore 里这张表的户口在:叫什么、什么字段、什么分区。要能改一行,就得是 Hudi 表,按
type='cow'、primaryKey、preCombineField建好。 - 落盘。结果文件写进 HDFS,库按层放:
dwi_gk_hudi、dwr_gk_hudi、dm_gk_hudi。 - 过门禁。每一步读写都要过 Kerberos 工牌和 Ranger 授权。没权限当场拦,不会给你"先跑了再说"。
- 查问题分两头。任务卡住看 YARN 那个入口;供数慢、页面卡,看
http://10.160.4.111:8182/d/1fFiWJ4mz/doris-prod-cluster。
四、搞错了会怎样
这一层踩的坑,多数不是"写错 SQL",是"家什用错了位置":该走总闸的绕过去、该带 tag 的没带、该能改的建成不能改的。
三个最常见的,按后果轻重排:不带 subdomain tag(直接被杀)、Hudi 建表漏硬约束(改不动一行)、HDFS 上公开放权限(数据裸奔)。
kyuubi.engine.share.level.subdomain=<子域>,这是平台明写的准入要求。但“不带就会被 KILL”这个因果,我们没有证据——2026-10-24 两次 Read timed out / Lock wait timeout 也可能只是 Hive Metastore 行锁。所以别把它当已证实结论去汇报,规矩照做就对了。两种偏方也别用:SQL 里写注释冒充 tag、连上之后 SET 一把,平台都不认。primaryKey 必须存在(可多字段)、preCombineField 只能是 Date/Timestamp、建表 SQL 不能带 Location(必须是管理表),字段名不能以 _ 开头。另外 23:00 之后停 Hudi 的写与查,别跨日续跑。10.160.4.50 / 10.160.4.236 是办公室,10.160.4.100 是 VPN,走错线连不上很正常;二看连接串里有没有 kyuubi.engine.share.level.subdomain=,没有就先补上再连,别等被杀;三跑一句 show databases,能看见 dwi_gk_hudi / dwr_gk_hudi / dm_gk_hudi,说明闸对了、权限也通了。五、一句话记住
哪天拿不准某件家什管什么,回到第一节那张对照表,只问一句:它站在第几层?站在地上的管存,站在中间的管算,站在楼顶的管进。
下一关就从这个总闸开始,把河水引进厂:清单驱动、六道关卡,DataX / CDM / CDL 三条进水管各接一头。