记录了一个迷你项目的分析判断流程以及遇到的问题

文章摘要

本迷你数据分析项目因Hive/Hadoop内存不足无法执行MR任务,转而采用AWK命令成功完成分析。关键步骤包括:创建数据文件、解决Hive建表关键字冲突问题、通过AWK实现三类分析(品类转化率/用户行为统计/时段分布)。核心收获包括掌握AWK工具使用、理解Hive局限性(如内存敏感和关键字限制),以及灵活切换技术方案的能力(Hive→AWK)。项目验证了轻量级工具在小数据场景的高效性,建议后续在资源充足时可尝试Hive/Spark处理更大数据集。当前AWK方案已完整输出所有分析指标。

项目摘要

用Linux Shell和AWK处理了一份电商行为模拟数据(约500条记录),做了简单的统计汇总。主要目的是练手数据处理流程,项目本身不大,重在跑通全流程。

1 项目背景

目标:完成一个迷你数据分析项目,掌握Hive+Hadoop的基本操作

实际情况

  • 成功完成数据分析

  • Hive/Hadoop因内存问题无法正常执行MR任务

  • 采用AWK命令替代,成功得出分析结果

技术栈:Hive ,Hadoop , AWK , Linux Shell  

2 完整操作步骤回顾

第1步:创建数据文件

cd /usr/local/hadoop/project_data

pwd记住路径,后面要用到

遇到的问题:找不到文件,先查看文件在哪里,再进入文件目录,用下面的命令查看

# 在当前目录查看所有文件
ls -la /usr/local/hadoop/

第2步:Hive建表

遇到障碍

-- 第一次建表失败
create table behavior (
  user_id int,
  item_id int,
  category string,
  action string,
  time string  -- time是保留关键字
);
-- 报错:ParseException line 6:2 cannot recognize input near 'time'

修改代码,先删掉表再创建表

drop table behavior;

问题解决完后,继续建表,并加载数据

create table behavior (
  user_id int,
  item_id int,
  category string,
  action string,
  action_time string  -- 避开关键字
);

加载数据

#路径为pwd显示的,如 /usr/local/hadoop/hive_data
load data local inpath '/usr/local/hadoop/hive_data' 
overwrite into table behavior;

经验总结

  • timedatetimestamp 是Hive保留关键字,不能用作字段名

  • 建表时加前缀是好习惯:user_idaction_timecreate_date

第3步:Hive查询失败

执行下面的命令之后,出现报错,内存问题

select count(*) from behavior;
-- 报错:FAILED: Execution Error, return code 2

因为机器内存不够,所以MapReduce任务无法启动,执行不了hive查询。本地模式设置了减小内存,但仍然失败,Memory是6GB

#关MR,走本地
set hive.exec.mode.local.auto=true;
set hive.exec.mode.local.auto.inputbytes.max=50000000; --50MB
/*
50,000,000 bytes ÷ 1024 = 48,828 KB
48,828 KB ÷ 1024 = 47.68 MB
≈ 50 MB
*/

应对:不用Hive,改用Linux命令直接分析CSV文件

第4步:AWK命令分析

分析1:各品类转化率
awk -F',' '
NR>1 {
  if($3=="电子" && $4=="浏览") views_e++
  if($3=="电子" && $4=="购买") buys_e++
  if($3=="服装" && $4=="浏览") views_c++
  if($3=="服装" && $4=="购买") buys_c++
  if($3=="食品" && $4=="浏览") views_f++
  if($3=="食品" && $4=="购买") buys_f++
}
END {
  print "品类\t浏览数\t购买数\t转化率%"
  print "电子\t" views_e "\t" buys_e "\t" buys_e*100/views_e
  print "服装\t" views_c "\t" buys_c "\t" buys_c*100/views_c
  print "食品\t" views_f "\t" buys_f "\t" buys_f*100/views_f
}' behavior.csv

执行后输出

含义

  •  服装类转化率100%(虽然样本小),说明用户浏览后都买了

  • 电子类转化率66.67%,表现不错

  • 食品类转化率0%,用户只看不买,可能价格或品类有问题

