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

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

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

1、电商数据(数据源)

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

1.1、MySQL 数据库

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

1)、用户表:tbl_users
2)、订单数据表:tbl_orders
3)、订单商品表:tbl_goods
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功能描述:

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

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

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

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

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

其一、直接导入Put方式

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

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

缺点:

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

Bulkload过程主要包括三部分:

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

扩展资料:

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

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

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

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

编写应用开发流程如下:

1、对待写入的数据按Key值构造util.TreeMap 树结构。目的是按Key值构造匹配Hbase 的排序结构
2、转换成RDD,使用repartitionAndSortWithinPartitions算子 对Key值分区并排序
3、调用RDD的saveAsNewAPIHadoopFile 算子,生成HFile文件
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表中

样例数据:

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

  1. 大数据用户画像项目实战 ETL数据抽取

    一.课程介绍 一个基于规则的大数据用户画像项目为什么要选这样一个项目:1.典型的批量计算场景2.基于规则.涵盖大数据批量处理的各个典型场景3.可视化.所有控制流程全程可视化4.可扩展.通过集成更多的计 ...

  2. 网易大数据用户画像实践

    [与数据同行]已开通综合.数据仓库.数据分析.产品经理.数据治理及机器学习六大专业群,加微信号frank61822701 为好友后入群.新开招聘交流群,请关注[与数据同行]公众号,后台回复" ...

  3. 大数据用户画像系统架构设计

    文章目录 一.用户画像数据仓库搭建.数据抽取部分 二.大数据平台.用户画像集市分层设计.处理 三.离线计算部分 四.实时计算部分 五.Solr/ES搜索引擎部分 六.Java Web毫秒级实时用户画像 ...

  4. 什么是用户画像?金融行业大数据用户画像实践 [

    什么是用户画像?金融行业大数据用户画像实践 [复制链接]       电梯直达 楼主 发表于 昨天 14:36 | 只看该作者 | 只看大图 大数据系列零基础由入门到实战视频 本帖最后由 丫丫 于 2 ...

  5. 看完秒懂大数据用户画像!

    来自:网络 什么是用户画像? 用户画像(User Profile),作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准.快速地分析用户行为习惯.消费习惯等重要信息,提供了足够的数据基础, ...

  6. 大数据用户画像之基本概念(一)

    什么是大数据用户画像? 大数据用户画像指的是基于大数据技术和算法,对用户进行多维度的数据分析和挖掘,从而构建用户的详细描述和分析模型. 通过分析用户的 基本信息.消费行为.兴趣爱好.社交行为.地理位置 ...

  7. 用户画像系列——什么是用户画像?金融行业大数据用户画像实践

    进入移动互联网时代之后,金融业务地域限制被打破.金融企业没有固定业务区域,金融服务面对所有用户是平的. 金融消费者逐渐年轻化,80.90后成为客户主力,他们的消费意识和金融意识正在增强.金融服务正在从 ...

  8. python用户画像_大数据-用户画像DMP

    描述 大数据-用户画像DMP --小树老师 更多好课 大数据用户画像系统课程一.项目概述目前推广平台仅在投放端提供了有限的定向能力,广告主没有足够的流量抓手,无法满足大中型广告主的营销目标.画像系统提 ...

  9. 大数据用户画像技术原理和实践

    在大数据时代,机器要学会从比特流中解读用户,构建用户画像就变得尤其重要.本文介绍了用户画像的理论和实践,以及在实际中的应用.如何根据用户画像进行精准营销?将用户画像应用于个性化推荐?一起来寻找答案吧~ ...

最新文章

  1. Linux环境HBase安装与使用
  2. 将 SqlDataReader 类用于快速只进数据游标
  3. 智驾汽车MAXIEYE 招聘|SLAM、深度学习、融合、规划控制工程师等岗位(校招/实习)...
  4. 如何构建识别图像中字符的自动程序?一文解读OCR与HTR
  5. outlook qr码在哪里_明日方舟兑换码在哪里输入 附1200合成玉兑换码
  6. ArcGis辅助编号(半自动)功能的插件式实现
  7. wkhtmltopdf:wkhtmltopdf(将html转换成pdf的利器)简介、安装、使用方法详细攻略
  8. 下列不是python对文件的写操作方法的是_Python—文件读写操作
  9. 【CF961G】Partitions(第二类斯特林数)
  10. ART虚拟机 _ Java对象和类的内存结构,java中级面试题库weixin
  11. 华为服务器怎么查看系统日志,查询系统操作日志(operationlog)
  12. 当机器人具有自我知觉,并能自适应环境,真的不可怕吗?
  13. mysql 索引使用不当_MySQL笔记:select默认使用不当索引导致的巨大性能损失问题_MySQL...
  14. 南阳理工ACM 第71题
  15. 闲谈:渗透测试-红队版
  16. IT战略规划与企业架构
  17. 金字塔原理——表达的逻辑
  18. 杭电acm2012 素数判定
  19. Java 中的 IO 和 NIO
  20. 005_Python字符串练习_[吉比特校招编程题]字母数字混合排序

热门文章

  1. node的process
  2. linux objdump 函数,objdump命令
  3. 小鑫の日常系列故事(二)——石头剪子布 SDUT
  4. 东南大学新增人工智能学硕!计算机科学与工程学院
  5. 资讯|MIUI11正式版推送12款小米手机
  6. 软件设计师 资料 下载
  7. 软件工程专业的“乐趣“
  8. bpmn基础使用(一)
  9. 美国有史以来最著名5大黑帽黑客和5大白帽黑客
  10. pip install安装软件包报错:Requirement already satisfied