准备
启动 hadoop
cd /program
bin/hadoop.sh
全部导入
将MySQL某表所有字段、所有数据,导入到 HDFS
cd sqoop-1.4.7
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/scott \
--table dept \
--username root \
--password root \
--target-dir /test_sqoop_dept \
--fields-terminated-by '\t' \
--m 1 \
--null-string ''
注意
参数名和参数值中间只能有一个空格,否则可能报错
如下:
--password root # 前面多出空格,会报密码错误
--target-dir /test_sqoop_dept # 前面多出空格,生成的目录只有空格
查看数据
查看文件:/test_sqoop_dept/part-m-00000
内容如下:
3 市场部 北京
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
60 测试部 NEW YORK
导入指定列
将MySQL某表 指定列、所有数据,导入到 HDFS
cd sqoop-1.4.7
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/scott \
--table dept \
--columns deptno,dname \
--username root \
--password root \
--target-dir /test_sqoop_dept2 \
--fields-terminated-by '\t' \
--m 1
查看数据
查看文件:/test_sqoop_dept2/part-m-00000
内容如下:
3 市场部
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
60 测试部
查询条件导入
将MySQL某表 指定列,指定 where 查询条件,将查询结果导入到 HDFS
cd sqoop-1.4.7
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/scott \
--table dept \
--columns deptno,dname \
--where "deptno <= 30" \
--username root \
--password root \
--target-dir /test_sqoop_dept3 \
--fields-terminated-by '\t' \
--m 1
查看数据
查看文件:/test_sqoop_dept3/part-m-00000
内容如下:
3 市场部
10 ACCOUNTING
20 RESEARCH
30 SALES
查询SQL导入(一个map任务)
应用场景:通过 select 查询语句,将结果导入到HDFS,适用于:关联查询、统计查询
cd sqoop-1.4.7
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/scott \
--username root \
--password root \
--target-dir /test_sqoop_emp \
--fields-terminated-by '\t' \
--m 1 \
--null-string '' \
--query 'select a.ename,b.dname from emp a,dept b where a.deptno = b.deptno and sal>2000 and $CONDITIONS'
解释:
$CONDITIONS:实现并行运行mr的功能,必须加$CONDITIONS。这里只有一个 map 任务
查看数据
查看文件:/test_sqoop_emp/part-m-00000
内容如下:
7566 JONES MANAGER 7839 1981-04-02 2975.00 null 20
7698 BLAKE MANAGER 7839 1981-05-01 2850.00 null 30
7782 CLARK MANAGER 7839 1981-06-09 2450.00 null 10
7788 SCOTT ANALYST 7566 1987-04-19 3000.00 null 20
7839 KING PRESIDENT null 1981-11-17 5000.00 null 10
7902 FORD ANALYST 7566 1981-12-03 3000.00 null 20
查询导入(多个map任务)
有多个maptask,需使用 --split-by 来区分数据,$CONDITIONS 替换查询范围
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/scott \
--username root \
--password root \
--target-dir /test_sqoop_emp2 \
--fields-terminated-by '\t' \
--null-string '' \
--m 2 \
--query 'select empno,ename,job,sal,deptno from scott.emp where sal>2000 and $CONDITIONS' \
--split-by empno
解释:
$CONDITIONS:实现并行运行mr的功能,必须加$CONDITIONS--split-by:区分数据
执行结果
可以看出,显示查询 empno 的最大值 7566 、最小值 7902,然后根据 maptask任务数,分成2个任务,各自导入数据
查看数据
查看目录:/test_sqoop_emp2/part-m-00000 有以下2个文件:
- part-m-00000
- part-m-00001
part-m-00000 内容如下:
7566 JONES MANAGER 2975.00 20
7698 BLAKE MANAGER 2850.00 30
part-m-00001 内容如下:
7782 CLARK MANAGER 2450.00 10
7788 SCOTT ANALYST 3000.00 20
7839 KING PRESIDENT 5000.00 10
7902 FORD ANALYST 3000.00 20
