[Sqoop]将Mysql数据表导入到Hive

本文详细介绍了如何将MySQL中的数据表YHD_CATEG_PRIOR导入到Hive中,包括创建Hive表、使用Sqoop进行同步操作以及实验结果分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务背景

mysql数据表YHD_CATEG_PRIOR结构如下:

-- Table "YHD_CATEG_PRIOR" DDL

CREATE TABLE `YHD_CATEG_PRIOR` (
  `category_id`                     int(11) NOT NULL COMMENT '类目ID',
  `category_name`                   varchar(250) DEFAULT NULL COMMENT '类目名称',
  `category_level`                  int(11) DEFAULT '0' COMMENT '类目级别',
  `default_import_categ_prior`      int(11) DEFAULT '0' COMMENT '默认引入优先级',
  `user_import_categ_prior`         int(11) DEFAULT NULL COMMENT '用户引入优先级',
  `default_eliminate_categ_prior`   int(11) DEFAULT NULL COMMENT '默认淘汰优先级',
  `user_eliminate_categ_prior`      int(11) DEFAULT NULL COMMENT '用户淘汰优先级',
  `UPDATE_TIME`                     timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据刷新时间',
  PRIMARY KEY (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=61125 DEFAULT CHARSET=utf8;

现在需要将数据表YHD_CATEG_PRIOR导入到Hive中。

业务实现

脚本如下:

# 创建Hive数据表pms.yhd_categ_prior_user
hive -e "
set mapred.job.queue.name=pms;
set mapred.job.name=[CIS]yhd_categ_prior_user;

-- Hive DDL
DROP TABLE IF EXISTS pms.yhd_categ_prior_user;
CREATE TABLE pms.yhd_categ_prior_user
(
    category_id                     bigint,
    category_name                   string,
    category_level                  int,
    default_import_categ_prior      int,
    user_import_categ_prior         int,
    default_eliminate_categ_prior   int,
    user_eliminate_categ_prior      int,
    update_time                     string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE;"

# 同步mysql的market.YHD_CATEG_PRIOR到hive中
hadoop fs -rmr /user/pms/YHD_CATEG_PRIOR 

sqoop import \
-Dmapred.job.queue.name=pms \
--connect jdbc:mysql://127.0.0.1:3306/market \
--username admin \
--password 123456 \
--table YHD_CATEG_PRIOR \
--hive-table pms.yhd_categ_prior_user \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' \
--hive-overwrite \
--hive-drop-import-delims \
--hive-import 

上述的脚本工作流程:

  • 创建hive表pms.yhd_categ_prior_user
  • 利用sqoop将mysql表YHD_CATEG_PRIOR同步到hive表pms.yhd_categ_prior_user,导入后,hive表的字段以\t分隔,行以\n分隔,

实验结果

col_name    data_type   comment
# col_name              data_type               comment             

category_id             bigint                  None                
category_name           string                  None                
category_level          int                     None                
default_import_categ_prior  int                     None                
user_import_categ_prior int                     None                
default_eliminate_categ_prior   int                     None                
user_eliminate_categ_prior  int                     None                
update_time             string                  None                

# Detailed Table Information         
Database:               pms                      
Owner:                  pms                      
CreateTime:             Fri Jun 05 18:48:01 CST 2015     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Retention:              0                        
Location:               hdfs://yhd-jqhadoop2.int.yihaodian.com:8020/user/hive/pms/yhd_categ_prior_user   
Table Type:             MANAGED_TABLE            
Table Parameters:        
    numFiles                5                   
    numPartitions           0                   
    numRows                 0                   
    rawDataSize             0                   
    totalSize               447779              
    transient_lastDdlTime   1433501435          

# Storage Information        
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe   
InputFormat:            org.apache.hadoop.mapred.TextInputFormat     
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat   
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:         
    field.delim             \t                  
    line.delim              \n                  
    serialization.format    \t
要使用 SqoopMySQL 数据表导入到 Hive 中,需要遵循以下步骤: 1. 确保已经安装了 SqoopHive。 2. 在 Hive 中创建一个数据库,用于存储导入的数据表。 3. 在 HDFS 中创建一个目录,用于存储导入的数据。 4. 使用 Sqoop 的 import 命令将 MySQL 数据表导入到 HDFS 中: ``` sqoop import \ --connect jdbc:mysql://mysql-server:3306/mydatabase \ --username mysqluser \ --password mysqlpassword \ --table mytable \ --target-dir /user/hive/warehouse/mydatabase.db/mytable \ --fields-terminated-by ',' \ --hive-import \ --hive-table mydatabase.mytable ``` 其中,`jdbc:mysql://mysql-server:3306/mydatabase` 是 MySQL 数据库的连接 URL,`mysqluser` 和 `mysqlpassword` 分别是 MySQL 数据库的用户名和密码,`mytable` 是要导入的数据表名,`/user/hive/warehouse/mydatabase.db/mytable` 是数据导入到 HDFS 中的目录,`--fields-terminated-by ','` 指定了字段分隔符为逗号,`--hive-import` 表示需要将数据导入到 Hive 中,`--hive-table mydatabase.mytable` 指定了在 Hive 中创建的目标表的名称和所在的数据库。 5. 在 Hive 中创建一个外部表,将 HDFS 目录中的数据映射为 Hive 表: ``` CREATE EXTERNAL TABLE mydatabase.mytable ( column1 datatype1, column2 datatype2, ... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/mydatabase.db/mytable'; ``` 注意,这里的表结构要与 MySQL 数据表的结构保持一致。 6. 使用 Hive 的 INSERT INTO 语句将数据从外部表中插入到 Hive 表中: ``` INSERT INTO mydatabase.mytable SELECT * FROM mydatabase.mytable; ``` 这样就完成了将 MySQL 数据表导入到 Hive 中的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值