大数据开发学习Day44

一、Linux

1. 查看系统开机至今所有用户登录记录

bash 复制代码
last

读取系统登录日志,展示所有账号登录时间、IP、终端信息

实战场景:集群安全审计、异常账号登录排查、运维行为追溯

2. HDFS 递归创建多级目录并设置权限

bash 复制代码
hdfs dfs -mkdir -p /user/bigdata/etl/log/202605 && hdfs dfs -chmod 755 /user/bigdata/etl/log/202605

-p:递归创建多级目录,上级目录不存在也可正常创建,避免报错

chmod 755:设置目录权限,所有者读写执行,其他用户可读可执行

大数据分层目录初始化、脚本落地目录标配操作

3. 筛选当前运行中所有 Python 进程并查看详情

bash 复制代码
ps -aux | grep python3 | grep -v grep

ps -aux 展示进程完整信息(用户、CPU、内存、启动命令)

过滤 Python3 进程,排除 grep 自身进程

排查 PySpark 后台任务、数据同步脚本卡死、僵尸进程专用

二、SQL

表结构说明

dwd_express_info 物流快递表:order_id,user_id,express_no,trans_status,trans_city,dt

dwd_user_tag 用户标签表:user_id,age_tag,consume_tag,active_tag,dt

dws_hourly_sales 小时级销售宽表:dt,hour,sale_amt,order_cnt,refund_cnt

1. 统计各城市物流运输状态分布

sql 复制代码
SELECT
    trans_city,
    trans_status,
    COUNT(order_id) AS order_num
FROM dwd_express_info
WHERE dt = '2026-05-25'
GROUP BY trans_city, trans_status
ORDER BY trans_city, order_num DESC;

按城市 + 物流状态双维度分组,统计对应订单量

trans_status 区分运输中、已签收、退回、异常等状态

业务用途:物流网点运营监控、异常包裹地域分析、配送效率评估

2. 不同年龄 & 消费标签组合的用户数量统计

sql 复制代码
SELECT
    age_tag,
    consume_tag,
    COUNT(DISTINCT user_id) AS user_cnt
FROM dwd_user_tag
WHERE dt = '2026-05-25'
GROUP BY age_tag, consume_tag
ORDER BY user_cnt DESC;

多标签交叉维度统计,是用户画像分析核心写法

可精准定位核心客群,支撑精准营销、活动策划

基于分区过滤数据,规避全表扫描,提升查询性能

3. 计算每日各时段订单退款率、峰值时段定位

sql 复制代码
SELECT
    hour,
    order_cnt,
    refund_cnt,
    ROUND(refund_cnt / order_cnt, 4) AS refund_rate
FROM dws_hourly_sales
WHERE dt = '2026-05-25'
ORDER BY hour;

基于预聚合小时宽表做指标计算,减少重复计算,提升查询效率

退款率反映对应时段交易质量,定位高退款风险时段

数仓 DWS 层报表取数标准用法,线上运营监控高频使用

三、Pyspark

今日重点:PySpark 数据分区规则 + 手动控制分区并行度

  • 应用场景
    默认分区不合理,导致任务并行度不足、执行缓慢,或分区过多产生海量小文件;手动调整分区适配集群资源与数据量。
  • 完整代码 + 逐行注释
python 复制代码
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("PartitionOpt").getOrCreate()

# 1. 读取原始数据,查看默认分区数
df = spark.read.parquet("/user/hive/dwd/order_info")
print("默认分区数:", df.rdd.getNumPartitions())

# 2. 场景1:增大分区,提升并行计算能力(会触发Shuffle)
df_more_part = df.repartition(30)
print("重分区后分区数:", df_more_part.rdd.getNumPartitions())

# 3. 场景2:减少分区,合并小文件(无Shuffle,高效)
df_less_part = df.coalesce(8)
print("合并后分区数:", df_less_part.rdd.getNumPartitions())

# 4. 基于指定字段分区(分区表写入常用)
df_part_by_field = df.repartition(10, col("dt"))

# 写入分区表,分区字段为dt
df_part_by_field.write.mode("overwrite")\
    .partitionBy("dt")\
    .saveAsTable("dwd.order_partition")

spark.stop()
  • 核心知识点详解

    • 分区查看
      rdd.getNumPartitions():获取当前 DataFrame 实际分区数,调优第一步必查。
    • repartition(num / repartition(num, col))
      全面重分区,一定会触发 Shuffle,数据全局打散
      适用:需要提升并行度、按业务字段分区写入分区表
    • coalesce(num)
      仅减少分区,不触发 Shuffle,性能远高于 repartition
      禁止用它增大分区,无法提升并行度
    • partitionBy
      写入 Hive 分区表专用,按照指定字段生成目录分区,是数仓分层落地的核心写法
  • 生产调优规范 & 避坑

    单分区数据建议控制在 128MB~256MB,平衡计算效率与小文件问题

    离线任务默认 Shuffle 分区参数调整:

python 复制代码
# 全局设置Shuffle默认分区数
spark.conf.set("spark.sql.shuffle.partitions", "24")

流处理任务分区数建议和 Kafka 分区数保持一致,避免数据倾斜

  • 面试核心考点
    区分 repartition 和 coalesce 的底层原理、性能差异、适用场景

四、算法

滑动窗口最大值

python 复制代码
from collections import deque

def maxSlidingWindow(nums, k):
    q = deque()
    res = []
    for idx, val in enumerate(nums):
        # 维护队列:队首始终为当前窗口最大值,移除队列内小于当前值的元素
        while q and nums[q[-1]] < val:
            q.pop()
        q.append(idx)
        # 移除超出窗口左边界的下标
        while q[0] <= idx - k:
            q.popleft()
        # 窗口形成后,记录结果
        if idx >= k - 1:
            res.append(nums[q[0]])
    return res

思路讲解

借助单调队列实现,队列中只存数组下标,对应数值从大到小排列

遍历数组,新元素不断弹出队列尾部更小元素,保证队列单调性

检查队首下标是否滑出窗口范围,超出则移除

窗口长度达标后,队首元素即为当前窗口最大值
大数据实战用途

实时数据流窗口统计(最大值、极值监控)

时序数据、设备指标、交易数据滑动窗口分析

PySpark Structured Streaming 窗口计算的经典算法思想参考

相关推荐
得物技术1 天前
从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流
大数据·llm·ai编程
久美子1 天前
AI驱动数仓建设的Harness工程实践——本体建模、知识分层与上下文工程
大数据
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
通信小呆呆2 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
大志哥1232 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
H__Rick2 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee2 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
果丁智能2 天前
物联网智能锁赋能集中式住宿:身份核验与远程权限管控的全链路技术实践
大数据·人工智能·物联网·智能家居
YM52e2 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统