基于亿级微博数据的数据仓库的构建和热词挖掘

第一个阶段:项目需求分析
1、项目需求是什么:即这个项目是做什么事,为什么做,从业务角度分析解释如何做,并且产出prd(Product Requirement Document)文档,明确阶段目标(里程碑)和验收标准(干成什么样子算是ok),风险控制与构成管理,
2、项目需求的任务:产出prd文档(对该项目进行详细的说明)
3、项目需求的作用:准确勾勒和描绘用户的问题,便于需求方、用户、开发者三方沟通交流,开发人员工作的基础和依据,确认测试和验收的依据,产品和开发相互确定完成情况的依据
4、项目需求的评估方法:是否有价值,是否有可执行性,是否能解决项目的立项需求,人员与进度安排是否合适,验收标准是否合理
5、本项目的需求说明书:
做什么事情:给定一批微博博文数据,构建到hive数据仓库中,挖掘出数据的热点关键词,并能在web页面中显示。
为什么要做:迅速捕捉社交网络内热词,可以作为新闻素材、视频推荐、商品推荐等依据。
从业务逻辑角度,讲清楚要如何做(微观细节说明,产出prd文档,即Product Requirement Document)
给定具有时间连续性的微博文章不低于100万条即可,实际给出2.2亿条。(csv格式)
将文本文件导入到hive的指定微博内容表中。
通过nlp分词处理,将一条一条的博文拆解成一个一个的词序列(Term Sequene)。
对词序列中的全部元素做词频统计(Term Frequence Statistic)
对词统统计结果做倒排输出,得到舆情热词
将数据推送到mysql指定数据表中
搭建java web项目,在前端页面中调用后端的数据接口,将数据返回到前端中。
在前端调用绘图插件,将舆情热词用比较炫的方式显示出来。
明确阶段目标(里程碑)和验收标准(干成什么样子算ok)
风险控制与过程管理

第二个阶段:需求分析
1、需求分析是什么
标准定义:
把软件计划期间建立的软件可行性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。
是软件定义阶段中的最后一步,是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。
简化定义:
根据PRD文档,从技术层面,去分析项目的模块组成、技术实现、风险控制与过程管理
2、需求分析的任务
概述
确定对系统的综合要求 。分析系统的数据要求,导出系统的逻辑模型,修正系统的开发计划
步骤划分:
1)需求提出:项目需求方(产品经理/相关领导)与项目研发团队(往往是项目经理),集中描述系统的目的,把目的描述清楚准确,作为需求方和研发方的合同。
2)需求描述:目标是对需求方的需求进行鉴别、综合和建模,清除用户需求的模糊性、歧义性和不一致性,分析系统的数据要求,为原始问题及目标软件建立逻辑模型。
分析人员要将对原始问题的理解与软件开发经验结合起来,以便发现哪些要求是由于需求方的片面性或短期行为所导致的不合理要求,哪些是用户尚未提出但具有真正价值的潜在需求。
标准文档举例:https://wenku.baidu.com/view/2f07d53b580102020740be1e650e52ea5518ce8f.html?from=search
3)需求评估:需求分析师要在用户和软件设计人员的配合下,对自己生成的需求规格说明和初步的用户手册进行复核,以确保软件需求的完整、准确、清晰、具体,并使用户和软件设计人员对需求规格说明和初步的用户手册的理解达成一致。
发现问题,及时复查和确定。

需求分析的作用:
1)将技术可行性、技术实现难点、工作量、人员分配统筹分析和安排。
2)为项目研发周期评估和人员按排提供依据
3)极大的降低项目失败风险

需求分析的评估方法:
1)是否准确描述清楚需求方的需求
2)是否能依据它来评估系统风险、技术难度、研发工期

本项目的需求分析书:

在这里插入图片描述

第三个阶段:技术方案与开发计划
1、技术方案:
在这里插入图片描述

2、开发计划:详细的,精准到每个模块的精准到天的计划完成计划书。

