当前位置:   article > 正文

大数据用户画像实战之业务数据调研及ETL

数据调研及etl

整个用户画像(UserProfile)项目中,数据、业务及技术流程图如下所示:

  1. 其中数据源存储在业务系统数据库:MySQL 数据库中,采用SQOOP全量/增量将数据抽取到
  2. HDFS(Hive表中),通过转换为HFile文件加载到HBase表。
  3. 1)、编写MapReduce程序
  4. 2)、编写Spark程序(推荐使用Spark编程)

  1. 1)、为什么将【订单相关数据:订单数据和订单商品数据】存储到HBase表中????
  2. 特点:数据量比较大
  3. 存储HBase:存储海量数据、查询检索
  4. 2)、实际项目来说【访问行为日志】数据存储到Hive表中
  5. 数据仓库分层:
  6. ODS层、DW层和APP层
  7. 3)、特殊:模拟的所有业务数据存储在RDBMs表中,为了简化整个项目开发,重点在于标签开发,将所
  8. 有数据迁移到HBase表中。

1、电商数据(数据源)

所有的业务数据,都是编写程序模拟产生的,直接保存到MySQL数据库的表中。

1.1、MySQL 数据库

在数据库【 tags_dat 】中包含四张表:

  1. 1)、用户表:tbl_users
  2. 2)、订单数据表:tbl_orders
  3. 3)、订单商品表:tbl_goods
  4. 4)、行为日志表:tbl_logs

1.2、表的结构

电商系统中四张表的结构如下,数据存储在MySQL数据库中( 为了方便模拟业务数据,存

储MySQL表 )。

1.2.1、数据库: tags_dat

数据库 tags_dat ,构建语句如下:

1.2.2、会员信息表: tbl_users

电商网站中用户基本信息表,总共38个字段,除去主键ID外共37个字段信息。

此表中目前的数据量为:950条

1.2.3、订单数据表: tbl_orders

电商网站中用户购买物品下单的订单数据,总共112个字段,记录每个订单详细信息。

1.2.4、订单商品信息表: tbl_goods

电商网站中订单商品goods基本信息表,总共97个字段,除去主键ID外96个字段。

此表中目前的数据量为:125463条

1.2.5、行为日志表:tbl_logs

电商网站中用户浏览网站访问行为日志数据(浏览数据),总共11个字段,此类数据属于最多

此表中目前的数据量为:376983条

1.3、Hive 数据仓库

将MySQL数据库中表的数据导入到Hive表中,以便加载到HBase表中。

启动HiveMetastore服务和HiveServer2服务,使用beeline命令行连接,相关命令如下:

1.3.1、创建表

创建Hive中数据库Database:

根据MySQL数据库表在Hive数据仓库中构建相应的表:

  • 用户信息表: tbl_users

  • 订单数据表: tbl_orders

  • 商品表: tbl_goods

  • 行为日志表: tbl_logs

1.3.2、导入数据至Hive表

使用Sqoop将MySQL数据库表中的数据导入到Hive表中(本质就是存储在HDFS上),具体命

令如下:

用户信息表: tbl_users

订单数据表: tbl_orders

商品表: tbl_goods

行为日志表: tbl_logs

2、数据导入(Import)

将MySQL表中业务数据导入大数据平台中如HBase表,方案如下所示:

2.1、HBase 表设计

电商网站中各类数据(用户信息数据、用户访问日志数据及用户订单数据)存储到HBase表 中,便于检索和分析构建电商用户画像,有如下几张表:

用户基本信息: tbl_users

HBase表中有1个Region:

用户订单数据: tbl_orders ,共120125条

HBase 表中有两个Region:

订单商品数据: tbl_goods

行为日志数据: tbl_logs ,共376983条数据

HBase 表中有两个Region:

2.2、Sqoop直接导入

可以使用SQOOP将MySQL表的数据导入到HBase表中,指定 表的名称、列簇及RowKey ,范例如下所示:

参数含义解释:

知识拓展:如何使用SQOOP进行增量导入数据至HBase表,范例命令如下:

2.3、HBase ImportTSV

ImportTSV功能描述:

  1. 将tsv(也可以是csv,每行数据中各个字段使用分隔符分割)格式文本数据,加载到HBase表中。
  2. 1)、采用Put方式加载导入
  3. 2)、采用BulkLoad方式批量加载导入

