Sqoop是一个用来将Hadoop和关系型数据库中的数据相互迁移 的 工 具 。 它 可 以 将 一 个 关 系 型 数 据 库 ( 如 MySQL 、 Oracle 、 PostgreSQL等)中的数据导入Hadoop的HDFS中,也可以将HDFS 中的数据导入关系型数据库中。
下面通过一个案例来讲解如何使用Sqoop将Hive中的标签数据迁移到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')
其中用到了sqoop从Hive导出数据到MySQL的命令:
sqoop export --connect 指定JDBC连接字符串,包括IP 端口 数据库名称 \ --username JDBC连接的用户名\--passowrd JDBC连接的密码\ --table 表名\ --export-dir 导出的Hive表, 对应的是HDFS地址 \ --input fileds-terminated-by ‘,’ 分隔符号
同步后MySQL中的数据如图3-14所示。
图3-14 同步到MySQL中的数据








暂无数据