專案練習(一)APP熱點標籤分析
專案練習(一)APP熱點標籤分析
1、專案背景
通過找到熱度標籤,贈標籤熱度,以提高相應APP的下載量和使用量。
2、需求分析
(1)爬取資料:
6個欄位,分別為(appId,app名稱, 一級分類,二級分類,三級分類,Tags描述資訊),但並不一定完全規整,視實際情況可能左對齊包括四個或五個或六個欄位。
(2)儲存到hive做進一步分析:
通過大資料開發之hive資料倉庫命令列形式,完成資料載入、udf/udaf/udtf函式、統計分析的任務,並演示專案效果即可。
3、主要思路
(1)建立對應的資料表1
(2)載入資料到表1
(3)建立一個表2儲存標籤和標籤量
(4)對資料表1進行處理,“產生資料儲存到表2”
4、開發過程
技術組成:hive sql+udf/udaf/udtf
開發規範:
4.0 prepare
(1)相關目錄建立
config:存放相關配置變數
create:存放表結構資料
deal:具體的sql指令碼
udf:udf/udaf/udtf相關的jar包
4.1按步驟執行
(1) 輸入、輸出表設計到位。
(2) 將資料載入到輸入表中。
(3) hivesql+udf/udaf/udtf實現熱詞統計與寫入庫表。
4.2將所有流程串聯到a_main.sh指令碼中
待開發工作基本完成,需將專案的主體流程,
串聯到a_main.sh當中,作為整個專案的主入口。
4.3詳細講解
(1)config:
#! /bin/bash
hive='/usr/bin/hive'
(2)create:
表1
#! /usr/bin/env bash
source ../config/set_env.sh
$HIVE -e "
use maanran;
create table tb_app_input(
appId string,
appName string,
firstLevel string,
SecondLevel string,
ThirdLevel string,
Tags string
)
partitioned by (dt string comment 'update date' )
row format delimited
fields terminated by '\t'
lines terminated by '\n'
"
1、source語句相當於引入set_env.sh檔案,即引入hive變數。
2、定義多個變數,方便後期修改方便。
3、hive -e 語句:保證可以在shell中執行HiveQL。
4、hive -e後可以跟"“和’’ ,但是’'不會識別內容中的Hive變數,會認為是shell變數導致出錯,所有建議使用”"
5、如何決定建立外表/內表?
資料倉庫可以分為三個模組(源資料、倉庫、集市)
源資料:一般是load方式批量載入進來的資料,含有很多的髒資料,大多都是為外表,方便倉庫多種使用
倉庫:當建立好可靠的表結構時,將源資料的資料insert進來,可以建立內表。
表2
#! /usr/bin/env bash
source ../config/set_env.sh
$HIVE -e "
use maanran;
create table hot_tag_rank(
Tag string,
freq int
)
partitioned by (dt string comment 'update date')
row format delimited
fields terminated by '\t'
lines terminated by '\n'
"
(3)deal:
載入資料到表1
#! /usr/bin/env bash
source ../config/set_env.sh
input_tb_name='tb_app_input'
updateDT=$1
data_source_path='../app_abstract_info.txt'
$HIVE -e "
use maanran;
load data local inpath '$data_source_path' overwrite into table $input_tb_name
partition(dt='$updateDT')
"
echo 'load data to input_table_complete!'
1、sh load_input.sh AAA BBB CCC
AAA代表傳入的$1的引數 ,BBB代表傳入的$2的引數,所有代表引數$0。
載入資料到表2
#! /bin/bash
source ../config/set_env.sh
updateDT=$1
db_name=maanran
output_table=hot_tag_rank
$HIVE -e "
use $db_name;
set hive.execution.engine=tez;
insert overwrite table $output_table partition(dt='$updateDT')
select tag,count(1) as freq from tb_app_input
lateral view explode(split(tags,',')) tag_table as tag where tag!='-' and tag!='' and dt='$updateDT'
group by tag order by freq desc;
"
echo 'load data to output_table_complete!'
1、set hive.execution.engine=tez;設定執行引擎是tez,這個引擎比mr快一些。
以上測試完成可以寫main.sh來依次執行這些sh檔案,建立表的檔案可以不加在main.sh中,防止以後再使用時出現建表名衝突的問題
總main:
#! /bin/bash
currentDT=`date +%Y%m%d`
echo "currentDT="$currentDT
sh load_input.sh $currentDT
sh load_output.sh $currentDT
echo "all done!"
1、`反引號代表先執行``中的內容,在將返回值給currentDT
(4)udf:
本次專案暫時不涉及udf,但是作為開發規範還是要寫好的!!