一、Linux
1. 实时查看磁盘读写速度(排查集群 IO 瓶颈)
bash
iostat -d -x 1 3
iostat:查看磁盘 IO 性能工具
-d:只看磁盘统计
-x:展示扩展统计信息
1 3:每 1 秒刷新一次,共输出 3 次
用途:Spark/Flink 任务跑慢、HDFS 卡顿,优先排查磁盘 IO
2. 按内存排序,显示所有 Java 进程(定位 Spark/YARN)
bash
ps -ef | grep java | grep -v grep | sort -k 4 -r | head -10
筛选所有 Java 进程(Spark、YARN、Hive 都是 Java 进程)
按第 4 列(内存)降序排序
展示占用内存最高的前 10 个
生产必用:快速定位耗内存的大数据任务
3. HDFS 安全模式查看与强制退出
bash
hdfs dfsadmin -safemode get
hdfs dfsadmin -safemode leave
安全模式开启时无法写入数据,只能读
集群重启、块修复时会自动进入安全模式
任务写 HDFS 失败时,先检查安全模式
二、SQL
表结构
dwd_user_visit:用户访问表 user_id, session_id, visit_time, channel, dt
dwd_trade_order:交易订单表 order_id, user_id, order_amt, pay_status, dt
dwd_device_error:设备错误日志 device_id, error_type, error_time, city, dt
1. 统计每个用户的访问会话次数 & 最后访问渠道
sql
SELECT
user_id,
COUNT(DISTINCT session_id) AS visit_sessions, -- 访问会话数
MAX(channel) AS last_channel -- 最后访问渠道
FROM dwd_user_visit
WHERE dt >= '2026-05-20'
GROUP BY user_id;
session_id:一次打开 APP 算一个会话
用于用户活跃度、渠道偏好分析
2. 统计支付成功 / 失败订单数、金额、成功率
sql
SELECT
dt,
COUNT(*) AS total_order,
SUM(IF(pay_status=1, 1, 0)) AS success_order,
SUM(IF(pay_status=1, order_amt, 0)) AS success_amt,
ROUND(SUM(IF(pay_status=1, 1, 0))/COUNT(*), 3) AS pay_rate
FROM dwd_trade_order
GROUP BY dt;
pay_status=1 代表支付成功
支付率 = 成功订单数 / 总订单数
交易核心监控指标,金融 / 电商必备
3. 统计各城市各类型设备错误次数 Top5
sql
SELECT *
FROM (
SELECT
city,
error_type,
COUNT(*) AS error_cnt,
ROW_NUMBER() OVER(PARTITION BY city ORDER BY COUNT(*) DESC) rn
FROM dwd_device_error
GROUP BY city, error_type
) t
WHERE rn <= 5;
按城市分组,统计各类错误数量
取每个城市错误最多的前 5 类
物联网 / 设备运维必备排查 SQL
三、Pyspark
今日重点:PySpark cache & persist 缓存优化(生产提速神器)
- 为什么要用缓存?
一份数据多次使用(多次计算、多次输出)
不缓存会重复读取 HDFS,速度极慢
缓存到内存 / 磁盘,大幅提升运行速度 - 企业标准实战代码
python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("CacheDemo").getOrCreate()
# 1. 读取大表
df = spark.read.table("dwd.user_behavior")
# 2. 缓存到内存(最常用)
df.cache()
# 3. 也可以手动指定存储级别(更灵活)
# df.persist(pyspark.StorageLevel.MEMORY_AND_DISK)
# 4. 第一次计算(触发缓存)
df.count()
# 5. 后续复用,直接读内存,极快
df.groupBy("user_id").count().show()
df.groupBy("channel").count().show()
# 6. 用完释放缓存
df.unpersist()
spark.stop()
- 超详细讲解
cache():默认缓存到内存,快速方便
persist():可指定缓存到内存 + 磁盘,防止内存不足
多次使用的表必须缓存,这是 Spark 任务提速核心手段
用完必须释放,避免占用集群资源 - 生产最佳实践
大表、频繁复用表 → 缓存
一次性使用表 → 不缓存
流处理任务必须配合缓存使用
四、算法
有效的字母异位词
python
def isAnagram(s: str, t: str) -> bool:
if len(s) != len(t):
return False
return sorted(s) == sorted(t)
详细思路
字母异位词:字母相同、排列不同
先判断长度是否一致
排序后对比是否完全一样
时间复杂度 O (n log n)
大数据用途数据清洗、字段脱敏、日志格式校验高频使用