文章目錄
- 一、系統介紹
- 二、電商資料
- 2.1、MySQL資料庫
- 2.2、Hive 資料倉庫
- 2.2.1、創建表
- 2.2.1.1、用戶資訊表: tbl_users
- 2.2.1.2、訂單資料表: tbl_orders
- 2.2.1.3、商品表: tbl_goods
- 2.2.1.4、行為日志表: tbl_logs
- 2.2.2、匯入資料至Hive表
- 2.2.2.1、用戶資訊表: tbl_users
- 2.2.2.2、訂單資料表: tbl_orders
- 2.2.2.3、商品表: tbl_goods
- 2.2.2.4、行為日志表: tbl_logs
- 2.3、資料匯入(Import)到Hbase
- 2.3.1、HBase 表設計
- 2.3.2、Sqoop直接匯入
- 2.3.3、importtsv
- 2.3.4、HBase Bulkload(推薦)
- 2.3.4.1、注意
一、系統介紹
整個用戶畫像(UserProfile)專案中,資料、業務及技術流程圖如下所示:

其中資料源存盤在業務系統資料庫:MySQL 資料庫中,采用SQOOP全量/增量將資料抽取到HDFS(Hive表中),通過轉換為HFile檔案加載到HBase表,
- 1)、撰寫MapReduce程式
- 2)、撰寫Spark程式(推薦使用Spark編程)

1)、為什么將【訂單相關資料:訂單資料和訂單商品資料】存盤到HBase表中????
- 特點:資料量比較大
- 存盤HBase:存盤海量資料、查詢檢索
2)、實際專案來說【訪問行為日志】資料存盤到Hive表中
- 資料倉庫分層:
- ODS層、DW層和APP層
3)、特殊:模擬的所有業務資料存盤在RDBMs表中,為了簡化整個專案開發,重點在于標簽開發,將所
- 有資料遷移到HBase表中,
二、電商資料
2.1、MySQL資料庫
在資料庫【 tags_dat 】中包含四張表:
1)、用戶表:tbl_users
2)、訂單資料表:tbl_orders
3)、訂單商品表:tbl_goods
4)、行為日志表:tbl_logs

2.2、Hive 資料倉庫
將MySQL資料庫中表的資料匯入到Hive表中,以便加載到HBase表中,

2.2.1、創建表
創建Hive中資料庫Database:
CREATE DATABASE tags_dat;
根據MySQL資料庫表在Hive資料倉庫中構建相應的表:
2.2.1.1、用戶資訊表: tbl_users
sqoop create-hive-table \
--connect jdbc:mysql://chb1:3306/tags_dat \
--table tbl_users \
--username root \
--password 123456 \
--hive-table tags_dat.tbl_users \
--fields-terminated-by '\t' \
--lines-terminated-by '\n'
2.2.1.2、訂單資料表: tbl_orders
sqoop create-hive-table \
--connect jdbc:mysql://chb1:3306/tags_dat \
--table tbl_orders \
--username root \
--password 123456 \
--hive-table tags_dat.tbl_orders \
--fields-terminated-by '\t' \
--lines-terminated-by '\n'
2.2.1.3、商品表: tbl_goods
sqoop create-hive-table \
--connect jdbc:mysql://chb1:3306/tags_dat \
--table tbl_goods \
--username root \
--password 123456 \
--hive-table tags_dat.tbl_goods \
--fields-terminated-by '\t' \
--lines-terminated-by '\n'
2.2.1.4、行為日志表: tbl_logs
sqoop create-hive-table \
--connect jdbc:mysql://chb1:3306/tags_dat \
--table tbl_logs \
--username root \
--password 123456 \
--hive-table tags_dat.tbl_logs \
--fields-terminated-by '\t' \
--lines-terminated-by '\n'
2.2.2、匯入資料至Hive表
使用Sqoop將MySQL資料庫表中的資料匯入到Hive表中(本質就是存盤在HDFS上),具體命令如下:
2.2.2.1、用戶資訊表: tbl_users
/sqoop import \
--connect jdbc:mysql://chb1:3306/tags_dat \
--username root \
--password 123456 \
--table tbl_users \
--direct \
--hive-overwrite \
--delete-target-dir \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--hive-table tags_dat.tbl_users \
--hive-import \
--num-mappers 1
2.2.2.2、訂單資料表: tbl_orders
2.2.2.3、商品表: tbl_goods
2.2.2.4、行為日志表: tbl_logs
2.3、資料匯入(Import)到Hbase
將MySQL表中業務資料匯入大資料平臺中如HBase表,方案如下所示:

2.3.1、HBase 表設計
電商網站中各類資料(用戶資訊資料、用戶訪問日志資料及用戶訂單資料)存盤到HBase表中,便于檢索和分析構建電商用戶畫像,有如下幾張表:
create 'tbl_users','detail'
create 'tbl_orders','detail'
create 'tbl_goods','detail'
create 'tbl_logs', 'detail', SPLITS => ['189394']
2.3.2、Sqoop直接匯入
可以使用SQOOP將MySQL表的資料匯入到HBase表中,指定 表的名稱、列簇及RowKey ,范例如下所示:
sqoop import \
-D sqoop.hbase.add.row.key=true \
--connect jdbc:mysql://chb1:3306/tags_dat \
--username root \
--password 123456 \
--table tbl_users \
--hbase-create-table \
--hbase-table tbl_users \
--column-family detail \
--hbase-row-key id \
--num-mappers 2
引數含義解釋:
- 1、-D sqoop.hbase.add.row.key=true
- 是否將rowkey相關欄位寫入列族中,默認為false,默認情況下你將在列族中看不到任何rowkey中的欄位,注意,該引數必須放在import之后,
- 2、–hbase-create-table 如果hbase中該表不存在則創建
- 3、–hbase-table 對應的hbase表名
- 4、–hbase-row-key hbase表中的rowkey,注意格式
- 5、–column-family hbase表的列族
知識拓展:如何使用SQOOP進行增量匯入資料至HBase表,范例命令如下:
sqoop import \
-D sqoop.hbase.add.row.key=true \
--connect jdbc:mysql://chb1:3306/tags_dat \
--username root \
--password 123456 \
--table tbl_logs \
--hbase-create-table \
--hbase-table tag_logs \
--column-family detail \
--hbase-row-key id \
--num-mappers 20 \
--incremental lastmodified \
--check-column log_time \
--last-value '2019-08-13 00:00:00' \
相關增量匯入引數說明:
- 1、–incremental lastmodified 增量匯入支持兩種模式 append 遞增的列;lastmodified
時間戳, - 2、–check-column 增量匯入時參考的列
- 3、–last-value 最小值,這個例子中表示匯入2019-08-13 00:00:00到今天的值
使用SQOOP匯入資料到HBase表中,有一個限制:
??需要指定RDBMs表中的某個欄位作為HBase表的ROWKEY,如果HBase表的ROWKEY為多個欄位組合,就無法指定,所以此種方式有時候不能使用,
2.3.3、importtsv
缺點
- 1)、ROWKEY不能是組合主鍵
- 只能是某一個欄位
- 2)、當表中列很多時,書寫-Dimporttsv.columns值時很麻煩,容易出錯
2.3.4、HBase Bulkload(推薦)
完整代碼
2.3.4.1、注意
- 1、生成hfile, rowkey必須有序
- 2、hase-2.0.2之后,對列也要求有序
- 注意 LoadIncrementalHFiles 的包變化, HFileOutputFormat2· 的包變化
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/281211.html
標籤:其他
上一篇:Doris同步多庫多表