第四个阶段:开发细节与风险控制
1、开发细节:共分为9个模块
1.1:确定源数据文件集合
步骤拆分:来源渠道:
a)自行写网络爬虫采集:研发成本高、不是本职工作
b)公开数据集:无研发成本,公开数据集质量高,数据量可大可小,按需获取即可。
c)第三方数据买卖公司:无研发成本,需要付费才能获取。
渠道选择:基于项目需求,选择公开数据集即可
a)搜狗搜验室-http://www.sogou.com/labs/
b)多领域公开数据集-http://blog.csdn.net/marleylee/article/details/76587354
c)国外的公开数据集-https://site.douban.com/146782/widget/notes/15524697/note/519440833/
d)自行积累的公共数据集-https://mp.weixin.qq.com/s/8whZsvERs6zlUeYT677YyA
确定数据集:
2012年自年初到年末的约2.2亿条微博数据,共52周的数据,分成52个zip包
确定数据量级
总大小
总文件个数或者说平均文件大小
总记录个数
确定数据文件格式(csv格式数据)
确定数据结构
1.2 将源数据装载到hive仓库
步骤拆分:
zip原始数据在weibo目录下进行批量解压:
将zip包解压批量解压到指定目录/data1/weibo_text下 :ls weibo/.zip | xargs -n1 unzip -d weibo_text/
在hive中创建weibo_origin和weibo_product两张同构表:
在自己的linux下建立一个项目的的目录(mkdir job001),该目录有两个子目录(mkdir yuqingjob,mkdir datasource),一个子目录下面需要建4个子目录:mkdir config,mkdir create,mkdir udf,mkdir deal,一个子目录需要存储外部传进来的数据源文件,一个子目录下需建立存储压缩数据与非压缩数据的目录。(mkdir weibo_zip,mkdir_text)
第一步将配置文件配置好:cd config mkdir set_env.sh
vi set_env.sh
#! /bin/bash
*
HIVE=’/usr/bin/hive’
通过chmod 755 [脚本名称] 对脚本进行修改权限*
在hive中,对数据库名称进行模糊查询:show databases like 'z.
’;
将解压完的明文每周数据表,按周load到weibo_origin载入原始数据:
1)将压缩文件传到weibio——zip目录下:rz -bey [选择文件所在路径]
2)将压缩文件解压到weibo_text目录下:
3)在create目录下,建立建表脚本weibo_origin.sh,weibo_product.sh
weibo_origin.sh:
#!/bin/bash

source …/config/set_env.sh

db_name=‘yjg’
table_name=‘weibo_origin’

扫描二维码关注公众号,回复: 5614248 查看本文章

$HIVE -e"
use $db_name;
CREATE external TABLE $table_name(
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 (week_seq string comment ‘the week sequence’)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’
STORED AS textfile;
"

weibo_product.sh:

#! /bin/bash

#让环境变量生效
source …/config/set_env.sh

#在脚本头部,定义脚本的输入
db_name=‘yjg’
table_name=‘weibo_product’
$HIVE -e "
use $db_name;
CREATE external TABLE $table_name(
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 (week_seq string comment ‘the week sequence’)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’
STORED AS orcfile;
"
数据按周分区加载到weibo_origin表中:cd …/deal touch load_to_weibo_origin.sh chmod 755 load_to_weibo_origin.sh
vi load_to_weibo_origin.sh
#! /bin/bash
#设置zip源文件所在的本地数据目录
parent_zip_dir=/home/yangjiangong/weibo_text
#将分区值转换成shell数组
partition_name_array=ls $parent_zip_dir | xargs -n1 echo | cut -d . -f1
#设置数据库名称
db_name=yjg
#设置数据表名称
table_name=weibo_origin
#遍历每个分区数据,加载到对应的hive分区表当中
for one_partition in $partition_name_array; do
#打印当前正在处理的分区
echo $one_partition
#正式执行导入代码
hive -e "
use d b n a m e ; L O A D D A T A L O C A L I N P A T H db_name; LOAD DATA LOCAL INPATH ' parent_zip_dir/$one_partition.csv’ OVERWRITE INTO TABLE t a b l e n a m e P A R T I T I O N ( w e e k s e q = table_name PARTITION (week_seq=' one_partition’);
"
#break
done

清选原始数据表weibo_origin,按周插入到weibo_product表中touch weibo_product
#! /bin/bash

source …/config/set_env.sh

db_name=‘yjg’
table_input=‘weibo_origin’
table_output=‘weibo_product’

$HIVE -e "
use $db_name;
set hive.exec.dynamic.partition.mode=nonstrict;
from $table_input
insert overwrite table $table_output partition(week_seq) select * where mid!=‘mid’;
"

第五个阶段:内部测试、Bug修复、调优
第六个阶段:正式上线与项目总结
第七个阶段:A+项目

猜你喜欢

转载自blog.csdn.net/fakerlove/article/details/84840041
今日推荐