数仓-集群环境搭建

集群环境搭建


1-数据仓库DW

数据来源:
  爬虫 日志采集系统 业务数据 财务系统

数据去向:
  报表系统、用户画像、推荐系统、机器学习、风控系统 
数仓-集群环境搭建_第1张图片
项目需求分析
  ① 数据采集平台搭建
  ② 实现用户行为数据仓库的分层搭建
  ③ 实现业务数据仓库的分层搭建
  ④ 针对数据仓库中的数据进行,留存、转化率、GMV(每天交易额)、复购率、活跃等报表行为;
  
项目框架
技术选型 
数仓-集群环境搭建_第2张图片
采集:
方式一: log日志—>flume—>kafka(API)—>hdfs; 方式二: Logstash(读取日志)–>ELK(存储查询)全文检索引擎-sqoop
DataX导数据; mysql->sqoop

存储:mysql(存储业务–分析结果) ;ES(存、查都很快)<---->HBase(存快,分析慢); S3

计算:Tez(分析hive中指标)&hive; Flink–Spark

查询:Presto,Impala,Kylin

系统架构图:

日志文件| mysql数据表—>分别由flume| sqoop处理–> 分别交给–>kafka| HDFS
由Yarn统一调度
Hive| Presto负责数据查询;
Azkaban任务调度器
最后可视化展示; 
数仓-集群环境搭建_第3张图片
系统数据流程:

Web/App埋点行为数据—>log日志服务器(友盟-第三方日志服务器)—>logFile格式->Flume生产–>kafka(kafka(相当于路由池)可以接实时数据、es等)–flume消费–>HDFS
业务交互–>mysql(业务服务器–>Nginx实现负载均衡)->sqoop–>>hdfs—>hive数仓–>把结果存储到mysql
数仓-集群环境搭建_第4张图片


框架版本选型
产品            版本
Hadoop          2.7.2
Flume           1.7.0
Kafka           0.11.0.2
Kafka Manager      1.3.3.22
Hive            1.2.1
Sqoop           1.4.6
MySQL           5.6.24
Azkaban         2.5.0
Java           1.8
Zookeeper        3.4.10
Presto          0.189

集群资源规划设计
            服务器hadoop101    服务器hadoop102    服务器hadoop103
HDFS           NameNode      DataNode          DataNode        
            DataNode                   SecondaryNameNode
Yarn           NodeManager       Resourcemanager   NodeManager    
                        NodeManager
Zookeeper        Zookeeper          Zookeeper        Zookeeper
Flume(采集日志)      Flume         Flume    
Kafka            Kafka        Kafka           Kafka
Flume(消费Kafka)                              Flume
Hive            Hive        
MySQL           MySQL        
Presto           Presto

2-数据生成模块

埋点数据–想记录的数据(web端、app端):
产品字段ap(产品字段可以有多个app)
①公共字段 所有的事件都需要记录的字段,公共的; <<-cm–>>AppBase
  cm(公共字段基本所有安卓手机都包含的字段); cm公共字段;json对象
  et事件; et事件字段:json数组

②业务字段(埋点上报的字段,有具体的业务类型, 有(用户)具体的行为;)

日志格式:
  时间戳|json字符串
  cm:公共字段
  et:事件(日志)字段(用户行为–针对每一个事件)

事件日志的设计
①商品列表页(loading)

action            动作:开始加载=1,加载成功=2,加载失败=3
loading_time    加载时长:计算下拉开始到接口返回数据的时间,(开始加载报0,加载成功或加载失败才上报时间)
loading_way        加载类型:1-读取缓存,2-从接口拉新数;(加载成功才上报加载类型)
extend1            扩展字段 Extend1
extend2            扩展字段 Extend2
type            加载类型:自动加载=1,用户下拽加载=2,底部加载=3(底部条触发点击底部提示条/点击返回顶部加载)
type1            加载失败码:把加载失败状态码报回来(报空为加载成功,没有失败)

②商品点击(display)

action    动作:曝光商品=1,点击商品=2,
goodsid    商品ID(服务端下发的ID)
place    顺序(第几条商品,第一条为0,第二条为1,如此类推)
extend1    曝光类型:1 - 首次曝光 2-重复曝光(没有使用)
category    分类ID(服务端定义的分类ID)

