大数据开发学习Day36

一、Linux

1. 查看服务器内存占用最高进程

bash 复制代码
free -h && top -o %MEM -n 1 | head -15

free -h:人性化单位显示内存,查看整机内存剩余,判断是否内存溢出

&&:前一条命令执行完再执行下一条

top:Linux 系统进程监控工具

-o %MEM:固定按照内存使用率降序排列

-n 1:只输出 1 次数据,不实时滚动刷屏,适合脚本采集、快速排查

head -15:只展示前 15 个高内存进程
生产实战场景

Spark 任务、YARN 任务卡顿、报错 OOM 内存溢出,第一时间执行此命令,杀掉占用内存过高无用进程,释放集群资源

2. HDFS 本地文件上传至集群指定路径

bash 复制代码
hdfs dfs -put /data/test.csv /user/hive/ods/

hdfs dfs:操作 HDFS 文件系统固定前缀

-put:上传文件指令

前面路径:Linux 服务器本地文件路径

后面路径:HDFS 集群存储路径

追加 -f:hdfs dfs -put -f 强制覆盖已存在同名文件
业务用途

日常把业务日志、离线 CSV 数据上传 HDFS,接入数仓 ODS 层,是大数据入仓最基础命令

3. 定时任务查看与删除定时脚本

bash 复制代码
crontab -l
crontab -e

crontab -l:列出当前 Linux 登录账号所有定时任务

crontab -e:进入编辑定时任务界面,编写离线调度脚本
大数据常用定时

每天凌晨 2 点执行 Hive 数仓清洗脚本、凌晨 5 点合并 Hive 小文件、早 8 点生成日报表,全都依靠 crontab

实战用途:集群资源监控、数仓数据上传、离线任务定时配置,日常 ETL 必备

二、SQL

通用表结构

1.dwd_user_active 用户日活跃表:user_id(用户ID),dt(日期)

2.dwd_order_info 订单明细表:order_id,create_time下单时间,refund_status退款状态 1退款 0正常

3.dwd_user_visit 用户访问表:channel渠道,user_id,device_id设备号,dt日期

1. 统计用户连续 7 天活跃用户

sql 复制代码
SELECT user_id
FROM(
    SELECT user_id,dt,
    date_add(dt,-row_number() over(partition by user_id order by dt)) gid
    FROM dwd_user_active
)t
GROUP BY user_id,gid
HAVING COUNT(*)>=7;

partition by user_id order by dt

按用户分组,日期从小到大排序,给每个用户活跃日期生成自增序号

date_add(dt, -序号)

日期减去排序序号,连续日期计算结果相同,断签日期结果不同

别名gid作为连续分组标识

外层按照user_id+gid分组统计天数

having count(*)>=7 筛选出连续活跃满 7 天用户
业务场景

电商连续签到用户、平台高留存用户、活动奖励用户筛选

2. 统计各月份订单量、退款订单量、退款率

sql 复制代码
SELECT
date_format(create_time,'yyyy-MM') month,
COUNT(order_id) all_order,
SUM(if(refund_status=1,1,0)) refund_order,
ROUND(SUM(if(refund_status=1,1,0))/COUNT(*),3) refund_rate
FROM dwd_order_info
GROUP BY date_format(create_time,'yyyy-MM');

date_format(时间,'yyyy-MM') 把日期统一聚合为年月,做月度报表

COUNT(order_id) 统计当月全部订单数量

IF(refund_status=1,1,0) 退款订单标记为 1,其余 0,SUM 求和得到退款单数

退款单数 ÷ 总订单数 = 退款率

ROUND(字段,3) 保留 3 位小数,报表格式统一
业务用途

运营月度复盘、售后数据分析、平台交易健康度报表

3. 多维度 UV 去重统计

sql 复制代码
SELECT
channel,
COUNT(DISTINCT user_id) uv,
COUNT(DISTINCT device_id) device_uv
FROM dwd_user_visit
WHERE dt>='2026-05-01'
GROUP BY channel;

channel 代表流量渠道:APP、小程序、短视频、网页

COUNT(DISTINCT user_id) 真实注册用户去重人数,行业标准 UV

