导入数据到hdfs
(1)MySQL准备表和数据
# 建库
create database sqooptest;
use sqooptest;
# 建表
create table person(id int primary key auto_increment,name varchar(30),age int,score int,position varchar(30));
# 插入数据
insert into person values(null,'zhangsan',34,66,'boss');
insert into person values(null,'lisi',34,66,'worker');
insert into person values(null,'wangwu',34,66,'master');
# 展示数据
desc person;
(2)MySQL数据 import 到hdfs
sqoop import \
--connect jdbc:mysql://hadoop01:3306/sqooptest \
--username root \
--password 123456 \
--table person \
--target-dir /sqoop/person \
--delete-target-dir \
--fields-terminated-by '\t' \
--m 1
导出到hdfs后,默认保存位置为/user/root/数据库表名,如下图所示。查看导出的内容,发现跟mysql中的一致,并且字段值之间使用\t
隔开。
[root@hadoop03 ~]# hadoop fs -cat /sqoop/person/part-m-00000
1 zhangsan 33 88 boss
2 lisi 44 99 worker
3 wangwu 23 77 master
导入数据到Hive
导出数据到hive前,需要将hive中的一个包(hive-exec-1.2.1.jar)拷贝到sqoop的lib目录。
[root@hadoop01 lib]# cp hive-exec-1.2.1.jar /export/servers/sqoop-1.4.6/lib/
(1) Hive中建库建表,无数据。
# 建库
create database sqooptohive;
use sqooptohive;
# 建表
create external table person(id int,name string,age int,score int,position string)row format delimited fields terminated by '\t';
sqoop导入数据到hive表中。
sqoop import \
--connect jdbc:mysql://hadoop01:3306/sqooptest \
--username root \
--password 123456 \
--table person \
--fields-terminated-by '\t' \
--delete-target-dir \
--hive-import \
--hive-table sqooptohive.person \
--hive-overwrite \
--m 1
导出数据
hdfs导出到MySQL
hdfs先准备数据文件
[root@hadoop01 ~]# hadoop fs -cat /sqoopresult/hdfstomysql.txt
110 zhangsan 44 88
120 lisi 22 99
119 wangwu 18 77
mysql中需要先建表,否则会报错。
CREATE TABLE sqooptest.hdfstomysql (
id INT NOT NULL,
name varchar(100) NOT NULL,
age INT NOT NULL,
score INT NOT NULL
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;
sqoop命令执行导出。
sqoop export \
--connect jdbc:mysql://hadoop01:3306/sqooptest \
--username root \
--password 123456 \
--table hdfstomysql \
--export-dir /sqoopresult \
--input-fields-terminated-by " "