数据导出
将数据从HDFS导出到RDBMS数据库
导出前,目标表必须存在于目标数据库中
mysql表不存在是不会自动创建的
- 默认操作是从将文件中的数据使用INSERT语句插入到表中
- 更新模式下,是生成UPDATE语句更新表数据
语法
以下是export命令语法
$ sqoop export (generic-args) (export-args)
表示数据存放的地址
hdfs导入到mysql
数据是在HDFS 中/user/root/emp_conn
目录下存在part-m-00000文件中。所述part-m-00000如下:
1201,2356742,gopal@tp.com
1202,1661663,manisha@tp.com
1203,8887776,khalil@ac.com
1204,9988774,prasanth@ac.com
1205,1231231,kranthi@tp.com
- 首先需要手动创建mysql中的目标表
use userdb;
CREATE TABLE emp_conn_from_hdfs(
id INT,
phno VARCHAR(20),
email VARCHAR(20)
);
- 然后执行导出命令
sqoop export \
--connect jdbc:mysql://master:3306/userdb \
--username root \
--password root \
--table emp_conn_from_hdfs \
--export-dir /user/root/emp_conn \
--m 1
- 验证表mysql命令行
select * from emp_conn_from_hdfs;
如果给定的数据存储成功,那么可以找到数据在如下的emp_conn_from_hdfs表
hive导入到mysql
sqoop export \
--connect jdbc:mysql://master:3306/userdb \
--username root \
--password root \
--table staff \
--num-mappers 1 \
--export-dir /user/root/staff \
--input-fields-terminated-by "\t";
--input-fields-terminated-by "\t"
表示hive中原本数据分割符是\t
编写脚本
job_hdfs2mysql.opt
export
--connect
jdbc:mysql://master:3306/company
--username
root
--password
root
--table
staff
--num-mappers
1
--export-dir
/user/hive/warehouse/staff_hive
--input-fields-terminated-by
"\t"
脚本中一个命令或一个参数就成为一行,不要加\
执行脚本
sqoop --options-file job_hdfs2mysql.opt