使用如下命令,查看HBase官方自带工具类使用说明:

执行上述命令提示如下信息:

其中 importtsv 就是将文本文件(比如CSV、TSV等格式)数据导入HBase表工具类,使用说明如下:

分别演示采用直接Put方式和HFile文件方式将数据导入HBase表,命令如下:

其一、直接导入Put方式

上述命令本质上运行一个MapReduce应用程序,将文本文件中每行数据转换封装到Put对象,然后插入到HBase表中。

其二、转换为HFile文件,再加载至表

缺点:

  1. 1)、ROWKEY不能是组合主键
  2. 只能是某一个字段
  3. 2)、当表中列很多时,书写-Dimporttsv.columns值时很麻烦,容易出错

2.4、HBase Bulkload

在大量数据需要写入HBase时,通常有 put方式和bulkLoad 两种方式。 1、put方式为单条插入,在put数据时会先将数据的更新操作信息和数据信息 写入WAL , 在写入到WAL后, 数据就会被放到MemStore中 ,当MemStore满后数据就会被 flush到磁盘 (即形成HFile文件) ,在这种写操作过程会涉及到flush、split、compaction等操作,容易造 成节点不稳定,数据导入慢,耗费资源等问题,在海量数据的导入过程极大的消耗了系统 性能,避免这些问题最好的方法就是使用BulkLoad的方式来加载数据到HBase中。

2、BulkLoader利用HBase数据按照HFile格式存储在HDFS的原理,使用MapReduce直接批量生成HFile格式文件后,RegionServers再将HFile文件移动到相应的Region目录下

  1. 1)、Extract,异构数据源数据导入到 HDFS 之上。
  2. 2)、Transform,通过用户代码,可以是 MR 或者 Spark 任务将数据转化为 HFile。
  3. 3)、Load,HFile 通过 loadIncrementalHFiles 调用将 HFile 放置到 Region 对应的
  4. HDFS 目录上,该过程可能涉及到文件切分。
  5. 1、不会触发WAL预写日志,当表还没有数据时进行数据导入不会产生Flush和Split。
  6. 2、减少接口调用的消耗,是一种快速写入的优化方式。
  7. Spark读写HBase之使用Spark自带的API以及使用Bulk Load将大量数据导入HBase:
  8. https://www.jianshu.com/p/b6c5a5ba30af

Bulkload过程主要包括三部分:

  1. 1、从数据源(通常是文本文件或其他的数据库)提取数据并上传到HDFS。
  2. 抽取数据到HDFS和Hbase并没有关系,所以大家可以选用自己擅长的方式进行。
  3. 2、利用MapReduce作业处理事先准备的数据 。
  4. 这一步需要一个MapReduce作业,并且大多数情况下还需要我们自己编写Map函数,而Reduce
  5. 函数不需要我们考虑,由HBase提供。
  6. 该作业需要使用rowkey(行键)作为输出Key;KeyValue、Put或者Delete作为输出Value
  7. MapReduce作业需要使用HFileOutputFormat2来生成HBase数据文件。
  8. 为了有效的导入数据,需要配置HFileOutputFormat2使得每一个输出文件都在一个合适的区
  9. 域中。为了达到这个目的,MapReduce作业会使用Hadoop的TotalOrderPartitioner类根据表的
  10. key值将输出分割开来。
  11. HFileOutputFormat2的方法configureIncrementalLoad()会自动的完成上面的工作。
  12. 3、告诉RegionServers数据的位置并导入数据。
  13. 这一步是最简单的,通常需要使用LoadIncrementalHFiles(更为人所熟知是
  14. completebulkload工具),将文件在HDFS上的位置传递给它,它就会利用RegionServer将数据导
  15. 入到相应的区域。

