使用sqoop列出mysql中数据库database
sqoop list-databases --connect jdbc:mysql://192.168.249.130:3306 --username root --password Mzp_2022!如果出现下面这个报错,说明mysql的jdbc没有配置好
这个包放到这个位置
这实际是sqoop连接不上MySQL了
JDBC = Java Database Connectivity,翻译过来是:Java 数据库连接技术
✅ 大白话解释:JDBC 是一套Java 语言写的「通用接口 / 工具包」,作用是:让 Java 程序,能连接上各种数据库(MySQL/Oracle 等),并且对数据库执行增删改查 SQL 语句
正常是这样的
使用sqoop列出mysql中指定数据库duoduo_db中的所有表
/database的名字
-- 使用sqoop列出mysql中指定数据库duoduo_db中的所有表 sqoop list-tables --connect jdbc:mysql://192.168.249.130:3306/duoduo_db --username root --password Mzp_2022! sqoop list-tables --connect jdbc:mysql://192.168.249.130:3306/database的名字 --username root --password Mzp_2022!从mysql数据库duoduo_db中导出表base_category1到HDFS平台/bi2513/category1
sqoop import --connect jdbc:mysql://192.168.249.130:3306/duoduo_db --username root --password Mzp_2022! --table base_category1 -m 1 --target-dir /bi2513/category1 --delete-target-dir --driver com.mysql.jdbc.Driversqoop import——把 MySQL 数据库里的表数据,导入到 HDFS 中
--username root --password Mzp_2022! ——用账号root、密码Mzp_2022!访问duoduo_db数据库
--table base_category1 ——访问duoduo_db数据库,将该库下的base_category1表的全部数据
-m 1 ——用1 个 Map 任务
--target-dir /bi2513/category1 ——导入到 HDFS 的/bi2513/category1目录下
--delete-target-dir——
执行这条 Sqoop 导入命令之前,自动检测 HDFS 上的目标目录/bi2513/category1 是否存在:
✅ 如果存在→ 自动删除这个目录(包括目录下所有文件),然后再重新创建该目录,执行数据导入;
✅ 如果不存在→ 什么都不做,直接创建目录,执行数据导入。
--driver com.mysql.jdbc.Driver——指定使用 MySQL 的 JDBC 驱动类完成连接
从MySQL取数据中插入特定要求的 行 到hdfs中
结尾加query
sqoop import \ --connect jdbc:mysql://192.168.249.130:3306/duoduo_db \ --username root \ --password Mzp_2022! \ --target-dir /user/category3 \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'SELECT * FROM base_category3 WHERE id<=100 and $CONDITIONS;'sqoop import \ --connect jdbc:mysql://192.168.249.130:3306/duoduo_db \ --username root \ --password Mzp_2022! \ --target-dir /user/category3 \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query "SELECT * FROM base_category3 WHERE NAME LIKE '%机%' and \$CONDITIONS;"提示:query的结尾必须加'$CONDITIONS', must contain '$CONDITIONS' in WHERE clause.
如果query后使用的是双引号,则$CONDITIONS前必须加转义符,防止shell识别为自己的变量。
但是你一定要注意--query不可与 --table同用。--query是调用符合条件的部分数据。--table是整个表导入进去。
加where 列=条件
sqoop import \ --connect jdbc:mysql://192.168.249.130:3306/duoduo_db \ --username root \ --password Mzp_2022! \ --target-dir /user/category3 \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query "SELECT * FROM base_category3 WHERE NAME LIKE '%机%' and \$CONDITIONS;" 或: sqoop import \ --connect jdbc:mysql://192.168.249.130:3306/duoduo_db \ --username root \ --password Mzp_2022! \ --target-dir /user/category3 \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table base_category3 \ --where "id=10"迁移特定的列
方法1
sqoop import \ --connect jdbc:mysql://192.168.249.130:3306/duoduo_db \ --username root \ --password Mzp_2022! \ --target-dir /user/category3 \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,name \ --table base_category3-- 方法2
sqoop import \ --connect jdbc:mysql://192.168.249.130:3306/duoduo_db \ --username root \ --password Mzp_2022! \ --target-dir /user/category3 \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'SELECT id,name FROM base_category3 WHERE id<=100 and $CONDITIONS;'