オリジナルリンク:
https://www.toutiao.com/i6773241257528394248/
私たちがやった前に、この時間を「javaのMapReduceのを、PVサイト分析を実現する」我々はハイブで、いくつかの需要の指標を分析することができます
提案された要件:24時間の各期間の統計分析とUV PV
分析:
(1)PV統計総ページビューは(URL)カウント
再カウントに(2)UV統計(個別のGUID)
(3)時刻フィールド、日付及び時間(パーティションテーブル)を得ます
最終的な結果は期待します
次に、各段階に注意を払う:取得段階、洗浄段階、分析段階。
準備データは、ビューのデータは(データとデータディクショナリを表示するにはここでは省略)の構造を理解するために辞書とデータの意味、この時点でデータが取得(アクイジション・フェーズ)を完了していると考えることができ、一般的なスタッフは私たちの手に、データの取得によって引き渡されます上。
ログイン真っすぐクライアント
サーバを起動します。bin / hiveserver2&
クライアントを起動します
ビン/ビーライン-u JDBC:hive2:// mastercdh:10000 -nルート-pパスワード
データ辞書によると、データテーブルを作成します
データベースを作成します。
データテーブルを作成します。
(表track_log_sourceを作成します
id文字列、
URL文字列、
リファラ文字列、
キーワード文字列、
文字列型、
GUID文字列、
PAGEID文字列、
モジュールID文字列、
リンク文字列、
attachedInfo文字列、
セッションIDの文字列、
trackerU文字列、
trackerType文字列、
IP文字列、
trackerSrc文字列、
クッキー文字列、
注文コード列、
trackTime文字列、
endUserId文字列、
firstLink文字列、
sessionViewNo文字列、
商品コード文字列、
curMerchantId文字列、
provinceId文字列、
cityId文字列、
料金文字列、
edmActivity文字列、
edmEmail文字列、
edmJobId文字列、
ieVersion文字列、
プラットフォームの文字列、
internalKeyword文字列、
resultSum文字列、
currentPageに文字列、
linkPosition文字列、
buttonPosition文字列
)行形式区切られたフィールドは、「\ T」によって終了しました。
データを準備します
準備されたデータのインポート
表track_log_sourceに負荷データのローカルINPATH「/データ/試験/ DATA1」。
表track_log_sourceに負荷データのローカルINPATH「/データ/試験/ DATA2」。
次見ます
買収が完了すると、データのニーズは、「データ重複排除のためのMapReduce」の前に行ったように、洗浄すべき
以前の分析によると、私たちはテーブルを作成し、我々はのフィールドから抽出する必要があります
(表track_log_qingxiを作成します
id文字列、
URL文字列、
GUID文字列、
日付文字列、
時間の文字列
)行形式区切られたフィールドは、「\ T」によって終了しました。
挿入データ
track_log_sourceから(trackTime、9,2)日付、サブストリング(trackTime、12,2)時間をサブストリング、番号、URL、GUIDを選択track_log_qingxiテーブルに挿入します。
パーティションテーブル:時間フィールドが分割されています
(表track_log_part1を作成します
id文字列、
URL文字列、
GUID文字列
)(日付文字列、時間の文字列)で仕切ら
行形式区切られたフィールドは、「\ t」のことで終了しました。
挿入データ
そして時間= '18' '日付= '28 track_log_qingxiからのGUID IDを選択し、URL、テーブルtrack_log_part1パーティション(= '18日付= '20150828'、時間)' への挿入。
そして時間= '19' '日付= '28 track_log_qingxiからのGUID IDを選択し、URL、テーブルtrack_log_part1パーティション(= '19日付= '20150828'、時間)' への挿入。
言葉を書いて、条件が完了するのに必要なすべての時間は、非常に不便です
概念で見てみましょう:動的パーティショニング
最初のハイブハイブ-site.xml構成ファイルでは、2つの属性があります
動的なパーティショニングを有効にするかどうかを示します(これはデフォルトで有効になっています)
<プロパティ>
<名前> hive.exec.dynamic.partition </名前>
<値>真</ value>の
</プロパティ>
動的パーティショニングを使用して、必要性は非strictモードを設定するには
<プロパティ>
<名前> hive.exec.dynamic.partition.mode </名前>
<値>厳密</値>
</プロパティ>
私たちは、直接設定されていない、コマンドの変更を使用します
セットhive.exec.dynamic.partition.mode =厳格で、
その後、我々は、パーティションテーブルを再作成します
(表track_log_part2を作成します
id文字列、
URL文字列、
GUID文字列
)(日付文字列、時間の文字列)で仕切ら
行形式区切られたフィールドは、「\ t」のことで終了しました。
再挿入(この場所はパーティションの動的特性を使用することです)
track_log_qingxi SELECT * FROMテーブルtrack_log_part2パーティション(日付、時間)に挿入。
データの表示は、それが時間を超えている場合ので、あなたは自動的になります、自動的に私たちを分離助けました
データ分析
PVを見ます
日付、時間によってtrack_log_part2グループからの日付、時間、回数(URL)PVを選択します。
UV分析
日付、時間によってtrack_log_part2群から日付、時間、回数(異なるGUID)UVを選択します。
最終的な結果テーブルに最終結果
選択した日付、時間、回数(URL)PV、カウント数(個別のGUID)、日付、時間によってtrack_log_part2グループからの紫外線などのテーブルの結果を作成します。
データのエクスポート
最終的な結果は、MySQLで保存されています
MySQLでテーブルを作成します。
(表track_pv_uv_saveを作成します
日付VARCHAR(30)、
時間のVARCHAR(30)、
PVのVARCHAR(30)、
紫外線VARCHAR(30)、
主キー(日付、時間)
);
sqoop実施形態(ハイブ-のMySQL)
ビン/ sqoop輸出\
--connect JDBCます。mysql:// mastercdh:3306 / track_log_mysql \
--usernameルート\
--passwordパスワード\
--table track_pv_uv_save \
--export-あなたは/user/hive/warehouse/exp_track_log.db/result \
-m 1 \
--input-フィールドは終端-によって '\ 001' に
MySQLでチェック
私たちは、ローカルにデータをダウンロードすることができます
ビン/ HDFS DFS -get /user/hive/warehouse/exp_track_log.db/result/000000_0 /データ/テスト
次のデータを見ます
次のデータを見ることは問題ではありません