@羲凡——只为了更好的活着
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
====================================================================
@羲凡——只为了更好的活着
若对博客中有任何问题,欢迎留言交流