一.公司项目开发特点:
- 标准的项目开发的时间配比
- 开发前工作:开发=7:3
- 互联网公司招人用人做项目的潜规则
- 招3个人,干5个人的活,给4个人的钱。
- 项目需求概述
- 解决什么问题
- 用户需求->系统需求
- 输出:prd,产品需求文档
- 甲方自己写:此要求甲方比较专业
- 乙方自己写:甲方口述需求,乙方进行整理。
- 输入:甲方的工作人员表达的需求内容
- 解决什么问题
二.项目需求概述
1.概念:
做什么事情(宏观描述)
为什么要做(讲清楚原因和价值)
从业务逻辑角度,讲清楚要如何做(微观细节说明,产出prd文档,即Product Requirement Document)
明确阶段目标(里程碑,milestone)和验收标准(干成什么样子算ok)
过程管理与风险控制
2.作用:
- 准确勾勒和描绘用户的问题
- 便于用户方、需求方、开发者三方沟通交流
- 开发人员工作的基础和依据
- 确认测试和验收的依据
- 产品和开发互相撕逼的依据
3.本项目需求说明书
做什么事情( 宏观描述)
- 给定一批微博博文数据,构建到hive数据仓库中,挖掘出数据的热点关键词,并能在web页面中显示。
为什么要做(讲清楚原因和价值)
- 迅速捕捉社交网络内热词,可以作为新闻素材、视频推荐、商品推荐等依据。
从业务逻辑角度,讲清楚要如何做(微观细节说明,产出prd文档,即Product Requirement Document)
- 给定具有时间连续性的微博文章不低于100万条即可,实际给出2.2亿条。(csv格式)
- 将文本文件导入到hive的指定微博内容表中
- 通过nlp(nature language process)分词处理,将一条一条的博文拆解成一个一个的词序列(Term Sequene)。
- 输入博文
- 输出词序列
-
对词序列中的全部元素做词频统计(Term Frequence Statistic)
- 对词统统计结果做倒排输出,得到舆情热词
-
将数据推送到mysql指定数据表中
搭建java web项目,在前端页面中调用后端的数据接口,将数据返回到前端中。
在前端调用绘图插件,将舆情热词用比较炫的方式显示出来。
明确阶段目标(里程碑)和验收标准(干成什么样子算ok)
过程管理与风险控制。
用户需求->系统需求
三.项目需求分析
1.概念:
- 标准定义
- 把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。
- 是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
- 简化定义
- 根据PRD文档,从技术层面,去分析项目的模块组成、技术实现、过程管理、风险控制,并确定项目的可行性。
2.作用:
- 将技术可行性、技术实现难点、工作量、人员分配统筹分析和安排。
- 为项目研发周期评估和人员按排提供依据
- 极大的降低项目失败风险
3.本项目需求分析说明 书
三.技术方案与开发计划
1.技术方案
1.1概念:为解决各类具体技术问题,而提出的系统的解决方法。
1.2评价技术方案的合格:
清晰、系统的获取到该技术问题的具体解决方法,并有相应的可行性。
1.3本项目的技术方案-数据类开发
2. 开发计划
2.1概念:
- 对项目开发进行拆解拆分成相关的模块或技术点,并将其与岗位及其对应的责任人进行匹配对应,并设置相应的限制参数,如开发时间、开始时间、结束时间、负责人、状态等字段,便于项目开发过程中的代码开发、分工协作、进度管控、风险管理。
2.2评价开发计划的合格:
模块拆分清晰、任务分工明确、进度安排合理,具备一定的可执行性
2.3:本项目的开发计划
序号 | 任务模块 | 任务项 | 责任人 | 所需时长 | 状态 | 备注 |
1 | 源数据准备 | 确定源数据文件集合 | 天亮 | 1天 | 100% | |
2 | 源数据准备 | 将源数据装载到hive仓库 | 张三 | 1天 | open | |
3 | 热点挖掘处理过程 | 分词UDF编写 | 张三 | 0.5天 | open | |
4 | 热点挖掘处理过程 | 生成分词结果表 | 张三 | 0.5天 | open | |
5 | 热点挖掘处理过程 | 生成wordcount倒排表 | 张三 | 0.5天 | open | |
6 | 热点挖掘处理过程 | 将表推送到mysql表中 | 张三 | 0.5天 | open | |
7 | 前端web展示 | 构建springboot项目 | 张三 | 0.5天 | open | |
8 | 前端web展示 | 加入echarts绘图插件 | 张三 | 0.5天 | open | |
9 | 前端web展示 | 前端界面生成 | 张三 | 0.5天 | open |
四.开发细节与风险控制
1.确定源数据文件集合
-
- 来源渠道
- 渠道选择
- 确定数据集
- 确定数据文件格式
- 确定数据结构及Demo数据查看
- 洞查数据本身
- 总大小
- 总文件个数或者说平均文件大小
- 总记录条数
- 可预见的最大/最小文件记录数
2.洞查数据本身
将数据传输到hadoop客户端机器中,为数据传输到hive仓库做准备。
总大小
掌握计算方法
准确计算法:看到全部数据后,通过命令求实际大小。
评估计算法:通过对部分数据做精细化计算,然后推导到全局数据。
总文件个数或者说平均文件大小
掌握计算方法
总记录条数
掌握计算方法
可预见的最大/最小文件记录数
掌握计算方法
2.将源数据装载到hive仓库
流程:
-
- zip原始数据批量解压
- 在hive中创建weibo_origin和weibo_product两张同构表
- 将解压完的明文每天数据文件,按天load到weibo_origin载入原始数据层
- 数据检验与校正
- 清洗原始数据表weibo_origin,按天分区插入到weibo_product表中
zip原始数据批量解压:
ls weibo/*.zip | xargs -n1 unzip -d weibo_text/
在hive中创建weibo_origin和weibo_product两张同构表:
#! /bin/bash
db_name=liyingjie
hive -e "
use $db_name;
CREATE external TABLE weibo_origin(
mid string,
retweeted_status_mid string,
uid string,
retweeted_uid string,
source string,
image string,
text string,
geo string,
created_at string,
deleted_last_seen string,
permission_denied string
)
comment 'weibo content table'
partitioned by (day_seq string comment 'the day sequence')
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS textfile;
"
#! /bin/bash
db_name=liyingjie
hive -e "
use $db_name;
CREATE TABLE weibo_product(
mid string,
retweeted_status_mid string,
uid string,
retweeted_uid string,
source string,
image string,
text string,
geo string,
created_at string,
deleted_last_seen string,
permission_denied string
)
comment 'weibo content table'
partitioned by (day_seq string comment 'the day sequence')
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
STORED AS orcfile;
"
数据按天分区载入weibo_origin表:
#! /bin/bash
#定义相关变量参数
db_name=liyingjie
csv_root_dir_local=../data/csv_data_dir/
csv_root_dir_hdfs=/tmp/liingjie/weibo_data_dir/
table_name=weibo_origin
#编程实现,将一个csv目录当中的所有csv文件批量加载到hive的指定表的分区当中
csv_file_list=`ls $csv_root_dir_local""*.csv`
#echo $csv_file_list
#遍历本地获取到的csv文件集合
for file_path in $csv_file_list;do
#echo $file_path
#将本地csv文件上传到hdfs目录当中
hdfs dfs -put -f $file_path $csv_root_dir_hdfs
#将hdfs的csv文件load到hive表的指定分区
#首先获取到文件的名称,即获取到指定文件的日期
day_seq=`echo $file_path | awk -F '/' '{print $NF}' | cut -d '.' -f1`
echo $day_seq
hive -e "
use $db_name;
load data inpath '$csv_root_dir_hdfs$day_seq.csv' overwrite into table
$table_name partition(day_seq='$day_seq');
"
done
执行脚本:sh load_to_weibo_origin.sh
3.UDF编写
词统统结果做倒排输出,得到舆情热词