Sqoop 是用于在 Hadoop 和关系型数据库(如 MySQL、Oracle 等)之间高效传输数据的工具。以下是常用的 Sqoop 命令及示例:
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键,用于唯一标识每一行name VARCHAR(255) NOT NULL, -- 名称,字符串类型,不允许为空gender ENUM('Male', 'Female', 'Other') NOT NULL, -- 性别,枚举类型,限制为三种值之一,不允许为空age INT NOT NULL, -- 年龄,整数类型,不允许为空income DECIMAL(10, 2) NOT NULL -- 收入,定点小数类型,总长度10位,其中小数点后2位,不允许为空
);
INSERT INTO employees (name, gender, age, income) VALUES
('张三', 'Male', 30, 5000.00),
('李四', 'Female', 25, 6000.50),
('王五', 'Other', 22, 4500.75);
Sqoop 命令核心结构
sqoop [通用参数] <操作类型> [操作参数]
常用操作类型
操作类型 | 功能描述 |
---|---|
import | 将数据从关系型数据库导入到 HDFS/Hive/HBase |
export | 将 HDFS 数据导出到关系型数据库 |
list-databases | 列出数据库中的所有数据库名 |
list-tables | 列出指定数据库中的所有表名 |
eval | 直接执行 SQL 查询并显示结果 |
通用参数
参数 | 说明 |
---|---|
--connect <jdbc-url> | JDBC 连接字符串(必填) |
--username <user> | 数据库用户名 |
--password <pass> | 数据库密码(建议改用 -P 交互输入) |
--driver <class> | 指定 JDBC 驱动类(如 Oracle 的 oracle.jdbc.OracleDriver ) |
--verbose | 显示详细日志 |
执行sql语句
sqoop eval \
--connect jdbc:mysql://localhost/mydatabase \
--username root \
--password 123456 \
--query "select * from employees"
生成 Hive 表结构 create-hive-table
关键参数说明
参数 | 说明 |
---|---|
--connect | 源数据库的 JDBC 连接地址(如 MySQL) |
--table | 源数据库的表名(需复制的表结构) |
--hive-table | 目标 Hive 表名(格式:数据库名.表名 ,默认在 default 库创建同名表) |
--hive-overwrite | 若 Hive 表已存在,则覆盖表结构(默认跳过) |
--map-column-hive | 手动指定字段类型映射(如 id=STRING,name=STRING ) |
sqoop create-hive-table \
--connect jdbc:mysql://源数据库地址:端口/数据库名 \
--username 用户名 \
--password 密码 \
--table 源表名 \
--hive-table hive数据库名.hive表名 # 可选,默认在 `default` 数据库创建同名表
导入前
mysql 表结构
hive 表
导入后
数据导入(import)hdfs
sqoop import \
--connect jdbc:mysql://host:port/db \
--username user \
--password pass \
--table source_table \
--target-dir /hdfs/path \
[其他参数]
常用导入参数
参数 | 说明 |
---|---|
--table <table> | 源表名 |
--columns <col1,col2> | 指定导入列(默认导入所有列) |
--where "<条件>" | 指定导入数据的过滤条件 |
--target-dir <path> | HDFS 目标目录(默认:/user/<user>/<table> ) |
--delete-target-dir | 若目标目录存在,先删除 |
--fields-terminated-by <char> | 字段分隔符(默认:, ) |
--lines-terminated-by <char> | 行分隔符(默认:\n ) |
--m <num> 或 --num-mappers <num> | 并行任务数(默认:4) |
--split-by <column> | 指定并行切分列的字段(通常为数值或日期类型) |