sqooplx
sqoop help
-- 显示所有库
sqoop list-databases --help
sqoop list-databases \
--connect jdbc:mysql://192.168.88.140:3306 \
--username root \
--password 123456
-- 显示所有库中的表
sqoop list-tables \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456
-- 目标: 向hdfs中导入数据
-- 将 mysql.db_1.emp 表 导入到 hdfs的 /sqoop_2601/emp1
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp1 \
-m 1
-- 报错: FileAlreadyExistsException: Output directory hdfs://localhost:9000/sqoop_2601/emp1 already
exists
-- 原因: 目录 /sqoop_2601/emp1 已经存在
-- 方案一 换名称
-- 默认分隔符是 , 想换成 其他的分隔符
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp2 \
--fields-terminated-by '\t' \
-m 1
-- 报错: FileAlreadyExistsException: Output directory hdfs://localhost:9000/sqoop_2601/emp1 already
exists
-- 原因: 目录 /sqoop_2601/emp1 已经存在
-- 方案二 覆盖
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp2 \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1
-- 目标3: 增加多个map处理
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp2 \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 3
-- 报错: Error during import: No primary key could be found for table emp.
-- Please specify one with --split-by or perform a sequential import with '-m 1'.
-- 原因: 目的是交给3个map去处理, 默认会找当前表的主键, 根据主键去分. 但是 emp表没有主键, 所以报错
-- 解决1: 指定按照某列区分: --split-by 列名
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp3 \
--delete-target-dir \
--fields-terminated-by '\t' \
--split-by id \
-m 3
-- 报错: Error during import: No primary key could be found for table emp.
-- Please specify one with --split-by or perform a sequential import with '-m 1'.
-- 原因: 目的是交给3个map去处理, 默认会找当前表的主键, 根据主键去分. 但是 emp表没有主键, 所以报错
-- 解决2: 在传统数据库中给指定表增加主键
-- 2. 在mysql中设置id为主键
alter table emp
add primary key (id);
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp4 \
--delete-target-dir \
--fields-terminated-by '\001' \
-m 3
-- 显示所有库
sqoop list-databases --help
sqoop list-databases \
--connect jdbc:mysql://192.168.88.140:3306 \
--username root \
--password 123456
-- 显示所有库中的表
sqoop list-tables \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456
-- 目标: 向hdfs中导入数据
-- 将 mysql.db_1.emp 表 导入到 hdfs的 /sqoop_2601/emp1
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp1 \
-m 1
-- 报错: FileAlreadyExistsException: Output directory hdfs://localhost:9000/sqoop_2601/emp1 already
exists
-- 原因: 目录 /sqoop_2601/emp1 已经存在
-- 方案一 换名称
-- 默认分隔符是 , 想换成 其他的分隔符
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp2 \
--fields-terminated-by '\t' \
-m 1
-- 报错: FileAlreadyExistsException: Output directory hdfs://localhost:9000/sqoop_2601/emp1 already
exists
-- 原因: 目录 /sqoop_2601/emp1 已经存在
-- 方案二 覆盖
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp2 \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 1
-- 目标3: 增加多个map处理
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp2 \
--delete-target-dir \
--fields-terminated-by '\t' \
-m 3
-- 报错: Error during import: No primary key could be found for table emp.
-- Please specify one with --split-by or perform a sequential import with '-m 1'.
-- 原因: 目的是交给3个map去处理, 默认会找当前表的主键, 根据主键去分. 但是 emp表没有主键, 所以报错
-- 解决1: 指定按照某列区分: --split-by 列名
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp3 \
--delete-target-dir \
--fields-terminated-by '\t' \
--split-by id \
-m 3
-- 报错: Error during import: No primary key could be found for table emp.
-- Please specify one with --split-by or perform a sequential import with '-m 1'.
-- 原因: 目的是交给3个map去处理, 默认会找当前表的主键, 根据主键去分. 但是 emp表没有主键, 所以报错
-- 解决2: 在传统数据库中给指定表增加主键
-- 2. 在mysql中设置id为主键
alter table emp
add primary key (id);
sqoop import \
--connect jdbc:mysql://192.168.88.140:3306/db_1 \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop_2601/emp4 \
--delete-target-dir \
--fields-terminated-by '\001' \
-m 3
下一篇:我们都一样
声明:以上文章均为用户自行添加,仅供打字交流使用,不代表本站观点,本站不承担任何法律责任,特此声明!如果有侵犯到您的权利,请及时联系我们删除。
文章热度:☆☆☆☆☆
文章难度:☆☆☆☆☆
文章质量:☆☆☆☆☆
说明:系统根据文章的热度、难度、质量自动认证,已认证的文章将参与打字排名!
本文打字排名TOP20
登录后可见
