Sqoop 将mysql数据导入到hive分区表

@羲凡——只为了更好的活着

Sqoop 使用——将mysql数据导入到hive分区表

前期准备
a./etc/profile添加export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
b.将hive-site.xml 拷贝到 $SQOOP_HOME/conf目录下(否则报错找不到hive库)

0.参数说明

--connect #关系型数据库连接
--username #关系型数据库连接用户名
--password #关系型数据库连接密码
--table #关系型数据库的表
--split-by #如果-m的数量不为1,则一定要加上该参数且最好是数值类型,否则会报错
--direct #快速模式,使用mysql自带的mysqldump导出数据
--delete-target-dir #如果hdfs的目录已经存在则先删除
--target-dir #导入到hdfs时的目标目录
--export-dir #从hdfs导出时的源目录
--fields-terminated-by #导入到hdfs时的hdfs文件分隔符
--input-fields-terminated-by #从hdfs导出时的hdfs文件分隔符
--hive-drop-import-delims #导入hive中的数据某列中如果有换行符或回车键可以删除
--hive-database #hive的数据库
--hive-table #hive的表
--hive-overwrite #覆盖之前的分区插入数据
--hive-partition-key #hive分区字段
--hive-partition-value #hive分区值
-m #指定map数量,也是生成的文件数

特别说明:如果指定的map的数量不为1,则一定要加上–split-by参数且最好是数值类型

1.准备mysql

CREATE DATABASE test_data;
CREATE TABLE test_data.mysql_stu_info (
  `name` varchar(20),
  `age` int(5) ,
  primary key (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into test_data.mysql_stu_info values("aaron",666);
insert into test_data.mysql_stu_info values("yaoyao",777);

2.准备hive

CREATE DATABASE test_data;
CREATE TABLE test_data.stu_info(
  `name` string, 
  `age` int)
PARTITIONED BY (ymday string)
ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t';

3.sqoop脚本

sqoop import \
--connect "jdbc:mysql://deptest75:3306/test_data?useUnicode=true&characterEncoding=utf8" \
--username root \
--password 1q2w3e4r \
--table mysql_stu_info \
--delete-target-dir \
--hive-drop-import-delims \
--hive-import \
--hive-overwrite \
--hive-database test_data \
--hive-table stu_info \
--hive-partition-key ymday \
--hive-partition-value 20190329 \
--split-by age \
--fields-terminated-by '\t' \
-m 6

4.结果展示

hive (test_data)> select * from test_data.stu_info;
OK
stu_info.name	stu_info.age	stu_info.ymday
aaron	666	20190329
yaoyao	777	20190329
Time taken: 0.142 seconds, Fetched: 2 row(s)

5.延伸

如果你需要将mysql的表筛选后再导入到hive分区表中
a.需要用 --query ,后面跟查询语句
b.必须加上 --target-dir,后面跟hive分区表的location路径
示例:

sqoop import \
--connect "jdbc:mysql://deptest75:3306/test_data?useUnicode=true&characterEncoding=utf8" \
--username root \
--password 1q2w3e4r \
--query 'select name, age from mysql_stu_info where $CONDITIONS' \
--target-dir /hive/warehouse/test_data.db/stu_info \
--delete-target-dir \
--hive-import \
--hive-overwrite \
--hive-database test_data \
--hive-table stu_info \
--hive-partition-key ymday \
--hive-partition-value 20190404 \
--fields-terminated-by '\t' \
-m 1

====================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

你可能感兴趣的:(ETL)