1. 程式人生 > >專案練習(一)APP熱點標籤分析

專案練習(一)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,但是作為開發規範還是要寫好的!!