③商品详情页(newsdetail)详情页从哪来

entry            页面入口来源:应用首页=1、push=2、详情页相关推荐=3
action            动作:开始加载=1,加载成功=2(pv),加载失败=3, 退出页面=4
goodsid            商品ID(服务端下发的ID)
show_style        商品样式:0、无图、1、一张大图、2、两张图、3、三张小图、4、一张小图、5、一张大图两张小图
news_staytime    页面停留时长:从商品开始加载时开始计算,到用户关闭页面所用的时间。若中途用跳转到其它页面了,则暂停计时,待回到详情页时恢复计时。或中途划出的时间超过10分钟,则本次计时作废,不上报本次数据。如未加载成功退出,则报空。
loading_time    加载时长:计算页面开始加载到接口返回数据的时间 (开始加载报0,加载成功或加载失败才上报时间)
type1            加载失败码:把加载失败状态码报回来(报空为加载成功,没有失败)
category        分类ID(服务端定义的分类ID)

④广告(ad)


entry            入口:商品列表页=1  应用首页=2 商品详情页=3
action            动作:请求广告=1 取缓存广告=2  广告位展示=3 广告展示=4 广告点击=5 
content            状态:成功=1  失败=2  
detail            失败码(没有则上报空)
source            广告来源:admob=1 facebook=2  ADX(百度)=3 VK(俄罗斯)=4
behavior        用户行为:主动获取广告=1  ;被动获取广告=2
newstype        Type: 1- 图文 2-图集 3-段子 4-GIF 5-视频 6-调查 7-纯文 8-视频+图文  9-GIF+图文  0-其他
show_style        内容样式:无图(纯文字)=6 一张大图=1  三站小图+文=4 一张小图=2 一张大图两张小图+文=3 图集+文 = 5  一张大图+文=11   GIF大图+文=12  视频(大图)+文 = 13 来源于详情页相关推荐的商品,上报样式都为0(因为都是左文右图)

⑤消息通知(notification)

action            动作:通知产生=1,通知弹出=2,通知点击=3,常驻通知展示(不重复上报,一天之内只报一次)=4
type            通知id:预警通知=1,天气预报(早=2,晚=3),常驻=4
ap_time            客户端弹出时间
content            备用字段

⑥用户前台活跃(active_foreground)

push_id        推送的消息的id,如果不是从推送消息打开,传空
access        1.push 2.icon 3.其他

⑦用户后台活跃(active_background)

active_source    1=upgrade,2=download(下载),3=plugin_upgrade

⑧ 评论(comment)

序号    字段名称    字段描述    字段类型    长度    允许空    缺省值
       comment_id    评论表            int        10,0        
           userid    用户id            int        10,0        √        0
     p_comment_id    父级评论id(为0则是一级评论,不为0则是回复)    int    10,0    √    
       content       评论内容            string    1000        √    
       addtime      创建时间            string                √    
       other_id   评论的相关id        int        10,0        √    
    praise_count    点赞数量        int        10,0        √        0
    reply_count    回复数量        int        10,0        √        0

⑨收藏(favorites)

序号    字段名称    字段描述    字段类型    长度    允许空    缺省值
1        id                主键        int        10,0        
2        course_id        商品id        int        10,0        √    0
3        userid            用户ID        int        10,0        √    0
4        add_time        创建时间    string                √

10 点赞(praise)

序号    字段名称    字段描述    字段类型    长度    允许空    缺省值
1        id            主键id            int        10,0        
2        userid        用户id            int        10,0    √    
3        target_id    点赞的对象id    int        10,0    √    
4        type      点赞类型     1问答点赞 2问答评论点赞 3 文章点赞数4 评论点赞    int    10,0    √    
5        add_time    添加时间        string            √    

11 错误日

errorBrief    错误摘要
errorDetail    错误详情