扩展资料:

  1. HBase Bulkload 实践探讨:
  2. https://mp.weixin.qq.com/s?
  3. __biz=MzAxOTY5MDMxNA==&mid=2455760296&idx=1&sn=1b3a22e9408c8da56eceb1da6c82a
  4. fd4&chksm=8c686b8dbb1fe29b93f58d68453d2912061090170d2aedf405bcc42085f613a500
  5. a5961c705d&mpshare=1&scene=1&srcid=&sharer_sharetime=1576666741316&sharer_sh
  6. areid=ff29a1f4969433ad06b0e97aed8610cb&key=1528f3467aaa6c49e329b76e6d972c07a
  7. 60af4486519558312dbee8ffd84970262b22b7bebb2a3f1e9973ea0be66f1da80ee5b243f87e
  8. 376e2f6716fb7b56283cd83605b3209f92b5fb1d9f8196ad5b8&ascene=1&uin=MjY2MDcwNTg
  9. wNQ%3D%3D&devicetype=Windows+10&version=62070158&lang=zh_CN&exportkey=A2zIu%
  10. 2B6h%2BOWb63wHEGVfjNw%3D&pass_ticket=6qtjVsuzNFWXgqT9TeVtBEN4F7%2FE6CB5am02k
  11. 9rqTMvtTFDfGDildp92S%2BeO77jb

2.4.1、编写MapReduce导入

将MySQL表的数据先导入到HDFS文件中(比如TSV格式),编写MapReduce将文本文件数据

转换为HFile文件,加载到HBase表中。

第一步、Hive中创建表

第二步、导入MySQL表数据到Hive表

第三步、编写MapReduce导入数据至HBase表

其一、创建HBase 表,设置预分区

create 'tbl_logs', 'detail', SPLITS => ['49394']

其二、工具类Constants,定义常量值

其三、MapReduce程序(本地运行) 使用Java语言,编写MapReduce程序,读取Hive表中数据文件,使用

HFileOutputFormat2输出格式,保存数据至HFile文件,再加载到HBase表中。

2.4.2、编写Spark 程序导入

企业中大规模数据存储于HBase背景:

  1. 项目中有需求,要频繁地、快速地向一个表中初始化数据。因此如何加载数据,如何提高速度是需要解
  2. 决的问题。
  3. 一般来说,作为数据存储系统会分为检索和存储两部分。检索是对外暴露数据查询接口。存储一是要实
  4. 现数据按固定规则存储到存储介质中(如磁盘、内存等),另一方面还需要向外暴露批量装载的工具。
  5. 如DB2的 db2load 工具,在关闭掉日志的前提下,写入速度能有显著提高。

HBase数据库提供批量导入数据至表功能,相关知识点如下:

  1. 1、Hbase 中LoadIncrementalHFiles 支持向Hbase 写入HFile 文件
  2. 2、写入的HFile 文件要求是排序的(rowKey,列簇,列)
  3. 3、关键是绕过Hbase regionServer,直接写入Hbase文件
  4. 4、Spark RDD的repartitionAndSortWithinPartitions 方法可以高效地实现分区并排序
  5. 5、JAVA util.TreeMap 是红黑树的实现,能很好的实现排序的要求

编写应用开发流程如下:

  1. 1、对待写入的数据按Key值构造util.TreeMap 树结构。目的是按Key值构造匹配Hbase 的排序结构
  2. 2、转换成RDD,使用repartitionAndSortWithinPartitions算子 对Key值分区并排序
  3. 3、调用RDD的saveAsNewAPIHadoopFile 算子,生成HFile文件
  4. 4、调用Hbase: LoadIncrementalHFiles 将HFile文件Load 到Hbase 表中

1)、批量加载数据类:HBaseBulkLoader,代码如下:

2)、将HBase数据库中不同表的字段信息封装object对象中,代码如下:

运行此应用程序时,需传递相关参数:

Spark Bulkload常见错误解析:

3、用户画像数据

基于电商数据,构建各个用户画像信息,开发项目时,设计的数据库和表(简易版本)如下:

3.1、标签模型表

用户画像平台将标签基本信息数据存储至MySQL数据库中,其中每个标签Tag的构建对应一个模型Model,模型数据同样存储至MySQL数据库中。

数据库: profile_tags

标签表: tbl_basic_tag

模型表: tbl_model

3.2、画像标签表

用户画像平台中用户的每个标签数据存储至HBase表中,此外在Solr中建立标签索引数据, 方便依据标签进行检索查询。

构建用户表: "tbl_profile" ,存储在HBase表中

样例数据:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/874973
推荐阅读
相关标签
  

闽ICP备14008679号