• 数仓4.0(二)------ 业务数据采集平台


    目录

    一:电商业务简介

    1.1 电商业务流程

    1.2 电商常识 

     二:业务数据采集模块

    2.1 安装MySQL及配置

    2.2 业务数据生成

    2.2.1 连接Mysql以及建表

    2.2.2 生成业务数据

    2.3 安装Sqoop

    2.3.1 安装

    2.3.2 修改配置文件

    2.3.3 拷贝JDBC驱动

    2.3.4 验证Sqoop

    2.3.5 测试Sqoop是否能够成功连接数据库

    2.3.6 Sqoop基本使用

    2.4 同步策略

    2.4.1 全量同步策略

    2.5 业务数据导入HDFS

    2.5.1 分析表同步策略

    2.5.2 业务数据首日同步脚本 

    2.5.3 业务数据每日同步脚本

    2.5.4 项目经验

    三:数据环境准备 

    3.2 Hive元数据配置到MySQL

    3.2.1 拷贝驱动

    3.2.2 配置Metastore到MySQL

    3.3 启动Hive

    3.3.1 初始化元数据库

    3.3.2 启动Hive客户端


    一:电商业务简介

    1.1 电商业务流程

    电商的业务流程可以以一个普通用户的浏览足迹为例进行说明,用户点开电商首页开始浏览,可能会通过分类查询也可能通过全文搜索寻找自己中意的商品,这些商品无疑都是存储在后台的管理系统中的。

    当用户寻找到自己中意的商品,可能会想要购买,将商品添加到购物车后发现需要登录,登录后对商品进行结算,这时候购物车的管理和商品订单信息的生成都会对业务数据库产生影响,会生成相应的订单数据和支付数据。

    订单正式生成之后,还会对订单进行跟踪处理,直到订单全部完成。

    电商的主要业务流程包括用户前台浏览商品时的商品详情的管理,用户商品加入购物车进行支付时用户个人中心&支付服务的管理,用户支付完成后订单后台服务的管理,这些流程涉及到了十几个甚至几十个业务数据表,甚至更多。

    1.2 电商常识 

    SKU:

    SKU = Stock Keeping Unit(库存量基本单位)。现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号。

    SPU:

    SPUStandard Product Unit):商品信息聚合的最小单位,是一组可复用、易检索的标准化信息集合。

    例如:iPhoneX手机就是SPU。一台银色、128G内存的、支持联通网络的iPhoneX,就是SKU。

    平台属性:

    销售属性:

     二:业务数据采集模块

     

    2.1 安装MySQL及配置

    由于篇幅原因,这里就不记录安装MySQL的流程了。

    2.2 业务数据生成

    2.2.1 连接Mysql以及建表

     通过MySQL可视化客户端(我用的是Navicat)连接数据库。

    1)通过Navicat创建数据库

    2)设置数据库名称为gmall,编码为utf-8排序规则为utf8_general_ci

    3)导入数据库结构脚本(gmall.sql

    注意:完成后,要记得右键,刷新一下对象浏览器,就可以看见数据库中的表了。

    2.2.2 生成业务数据

    1)在hadoop102的/opt/module/目录下创建db_log文件夹

    2)把gmall2020-mock-db-2021-01-22.jar和application.properties上传到hadoop102的/opt/module/db_log路径上。

    3)根据需求修改application.properties相关配置(主要修改主机名、数据库名、用户名及密码),这里注意,在第一次生成业务数据的时候,要将重置的配置修改为1,后续不要重置,所以改成0

     

     4)并在该目录下执行,如下命令,生成2020-06-14日期数据

    [axing@hadoop102 db_log]$ java -jar gmall2020-mock-db-2021-01-22.jar

    5)查看gmall数据库,观察是否有2020-06-14的数据出现

    2.3 安装Sqoop

    2.3.1 安装

    1)上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到hadoop102的/opt/software路径中

    2)解压sqoop安装包到指定目录

    1. [axing@hadoop102 software]$ tar -zxf
    2. sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/

    5)解压sqoop安装包到指定目录

    [axing@hadoop102 module]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop

    2.3.2 修改配置文件

    1)进入到/opt/module/sqoop/conf目录,重命名配置文件

    [axing@hadoop102 conf]$ mv sqoop-env-template.sh sqoop-env.sh

    2)修改配置文件

    [axing@hadoop102 conf]$ vim sqoop-env.sh 

    增加如下内容

    1. export HADOOP_COMMON_HOME=/opt/module/hadoop-3.1.3
    2. export HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3
    3. export HIVE_HOME=/opt/module/hive
    4. export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7
    5. export ZOOCFGDIR=/opt/module/zookeeper-3.5.7/conf

    2.3.3 拷贝JDBC驱动

    1)将mysql-connector-java-5.1.48.jar 上传到/opt/software路径

    2)进入到/opt/software/路径,拷贝jdbc驱动到sqoop的lib目录下。

    1. [axing@hadoop102 software]$ cp mysql-connector-java-5.1.48.jar
    2. /opt/module/sqoop/lib/

    2.3.4 验证Sqoop

    (1)我们可以通过某一个command来验证sqoop配置是否正确:

    [axing@hadoop102 sqoop]$ bin/sqoop help

    2.3.5 测试Sqoop是否能够成功连接数据库

    1. [atguigu@hadoop102 sqoop]$ bin/sqoop list-databases --connect
    2. jdbc:mysql://hadoop102:3306/ --username root --password 000000

    2.3.6 Sqoop基本使用

    将mysql中user_info表数据导入到HDFS的/test路径

    1. bin/sqoop import \
    2. --connect jdbc:mysql://hadoop102:3306/gmall \
    3. --username root \
    4. --password 000000 \
    5. --table user_info \
    6. --columns id,login_name \
    7. --where "id>=10 and id<=30" \
    8. --target-dir /test \
    9. --delete-target-dir \
    10. --fields-terminated-by '\t' \
    11. --num-mappers 2 \
    12. --split-by id

    2.4 同步策略

    数据同步策略的类型包括:全量同步、增量同步、新增及变化同步、特殊情况

    • 全量表:存储完整的数据。
    • 增量表:存储新增加的数据。
    • 新增及变化表:存储新增加的数据和变化的数据。
    • 特殊表:只需要存储一次。

    2.4.1 全量同步策略

     2.4.2 增量同步策略

    2.4.3 新增及变化策略

    2.4.4 特殊策略 

    某些特殊的表,可不必遵循上述同步策略。例如某些不会发生变化的表(地区表,省份表,民族表)可以只存一份固定值。

    2.5 业务数据导入HDFS

    2.5.1 分析表同步策略

    在生产环境,个别小公司,为了简单处理,所有表全量导入。

    中大型公司,由于数据量比较大,还是严格按照同步策略导入数据。

    2.5.2 业务数据首日同步脚本 

    由于篇幅原因,就不列出脚本代码了

    2.5.3 业务数据每日同步脚本

    由于篇幅原因,就不列出脚本代码了

    2.5.4 项目经验

    Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用--input-null-string和--input-null-non-string两个参数。导入数据时采用--null-string和--null-non-string。

    三:数据环境准备 

    1)把apache-hive-3.1.2-bin.tar.gz上传到Linux的/opt/software目录下

    2)解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面

    3)修改apache-hive-3.1.2-bin.tar.gz的名称为hive

    4)修改/etc/profile.d/my_env.sh,添加环境变量,添加完后source一下,使环境变量生效

    1. 添加内容
    2. #HIVE_HOME
    3. export HIVE_HOME=/opt/module/hive
    4. export PATH=$PATH:$HIVE_HOME/bin

    5)解决日志Jar包冲突,进入/opt/module/hive/lib目录

    3.2 Hive元数据配置到MySQL

    3.2.1 拷贝驱动

    将MySQL的JDBC驱动拷贝到Hive的lib目录下

    1. [axing@hadoop102 lib]$ cp /opt/software/mysql-connector-java-5.1.27.jar
    2. /opt/module/hive/lib/

    3.2.2 配置Metastore到MySQL

    (1)在$HIVE_HOME/conf目录下新建hive-site.xml文件,并添加如下内容

    1. <configuration>
    2. <property>
    3. <name>javax.jdo.option.ConnectionURLname>
    4. <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=falsevalue>
    5. property>
    6. <property>
    7. <name>javax.jdo.option.ConnectionDriverNamename>
    8. <value>com.mysql.jdbc.Drivervalue>
    9. property>
    10. <property>
    11. <name>javax.jdo.option.ConnectionUserNamename>
    12. <value>rootvalue>
    13. property>
    14. <property>
    15. <name>javax.jdo.option.ConnectionPasswordname>
    16. <value>000000value>
    17. property>
    18. <property>
    19. <name>hive.metastore.warehouse.dirname>
    20. <value>/user/hive/warehousevalue>
    21. property>
    22. <property>
    23. <name>hive.metastore.schema.verificationname>
    24. <value>falsevalue>
    25. property>
    26. <property>
    27. <name>hive.server2.thrift.portname>
    28. <value>10000value>
    29. property>
    30. <property>
    31. <name>hive.server2.thrift.bind.hostname>
    32. <value>hadoop102value>
    33. property>
    34. <property>
    35. <name>hive.metastore.event.db.notification.api.authname>
    36. <value>falsevalue>
    37. property>
    38. <property>
    39. <name>hive.cli.print.headername>
    40. <value>truevalue>
    41. property>
    42. <property>
    43. <name>hive.cli.print.current.dbname>
    44. <value>truevalue>
    45. property>
    46. configuration>

    3.3 启动Hive

    3.3.1 初始化元数据库

    (1)登陆MySQL

    [axing@hadoop102 conf]$ mysql -uroot -p000000

    (2)新建Hive元数据库

    mysql> create database metastore;

    (3)初始化Hive元数据库

    [axing@hadoop102 conf]$ schematool -initSchema -dbType mysql -verbose

    3.3.2 启动Hive客户端

    (1)启动Hive客户端

    [axing@hadoop102 hive]$ bin/hive

    (2)查看一下数据库

    1. hive (default)> show databases;
    2. OK
    3. database_name
    4. default

  • 相关阅读:
    exit()函数、_exit()函数 和 _Exit()函数
    类似 MS Project 的项目管理工具有哪些
    为什么原生IP可以降低Google play账号关联风险?企业号解决8.3/10.3账号关联问题?
    java毕业设计网站swing mysql实现的仓库商品管理系统[包运行成功]
    Go 锁演进
    Reset信号如何同步?
    LeetCode155:最小栈,最简单的中等难度题,时间击败100%,内存也低于官方
    Android使用google Firebase Cloud Messaging的云推送发送通知
    使用$options初始化
    docker学习2-基本指令
  • 原文地址:https://blog.csdn.net/JiaXingNashishua/article/details/126128177