一、Linux
1. 统计指定端口连接数(排查连接数过高、连接泄露)
bash
netstat -an | grep 9092 | wc -l
netstat -an:查看本机所有网络连接,不解析主机名、端口名,执行更快
grep 9092:筛选 Kafka 默认端口连接,也可替换为 Spark、Redis 等端口
wc -l:统计连接总数
实战场景:中间件连接数爆满、服务卡顿、连接池溢出排查
2. HDFS 查看文件详细权限、所有者、组信息
bash
hdfs dfs -ls -h /user/hive/dws/ | awk '{print $1,$2,$3,$4,$8}'
展示 HDFS 文件权限、副本数、所属用户、用户组、文件路径
大数据多用户集群权限排查、跨账号读写权限异常专用
数仓表目录权限规范巡检常用
3. 后台执行 Shell 脚本并忽略挂断信号
bash
setsid ./etl_daily.sh > ./task_log/etl.log 2>&1
setsid:新建会话运行脚本,脱离当前终端,终端关闭进程也不会终止
区别于 nohup,更适合长时间运行的批量 ETL 脚本
日志统一输出到指定文件,方便后续排错
二、SQL
表结构说明
dwd_loan_apply 信贷申请表:apply_id,user_id,apply_money,apply_time,audit_status,dt
dwd_travel_record 出行轨迹表:user_id,start_addr,end_addr,travel_time,travel_type,dt
dwd_supplier_shop 供应商门店表:shop_id,supplier_id,trade_volume,register_time,dt
1. 分时段统计信贷申请量、审批通过量、通过率
sql
SELECT
hour(apply_time) apply_hour,
COUNT(apply_id) total_apply,
SUM(IF(audit_status=1,1,0)) pass_apply,
ROUND(SUM(IF(audit_status=1,1,0))/COUNT(apply_id),4) pass_rate
FROM dwd_loan_apply
WHERE dt = '2026-05-26'
GROUP BY hour(apply_hour)
ORDER BY apply_hour;
按小时拆分申请时段,做分时监控
audit_status=1 代表审批通过,条件聚合统计通过量
通过率是金融信贷风控核心指标,用于人力排班、风险时段监控
分区过滤缩小扫描范围,提升查询性能
2. 统计各出行方式的用户数、出行总次数
sql
SELECT
travel_type,
COUNT(DISTINCT user_id) user_cnt,
COUNT(*) travel_times
FROM dwd_travel_record
WHERE travel_time BETWEEN '2026-05-01' AND '2026-05-26'
GROUP BY travel_type;
travel_type 区分自驾、公交、地铁、网约车等出行类型
双指标统计:去重用户数体现受众规模,总次数体现使用频次
交通、出行类大数据业务常规分析口径
3. 统计每个供应商旗下门店营收排名 Top3
sql
SELECT *
FROM (
SELECT
supplier_id,
shop_id,
trade_volume,
DENSE_RANK() OVER(PARTITION BY supplier_id ORDER BY trade_volume DESC) rk
FROM dwd_supplier_shop
) t
WHERE rk <= 3;
使用 DENSE_RANK() 排名,并列名次不跳号,和ROW_NUMBER/RANK形成区分考点
按供应商分组,筛选旗下营收前三的门店
供应链、电商供货体系分析常用 SQL
三、Pyspark
今日重点:PySpark 多数据源读写实战(Hive + 本地文件混合操作)
- 业务场景
企业项目中经常需要读取 Hive 数仓表做计算,最终结果落地为本地文件 / 外部文件,或是反向导入,属于混合数据源常规操作。 - 完整可运行代码 + 逐行注释
python
from pyspark.sql import SparkSession
# 初始化会话,开启Hive支持(关键配置)
spark = SparkSession.builder \
.appName("MultiSourceReadWrite") \
.enableHiveSupport() # 对接Hive元数据,读写Hive表必备
.getOrCreate()
# 1. 读取Hive内部表数据
hive_df = spark.read.table("dwd.trade_order")
# 简单数据过滤加工
filter_df = hive_df.filter(col("dt") == "2026-05-26")
# 2. 将计算结果写入本地CSV文件(落地离线报表)
filter_df.coalesce(1) \
.write \
.mode("overwrite") \
.option("header","true") \ # 输出表头
.csv("/data/report/trade_daily_report")
# 3. 反向读取本地CSV文件,写入Hive分区表
local_df = spark.read \
.option("header","true") \
.csv("/data/report/trade_daily_report")
local_df.write \
.mode("append") \
.partitionBy("dt") \
.saveAsTable("dws.trade_report_hive")
spark.stop()
- 核心知识点详解
- enableHiveSupport()
开启后 Spark 可直接关联 Hive 元数据库,支持read.table、分区表、Hive 函数,数仓项目必加配置。 - 读写 CSV 参数
- header=true:识别 / 生成表头,报表类文件必备
- coalesce(1):合并为单个文件,方便业务人员下载查看报表
- 写入模式
overwrite:覆盖已有数据;append:追加数据,分区表增量更新首选 - 分区写入 partitionBy:自动按字段生成 Hive 分区目录,贴合数仓分层规范
- enableHiveSupport()
- 生产避坑 & 优化
- 大数据量禁止coalesce(1),会造成单 Task 压力过大、OOM,仅小体量报表使用
- 跨数据源读写注意字段类型对齐,避免字符串与数值类型隐式转换报错
- 读写外部文件配置文件编码:.option("encoding","utf-8")
- 面试考点
Spark 对接 Hive 的核心配置、不同文件格式(CSV/Parquet)适用场景、三种写入模式区别
四、算法
最长回文子串
python
def longestPalindrome(s: str) -> str:
def expand(left, right):
# 中心扩散查找回文串
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left+1:right]
res = ""
for i in range(len(s)):
# 奇数长度回文、偶数长度回文分别判断
s1 = expand(i, i)
s2 = expand(i, i+1)
# 保留最长结果
res = max(res, s1, s2, key=len)
return res
思路讲解
采用中心扩散法,遍历每个字符作为回文中心
分两种情况:奇数长度(单中心)、偶数长度(双中心)
向左右两侧扩散,直到字符不相等或触达边界
每次对比保留最长的回文子串
大数据实战用途日志字符串、设备编号、用户 ID 等特殊格式字段校验
文本类数据清洗、异常字符匹配场景参考该思想