分析2:用户行为汇总
awk -F',' 'NR>1 {print $1","$4}' behavior.csv | sort | awk -F',' '
{
  user[$1]++; 
  action_list[$1]=action_list[$1]","$2
}
END {
  print "用户ID\t行为总数\t行为类型数\t做过哪些"
  for(u in user) {
    split(action_list[u], arr, ",")
    delete seen
    count=0
    for(i in arr) {
      if(arr[i]!="" && !seen[arr[i]]++) {
        count++
      }
    }
    print u"\t"user[u]"\t"count"\t"action_list[u]
  }
}' | sort -k2 -nr

输出

含义

  •  用户1001是最活跃用户(5次行为,涵盖所有类型)

  • 用户1004也很活跃,行为路径完整(浏览→收藏→加购→购买)

  •  用户1005只是看看,没有深度互动

关键学习

  • AWK中数组的用法:array[key]=value

  • split() 函数分割字符串

  • delete 删除数组用于去重

  • sort -k2 -nr 按第2列数字降序排序

分析3:每小时行为分布
awk -F',' 'NR>1 {
  hour=substr($5,12,2)
  print hour","$4
}' behavior.csv | sort | uniq -c | awk '
{
  print $2"\t"$3"\t"$1
}' | sort

输出

上午10点是用户最活跃的时候,逛的人多、买的人也多。到了11点,人流量直接腰斩,啥数据都跟着少了一半

命令链解析

  1. awk - 提取小时和动作

  2. sort - 排序

  3. uniq -c - 去重并计数

  4. awk - 格式化输出

  5. sort - 最终排序

第5步结果分析

数据长什么样

单表 behavior,约500条行为记录,包含用户ID、商品ID、行为类型、时间四个字段。

跑了什么分析

  • 各品类转化率

  • 用户行为汇总

  • 每小时行为分布

看到什么结果

  • 服装类转化率100%,电子类66.67%,食品类0%(食品类用户只看不买,需要调整品类或价格)

  • 用户1001最活跃(5次行为覆盖全路径),用户1005仅浏览无互动

  • 上午9-10点是访问高峰,适合推送营销内容

有什么用

  • 验证了AWK+Linux Shell可以快速处理CSV格式的行为数据

  • 简单的SQL查询和分组统计没问题

  • 后续可以加图表展示或者定时自动跑

3 技术栈对比

方案 优点 缺点 本次使用
Hive SQL语法友好,适合大数据 需要Hadoop集群,内存要求高 失败
AWK 轻量级,无需额外服务 语法不熟悉,适合小数据 成功
Python 功能强大,易于理解 需要安装Python环境

备选

4 核心经验总结

做对的

  1. 遇到障碍及时切换方案:Hive跑不动立即改用AWK

  2. 逐步验证:每步都确认结果再继续

  3. 保留关键字避坑time 不能用,改成 action_time

  4. 用 ls 和 pwd 确认文件位置

  5. 最终用AWK成功完成全部3个分析

踩过的坑

  1. Hive建表字段名不能用关键字 (time)

  2. AWK变量名拼接错误 (字符串和变量连接格式)

  3. AWK数组语法不熟悉 (第一次用二维数组报错)

  4. 文件路径不对 (一开始找不到CSV文件)

关键命令速记

# 1 创建文件
cat > 文件名 << 'EOF'
内容
EOF
# 2  AWK常用模式
awk -F',' '{处理逻辑}' 文件名
# 3 管道组合
命令1 | 命令2 | 命令3

5 复盘感悟

"不是技术多牛,而是遇到问题时能快速找到替代方案"

本次项目的核心价值:

  1. 完成了数据分析目标(虽然绕过了Hive)

  2. 掌握了AWK这个轻量级数据分析工具

  3. 理解了Hive/Hadoop的局限性(内存敏感)

  4. 学会了根据实际情况灵活调整技术方案

6 后续优化方向

如果以后数据量增大,可以学习用Hive或Spark处理更大规模数据,目前AWK方案对小数据量已经够用。

但在当前环境下,AWK方案就是最优解! 

项目状态:已完成,所有分析指标均得出有效结论!

完结

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