一、电商项目的大致流程

1.1 电商业务表结构


本电商数仓系统涉及到的业务数据表结构关系。这 24 个表以订单表、用户表、SKU 商品表、活动表和优惠券表为中心,延伸出了优惠券领用表、支付流水表、活动订单表、订单详情表、订单状态表、商品评论表、编码字典表退单表、SPU 商品表等,用户表提供用户的详细信息,支付流水表提供该订单的支付详情,订单详情表提供订单的商品数量等情况,商品表给订单详情表提供商品的详细信息。本次讲解只以此 24 个表为例,实际项目中,业务数据库中表格远远不止这些。


大数据-业务数据采集(四)_hdfs

二、业务数据生成

2.1 数据导入

大数据-业务数据采集(四)_hdfs_02

csdn上已经上传了资源

大数据-业务数据采集(四)_mysql_03

将sql导入,这里注意的是mysql版本最好选用mysql5.7的版本,不要高版本,会出现一些问题,如果想自己多尝试解决,可以使用8的版本

sql导入之后:

大数据-业务数据采集(四)_sqoop_04

2.2 生成业务数据

生成业务日志


  • 在 hadoop102 的/opt/module/目录下创建 db_log 文件夹
  • 把 gmall2020-mock-db-2020-04-01.jar 和 application.properties 上 传 到 hadoop102 的
    /opt/module/db_log 路径上。
  • 修改 application.properties文件

logging.level.root=info
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.109.135:3306/gmall?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=gmall
spring.datasource.password=gmall
logging.pattern.console=%m%n
mybatis-plus.global-config.db-config.field-strategy=not_null
#业务日期
mock.date=2020-06-18
#是否重置
mock.clear=0
#生成新用户数量
mock.user.count=100
#男性比例
mock.user.male-rate=20
#用户数据变化概率
mock.user.update-rate:20
#收藏取消比例
mock.favor.cancel-rate=10
#收藏数量
mock.favor.count=100
#购物车数量
mock.cart.count=30
#每个商品最多购物个数
mock.cart.sku-maxcount-per-cart=3
#购物车来源 用户查询,商品推广,智能推荐, 促销活动
mock.cart.source-type-rate=60:20:10:10
#用户下单比例
mock.order.user-rate=95
#用户从购物中购买商品比例
mock.order.sku-rate=70
#是否参加活动
mock.order.join-activity=1
#是否使用购物券
mock.order.use-coupon=1
#购物券领取人数
mock.coupon.user-count=1000
#支付比例
mock.payment.rate=70
#支付方式 支付宝:微信 :银联
mock.payment.payment-type=30:60:10
#评价比例 好:中:差:自动
mock.comment.appraise-rate=30:10:10:50
#退款原因比例:质量问题 商品描述与实际描述不一致 缺货 号码不合适 拍错 不想买了 其他
mock.refund.reason-rate=30:10:20:5:15:5:5

注意: 这里需要修改数据库连接的一些信息,和生成数据的时间

  • 生成数据
java -jar gmall2020-mock-db-2020-04-01.jar

大数据-业务数据采集(四)_hadoop_05

大数据-业务数据采集(四)_数据_06

原始数据就准备好了

三、sqoop安装及数据导入HDFS

3.1 sqoop安装及配置

3.1.1 下载并解压


  1. 下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
  2. 上传安装包 sqoop-1.4.7.bin hadoop-2.6.0.tar.gz 到 hadoop102 的/opt/software 路径中
  3. 解压 sqoop 安装包到指定目录,如:
    大数据-业务数据采集(四)_hadoop_07

3.1.2 修改配置文件

  1. 进入到/opt/module/sqoop/conf 目录,重命名配置文件
mv sqoop-env-template.sh sqoop-env.sh
  1. 修改配置文件
vim sqoop-env.sh

增加一下内容

export HADOOP_COMMON_HOME=/opt/module/hadoop-3.1.3 export HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3 export HIVE_HOME=/opt/module/hive
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.5.7 export ZOOCFGDIR=/opt/module/zookeeper-3.5.7/conf
  1. 拷贝JDBC 驱动
    1)将 mysql-connector-java-5.1.48.jar 上传到/opt/software 路径
    2)进入到/opt/software/路径,拷贝 jdbc 驱动到 sqoop 的 lib 目录下。

3.1.3 验证Sqoop

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

[root@hadoop102 sqoop]$ bin/sqoop help

出现一些 Warning 警告(警告信息已省略),并伴随着帮助命令的输出:

大数据-业务数据采集(四)_hadoop_08

3.1.4 测试sqoop连接数据库

bin/sqoop list-databases --connect jdbc:mysql://192.168.109.135:3306/ --username gmall --password gmall

大数据-业务数据采集(四)_hadoop_09

3.2 同步策略

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


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

3.2.1 全量同步策略

大数据-业务数据采集(四)_hdfs_10

3.2.2 增量同步策略

大数据-业务数据采集(四)_hdfs_11

3.2.3 新增及变化策略

大数据-业务数据采集(四)_数据_12

3.2.4 特殊策略

某些特殊的维度表,可不必遵循上述同步策略。


  1. 客观世界维度
    没变化的客观世界的维度(比如性别,地区,民族,政治成分,鞋子尺码)可以只存一份固定值。
  2. 日期维度
    日期维度可以一次性导入一年或若干年的数据。
  3. 地区维度省份表、地区表

3.3 业务数据导入HDFS

3.3.1 分析表同步策略

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

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

大数据-业务数据采集(四)_数据_13

3.3.2 脚本编写

在/usr/bin目录下创建:mysql_to_hdfs.sh

#! /bin/bash
sqoop=/opt/module/sqoop/bin/sqoop if [ -n "$2" ] ;then
do_date=$2 else
do_date=`date -d '-1 day' +%F`
fi
#
import_data(){
$sqoop import \
--connect jdbc:mysql://192.168.109.135:3306/gmall \
--username gmall \
--password gmall \
--target-dir /origin_data/gmall/db/$1/$do_date \
--delete-target-dir \
--query "$2 and \$CONDITIONS" \
--num-mappers 1 \
--fields-terminated-by '\t' \
--compress \
--compression-codec lzop \
--null-string '\\N' \
--null-non-string '\\N'

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer
/origin_data/gmall/db/$1/$do_date
}

import_order_info(){
import_data order_info "select
id,
final_total_amount,
order_status,
user_id,
out_trade_no,
create_time,
operate_time,
province_id,
benefit_reduce_amount,
original_total_amount,
feight_fee
from order_info
where (date_format(create_time,'%Y-%m-%d')='$do_date' or date_format(operate_time,'%Y-%m-%d')='$do_date')"
}
...

大数据-业务数据采集(四)_hadoop_14

这里面有所有的脚本,这里就不粘贴了


说明 1:
[ -n 变量值 ] 判断变量的值,是否为空
– 变量的值,非空,返回 true
– 变量的值,为空,返回 false



说明 2:
查看 date 命令的使用,[root@hadoop102 ~]$ date --help


  • 修改脚本权限
[atguigu@hadoop102 bin]$ chmod 777 mysql_to_hdfs.sh
  • 初次导入
[root@hadoop102 bin]$ mysql_to_hdfs.sh first 2020-06-18
  • 每日导入
[root@hadoop102 bin]$ mysql_to_hdfs.sh all 2020-06-19

然后就会开始执行map-reduce程序

大数据-业务数据采集(四)_hdfs_15

这样就导入成功了

总结

这个环节就是将所有的业务数据库里面的数据导入到hdfs