12启动日志数据start action=1可以算成前台活跃
sdk软件开发工具
12个主题(1个appbase公共日志)对应12张表(12张(12个bean对象,再加一个公共的即共13个bean对象)用户行为表), 1张启动日志表; 8张业务表; 数仓分4层; 20*4=80张表;
启动日志1张表–>离线和实时; 需要写flume的拦截器
事件日志kafka的事件event主题 11个; 分的越细越灵活,

启动日志-1类
事件日志-11类

启动日志页面:
1552739869506|{
"cm":
{"ln":"-62.5","sv":"V2.8.9","os":"8.2.7","g":"[email protected]","mid":"999","nw":"3G","l":"en","vc":"18","hw":"640*960","ar":"MX","uid":"999","t":"1552692232488","la":"-4.9","md":"HTC-8","vn":"1.0.3","ba":"HTC","sr":"I"},
"ap":"gmall",
"et":[{"ett":"1552655708510",
        "en":"display",
        "kv":{"goodsid":"245","action":"1","extend1":"2","place":"4","category":"20"}},
      {"ett":"1552683751477",
        "en":"ad",
        "kv":{"entry":"3","show_style":"3","action":"5","detail":"325","source":"2","behavior":"1","content":"1","newstype":"9"}},
      {"ett":"1552670223504",
        "en":"active_foreground",
        "kv":{"access":"","push_id":"3"}},
     {"ett":"1552735759451",
        "en":"active_background","kv":{"active_source":"2"}}]}
将生成的jar包log-collector-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷贝到hadoop101服务器上,
并同步到hadoop102的/opt/module路径下
[kris@hadoop101 module]$ xsync log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar
在hadoop102上执行jar程序
[kris@hadoop101 module]$ java -classpath log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.atguigu.appclient.AppMain  >/opt/module/test.log
在/tmp/logs路径下查看生成的日志文件
[kris@hadoop101 module]$ cd /tmp/logs/
[kris@hadoop101 logs]$ ls

Linux环境变量配置:

(1)修改/etc/profile文件:所有用户的Shell都有权使用这些环境变量。
(2)修改~/.bashrc文件:针对某一个特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。
(3)配置登录远程服务器立即source一下环境变量

日志生成集群启动脚本

[kris@hadoop101 bin]$ vim lg.sh 
#!/bin/bash
        for i in hadoop101 hadoop102
        do
            ssh $i "java -classpath /opt/module/logcollector-1.0-SNAPSHOT-jar-with-dependencies.jar com.atguigu.appclient.
AppMain >/opt/module/test.log &"
        done

修改脚本执行权限
[kris@hadoop101 bin]$ chmod +x lg.sh
启动脚本
[kris@hadoop101 module]$ lg.sh

集群时间同步修改脚本

在/home/kris/bin目录下创建脚本dt.sh
[kris@hadoop101 bin]$ vim dt.sh
#!/bin/bash
log_date=$1
for i in hadoop101 hadoop102 hadoop103
do
        ssh $i "sudo date -s $log_date"
done        
修改脚本执行权限
[kris@hadoop101 bin]$ chmod 777 dt.sh
启动脚本
[kris@hadoop101 bin]$ dt.sh 2019-2-10

集群所有进程查看脚本; 在/home/kris/bin目录下创建脚本xcall.sh

[kris@hadoop101 bin]$ vim xcall.sh
#!/bin/bash
for i in hadoop101 hadoop102 hadoop103
do
        echo ----------$i------------
        ssh $i "$*"
done

修改脚本执行权限
[kris@hadoop101 bin]$ chmod 777 xcall.sh
启动脚本
[kris@hadoop101 bin]$ xcall.sh jps

3-集群的搭建

数仓-集群环境搭建_第5张图片
Hadoop安装
https://www.cnblogs.com/shengyang17/p/10274391.html

Zookeeper安装
https://www.cnblogs.com/shengyang17/p/10325484.html

Flume安装
https://www.cnblogs.com/shengyang17/p/10405979.html

Kafka安装
https://www.cnblogs.com/shengyang17/p/10443115.html

Kafka Manager安装
https://www.cnblogs.com/shengyang17/p/10459101.html

Hive&Mysql的安装
https://www.cnblogs.com/shengyang17/p/10372242.html

你可能感兴趣的:(数据挖掘)