COUNT(DISTINCT device_id) 手机设备去重数量,防止同一用户多账号刷流量

WHERE 时间过滤,走分区裁剪,极大提升查询速度

按照渠道分组,统计各渠道流量质量
业务用途

投放广告数据分析、渠道引流效果评估

三、Pyspark

今日重点:PySpark 数据倾斜彻底解决方案 ② 热点 Key 过滤 + 拆分处理

  • 适用场景

    业务中存在固定已知热点数据:0 值、空值、null、超级大客户、默认填充值

    任务执行时只有个别 task 运行极慢,其余 task 秒跑完,典型数据倾斜

    不想使用加盐打散,追求代码简单、逻辑不变

  • 核心原理

    把一份完整数据强制拆分成两份

    倾斜热点数据 → 单独拉出来单独计算

    正常平稳数据 → 走原有正常业务逻辑

    最后两份结果合并,彻底规避热点扎堆拥堵

  • 实战处理思路

    第一步:过滤出倾斜热点数据单独计算

    第二步:正常数据正常聚合 / 关联

    第三步:两部分结果合并 union

  • 核心企业代码

python 复制代码
from pyspark.sql.functions import col,count

# 1. 手动定义业务内已知倾斜热点key黑名单
hot_keys = ["0","","null","999999"]

# 2. 数据拆分
hot_df = df.filter(col("user_id").isin(hot_keys))     # 筛选倾斜数据
normal_df = df.filter(~col("user_id").isin(hot_keys)) # 筛选普通正常数据

# 3. 两份数据执行一模一样聚合逻辑
hot_result = hot_df.groupBy("user_id").agg(count("*").alias("act_cnt"))
normal_result = normal_df.groupBy("user_id").agg(count("*").alias("act_cnt"))

# 4. 合并最终结果
final_df = hot_result.unionByName(normal_result)
  • 项目经验

    离线大屏、用户行为统计最常用倾斜解法,比加盐更简单高效

  • 调优小技巧

python 复制代码
# 给倾斜数据单独调高执行器内存,防止内存溢出
spark.conf.set("spark.executor.memory","12g")
# 增大shuffle读写缓冲区,加快倾斜数据读写速度
spark.conf.set("spark.shuffle.file.buffer","128k")

总结

热点 key 数量少、可枚举 → 拆分过滤法(首选)

热点 key 杂乱无规律 → 加盐打散法

大表 join 小表倾斜 → 广播 join

四、算法

最长公共前缀

python 复制代码
def longestCommonPrefix(strs):
    if not strs:
        return ""
    pre = strs[0]
    for s in strs[1:]:
        while not s.startswith(pre):
            pre = pre[:-1]
    return pre

思路全解

先判断数组为空,直接返回空字符串,做边界防护

默认把第一个字符串当作初始公共前缀

遍历后面所有字符串依次比对

startswith() 判断当前字符串是否以前缀开头

不匹配就删掉前缀最后一个字符,循环缩减

全部比对完成,剩下字符串就是全局最长公共前缀
大数据实战作用

清洗日志统一前缀字段归类

批量匹配同网段 IP 数据

设备编号、日志路径批量分组归类

数据预处理高频通用思路

相关推荐
绿算技术15 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
MartinYeung516 小时前
[论文学习]隐私保护联邦特徵选择与差分隐私的的工程实践框架
学习
qeen8716 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
朴马丁16 小时前
预制菜的“数字厨房”:PLM如何支撑菜品标准化与供应链高效协同?
大数据·人工智能·食品行业·流程行业plm
Flandern111117 小时前
Pull Requests(PR)
学习·github·pr
nashane17 小时前
HarmonyOS 6学习:JsCrash“闪退”法医指南——从FaultLog堆栈还原崩溃现场的终极手册
学习·华为·harmonyos
for_ever_love__17 小时前
UI学习:UICollectionView瀑布流
学习·ui·ios·objective-c·cocoa
AOwhisky18 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
_李小白18 小时前
【android opencv学习笔记】Day 32:直线检测之霍夫变换
android·opencv·学习
奋斗的老史18 小时前
Spring-Boot 集成 TDengine 完整实战
大数据·时序数据库·tdengine