一、项目背景与目标
项目背景:
在移动APP满天飞的当下,如何做好APP的营销和推广至关重要,而该环节的关键在于能对APP做大众喜欢的关键字描述,从而提高APP的搜索命中率和下载率。找到热度标签,蹭热度标签,往往可以提高相应APP的下载量和使用量。
项目目标:
用时不超过一周,主要是通过查看资料,百度搜索等方式搞定,加强实战应用开发能力和自学能力。最终达到对于常用的小模块开发,可以在1-5天内迅速解决战斗,并形成自身的类库积累。掌握数据仓库开发流程、核心代码开发,达到独立开发中小型数据仓库项目的能力。
二、需求分析
给定一批app名称及其描述信息,共52.9万条数据(爬虫爬取App Store的数据)
其内容结构为,共包含6个字段,分别为(appId,app名称, 一级分类,二级分类,三级分类,Tags描述信息),但并不一定完全规整,视实际情况可能左对齐包括四个或五个或六个字段。
通过大数据开发之hive数据仓库命令行形式,完成数据加载、udf/udaf/udtf函数、统计分析的任务,并演示项目效果即可。
三、主要思路及难点
主要思路:
通过hive命令将数据加到数据仓库中
使用hql+udf/udaf/udtf完成统计分析
将统计分析结果插入到hive中自建的新表中
主要难点:
数据仓库的目录结构和开发规范
hive及HiveSQl常用命令
系统函数+udf/udaf/udtf灵活使用
hive常见问题的解决
项目流程:
思路分析:
1爬虫爬取App Store的数据(数据准备工作)
2.1创建对应的数据表1(create)
2.2加载数据(deal)
3.1创建一个表2保存”标签和标签量“
3.2对表1进行数据处理,产生数据保存到表2中(deal)
开发过程:
技术点:shell脚本、hive SQL
开发规范:
1、配置项config
touch set_env.sh vi set_env.sh
#! /bin/bash --告知这是一个shell脚本
HIVE='/usr/bin/hive' --创建HIVE变量,hive可执行文件的位置
2、存放创建表的脚本create(在linux窗口执行hive命令:hive -e ”(hive命令)“)
touch app_tag_meta_info.sh chmod 755 app_tag_meta_info.sh
vi app_tag_meta_info.sh
#! /bin/bash
source ../config/set_env.sh #等价于HIVE='/usr/bin/hive'
db="job_002"
table_name="app_tag_meta_info"
#引用某个变量使用$
$HIVE -e "
use $db;
create external table $table_name(
id string,
name string,
first_classify string,
second_classify string,
third_classify string,
tags string
)
partitioned by (dt string comment 'update date')
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
STORED AS textfile;
"
3、存放udf、数据处理的jar包udf
4、存放对数据处理逻辑的脚本deal
加载数据:touch produce_app_tag_meta_info.sh
chmod 755 produce_app_tag_meta_info.sh
vi produce_app_tag_meta_info.sh
#! /bin/bash
source ../config/set_env.sh
updateDT=$1
db="job_002"
table_name="app_tag_meta_info"
jar_path=""
class_path=""
data_source_path="app_abstract_info.txt"
$HIVE -e "
use $db;
load data local inpath '$data_source_path'
overwrite into table $table_name partition(dt='$updateDT')
;
"
$1指的时运行shell脚本时传入的第一个参数,$0代表所有的参数
(create)vi hot_tag_rank.sh
#! /bin/bash
source ../config/set_env.sh
db="job_002"
table_name="hot_tag_rank"
$HIVE -e "
use $db;
create table $table_name(
tag string,
freq int
)
partitioned by (dt string comment 'update date')
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
STORED AS textfile;
"
(deal)vi produce_hot_tag_rank.sh
在这里插入代码片#! /bin/bash
source ../config/set_env.sh
updateDT=$1
db="job_002"
table_name="hot_tag_rank"
jar_path=""
class_path=""
$HIVE -e "
use $db;
set hive.execution.engine=tez;
insert overwrite table hot_tag_rank partition(dt='$updateDT')
select tag,count(1) as freq from app_tag_meta_info lateral view explode(split(tags,',')) tag_table as tag where tag!='' and tag!='-' and dt='$updateDT' group by tag order by freq desc
"
脚本串联:
需要使用一个脚本来串联所有执行过程。
vi a_main.sh
#! /bin/bash
#得到当前日期
currentDT=`date +%Y%m%d`
echo "currentDT="$currentDT
#将文本文件数据加载到app_tag_meta_info表中
echo "start load data to table process"
sh produce_app_tag_meta_info.sh $currentDT
echo "end"
#生成统计排序的热度标签数据
echo "start insert tag rank data"
sh produce_hot_tag_rank_rc.sh $currentDT
echo "end"
echo "all done!"
``反引号的意思是将命令执行,将结果当作输入字符串