CDA持证人阿涛哥

2021-12-28   阅读量: 375

sqoop 用户画像

如何使用Sqoop将Hive中的标签数据迁移到MySQL中?

扫码加入数据分析学习群


Sqoop是一个用来将Hadoop和关系型数据库中的数据相互迁移 的 工 具 。 它 可 以 将 一 个 关 系 型 数 据 库 ( 如 MySQL Oracle PostgreSQL等)中的数据导入HadoopHDFS中,也可以将HDFS 中的数据导入关系型数据库中。


下面通过一个案例来讲解如何使用SqoopHive中的标签数据迁移到MySQL中。


电商、保险、金融等公司的客服部门的日常工作内容之一是对目标用户群(如已流失用户、高价值用户等)进行主动外呼,以此召回用户来平台进行购买或复购。这里可以借助用户画像系统实现该功 能。 Hive中存储的与用户身份相关的数据同步到客服系统中,首先 Hive 中 建 立 一 张 记 录 用 户 身 份 相 关 信 息 的 表 dw.userprofifile_userservice_all)。设置日期分区以满足按日期选取当前人群的需要。


CREATE TABLE `dw.userprofile_userservice_all `(

`user_id` string COMMENT 'userid',

`user_sex` string COMMENT 'user_sex',

`city` string COMMENT 'city',

`payid_money` string COMMENT 'payid_money',

`payid_num` string COMMENT 'payid_num',

`latest_product` string COMMENT 'latest_product',

`date` string COMMENT 'date',

`data_status` string COMMENT 'data_status')

COMMENT 'userid 用户客服数据'

PARTITIONED BY ( `data_date` string COMMENT '数据日期')


MySQL 中 建 立 一 张 用 于 接 收 同 步 数 据 的 表 userservice_data)。


CREATE TABLE `userservice_data` (

`user_id` varchar(128) DEFAULT NULL COMMENT '用户id',

`user_sex` varchar(128) NOT NULL COMMENT '用户性别',

`city` varchar(128) DEFAULT NULL COMMENT '城市',

`payid_money` varchar(128) DEFAULT NULL COMMENT '消费金额',

`payid_num` varchar(128) DEFAULT NULL COMMENT '消费次数',

`latest_product` varchar(128) DEFAULT NULL COMMENT '最近购买产品',

`date` varchar(64) NOT NULL COMMENT '传输日期',

`data_status` varchar(64) DEFAULT '0' COMMENT '0:未传输,1:传输中,2:成功,3:',

PRIMARY KEY (`user_id`), )

ENGINE=InnoDB AUTO_INCREMENT=2261628 DEFAULT CHARSET=utf8 COMMENT='用户客 服数据表';


通过Python脚本调用shell命令,将Hive中的数据同步到MySQL 中。执行如下脚本:


# -*- coding: utf-8 -*-

import os

import MySQLdb

import sys

def export_data(hive_tab, data_date):

sqoop_command = "sqoop export --connect jdbc:mysql://10.xxx.xxx.xxx:3306/mysql_database --username username -- password password --table mysql_table --export-dir hdfs://nameservice1/user/hive/warehouse /dw.db/" + hive_tab + "/data_date=" + data_date + " --input-fieldsterminated-by '\001'" os.system(sqoop_command) print(sqoop_command)

if __name__ == '__main__': export_data("dw.userprofile_userservice_all", '20181201')


其中用到了sqoopHive导出数据到MySQL的命令:

sqoop export --connect 指定JDBC连接字符串,包括IP 端口 数据库名称 \ --username JDBC连接的用户名\--passowrd JDBC连接的密码\ --table 表名\ --export-dir 导出的Hive, 对应的是HDFS地址 \ --input fileds-terminated-by ‘,’ 分隔符号


同步后MySQL中的数据如图3-14所示。

image.png

3-14 同步到MySQL中的数据

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
49.2099 5 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子