1.データ収集プロジェクトの概要
1.データウェアハウス
データウェアハウスは、データを保存し、企業にデータサポートを提供することです
2.データの分類
ビジネスデータ:記録されるのは注文情報です!
行動データ:記録されるのは、注文プロセス中に発生した情報です!
2.1ユーザーのビジネスデータ
それは何ですか:
ユーザーがプラットフォーム(eコマース)を使用するときに生成されるデータは、eコマースのビジネス(購入、注文、支払い、収集、検索)と密接に関連しています!
作物:
ユーザーがAPPを使用すると、アプリが生成されます。
保存する方法:
リレーショナルデータベース
なぜ:
トランザクションは、RDMSとNoSqlを使用できるシーンを区別するコア要素です!
RDMS:トランザクションとオンライン処理に焦点を当てたOLTP(オンライントランザクションプロセス)設計!
NoSQL:モバイルインターネットの時代に生まれました。パフォーマンスに集中!強力なパフォーマンス!
Hiveは、クエリに重点を置いたOLAP(オンライン分析プロセス)に基づいて設計されています。
2.2ユーザー行動データ
それは何ですか:
プラットフォームAPPを使用する際のユーザーのさまざまな操作や動作(起動、コメント、お気に入りなど)を記録するために使用されるデータ!
作物:
ユーザーがAPPを使用すると、アプリが生成されます。
保存する方法:
JSON形式で記録されるログファイルの形式で保存されます!
なぜ:
データ情報は密集していて、価値が低く、記録期間が長く、構造が複雑です。
3.データ例
3.1ログデータの例
開始ログ:
{ common:” xxx“
start:”xxxx“,
err:“xxx”,
ts:"启动行为发生的时间戳"
}
{
"common": {
"ar": "370000",
"ba": "Honor",
"ch": "wandoujia",
"md": "Honor 20s",
"mid": "eQF5boERMJFOujcp",
"os": "Android 11.0",
"uid": "76",
"vc": "v2.1.134"
},
"start": {
"entry": "icon", --icon手机图标 notice 通知 install 安装后启动
"loading_time": 18803, --启动加载时间
"open_ad_id": 7, --广告页ID
"open_ad_ms": 3449, -- 广告总共播放时间
"open_ad_skip_ms": 1989 -- 用户跳过广告时点
},
"err":{
--错误
"error_code": "1234", --错误码
"msg": "***********" --错误信息
},
"ts": 1585744304000
}
{
"common":{
"ar":"420000","ba":"iPhone","ch":"Appstore","md":"iPhone 8","mid":"mid_991","os":"iOS 13.3.1","uid":"418","vc":"v2.1.134"},
"page":{
"during_time":3336,"item":"3,7","item_type":"sku_ids","last_page_id":"trade","page_id":"payment"},"ts":1583769315209}
イベントログ:
{
"common":{}
"actions":[
]
page:{},
err:{},
ts:xxx
}
{
"common": {
-- 公共信息
"ar": "230000", -- 地区编码
"ba": "iPhone", -- 手机品牌
"ch": "Appstore", -- 渠道
"md": "iPhone 8", -- 手机型号
"mid": "YXfhjAYH6As2z9Iq", -- 设备id
"os": "iOS 13.2.9", -- 操作系统
"uid": "485", -- 会员id
"vc": "v2.1.134" -- app版本号
},
"actions": [ --动作(事件)
{
"action_id": "favor_add", --动作id
"item": "3", --目标id
"item_type": "sku_id", --目标类型
"ts": 1585744376605 --动作时间戳
}
],
"displays": [
{
"displayType": "query", -- 曝光类型
"item": "3", -- 曝光对象id
"item_type": "sku_id", -- 曝光对象类型
"order": 1 --出现顺序
},
{
"displayType": "promotion",
"item": "6",
"item_type": "sku_id",
"order": 2
},
{
"displayType": "promotion",
"item": "9",
"item_type": "sku_id",
"order": 3
},
{
"displayType": "recommend",
"item": "6",
"item_type": "sku_id",
"order": 4
},
{
"displayType": "query ",
"item": "6",
"item_type": "sku_id",
"order": 5
}
],
"page": {
--页面信息
"during_time": 7648, -- 持续时间毫秒
"item": "3", -- 目标id
"item_type": "sku_id", -- 目标类型
"last_page_id": "login", -- 上页类型
"page_id": "good_detail", -- 页面ID
"sourceType": "promotion" -- 来源类型
},
"err":{
--错误
"error_code": "1234", --错误码
"msg": "***********" --错误信息
},
"ts": 1585744374423 --跳入时间戳
}
{
"common":{
"ar":"420000","ba":"iPhone","ch":"Appstore","md":"iPhone 8","mid":"mid_991","os":"iOS 13.3.1","uid":"418","vc":"v2.1.134"},"displays":[{
"displayType":"promotion","item":"10","item_type":"sku_id","order":1},{
"displayType":"query","item":"10","item_type":"sku_id","order":2},{
"displayType":"query","item":"10","item_type":"sku_id","order":3},{
"displayType":"promotion","item":"5","item_type":"sku_id","order":4},{
"displayType":"query","item":"3","item_type":"sku_id","order":5},{
"displayType":"query","item":"7","item_type":"sku_id","order":6},{
"displayType":"query","item":"5","item_type":"sku_id","order":7},{
"displayType":"recommend","item":"1","item_type":"sku_id","order":8},{
"displayType":"query","item":"10","item_type":"sku_id","order":9},{
"displayType":"query","item":"6","item_type":"sku_id","order":10}],"page":{
"during_time":12161,"item":"2","item_type":"sku_id","last_page_id":"good_detail","page_id":"good_spec","sourceType":"query"},"ts":1583769287899}
ログデータの種類:
スタート、露出、アクション、ページ、エラー!
ビジネスデータ要件:
①23のテーブルがあるテーブル
②表のデータはどのように生成されますか?
③テーブルはどのように更新されますか?どのフィールドが更新されますか?
④テーブルをHDFSにインポートするために使用される戦略は何ですか?どうして?
4.買収プラットフォーム
4.1収集方法
ビジネスデータ:どのようにガイドするか?なぜそんなにガイドされているのですか?
sqoopを使用して、mysqlのデータをHDFSに直接インポートします。
なぜSqoop?
- ビジネスシナリオが一致します!
- バッチ処理シーン!
- オープンソースは無料で、多くのユーザーがいて、コミュニティは活発です!
各テーブルのインポート方法に精通しています!
- 1日あたりの全額:テーブルのすべてのデータをインポートします
select xxx from 表
- 毎日の増分(新規インポートのみ):
select xxx from 表 where (date_format(create_time,'%Y-%m-%d')='$do_date'
- 毎日の追加と変更(その日に追加および変更されたデータのみがインポートされます):
select xxx from 表
where
(date_format(create_time,'%Y-%m-%d')='$do_date'
or
(date_format(operate_time,'%Y-%m-%d')='$do_date'
完全なガイダンスと段階的なガイダンスに適用できるシナリオは何ですか?
全量と増分は、データの量にのみ関連しています。
少量の
データ:全量、増分大量のデータ:増分
データ量が少ないテーブルとデータ量が多いテーブルを区別するにはどうすればよいですか?
テーブルポイントの性質:
- ディメンションテーブル:事実を説明するディメンション!
州表!地域テーブル!
ユーザーテーブル!
商品リスト!
商品分類リスト!
データ量に限りがあります!ファクトテーブル:テーブルに記録されたデータは起こった事実です!3w(誰がいつどこで)+数量
注文、支払い、コメント
時間の経過とともに、データ量は増え続けます。
ファクトテーブル:増分
ディメンションテーブル:完全、増分
ログデータ:収集方法は?
水路取得チャネルの2つの層を構築します!どの2つのフロア?
1.ログサーバー-> kafka
2. Kafka- > HDFS
4.2水路とsqoopの違いは?
sqoop: 使用场景单一! RDMS和HDFS互相导!
批处理!
flume: 场景丰富,支持多种数据源,可以传输到多种目的地!
流处理!
4.3なぜ2層のFlumeが必要なのですか?
对接SparkStreaming实时分析,因此必须将数据先采集到Kafka!
利点:
①安全性和公司目前集群的规划设计考虑
②削峰
a) 第一层flume将数据写入到kafka,最终由第二层flume将数据采集到hdfs
实现了将 N个 第一层的flume agent进程直接请求HDFS到
由第二层 flume agent,统一请求,减少了在并发情况下,NN的请求负载!
b) 将数据先写入kafka,由第二层flume从kafka中读取数据,kafka启到缓冲作用
即使上游生产能力, 大于 第二层flume的消费能力,也不会丢失数据!
③分层解耦,方便维护