有勇气的牛排博客

sqoop 基础教程

有勇气的牛排 659 大数据 2023-02-28 16:29:38

前言

Sqoop 是一个设计用于在 Apache Hadoop 和结构化数据存储(如关系数据库、数据仓库)之间高效传输大规模数据的工具。其名称来源于 SQL 和 Hadoop 的结合。

Sqoop 的主要功能包括:

从 RDBMS 导入数据到 Hadoop:支持将数据导入到 HDFS、Hive、HBase 等。
从 Hadoop 导出数据到 RDBMS:支持将 HDFS 或 Hive 中的数据导出回关系数据库。
支持多种数据库和数据源:如 MySQL、PostgreSQL、Oracle、SQL Server 等。
提供高效并行化的传输:利用 MapReduce 实现高效的数据导入和导出。
自动生成代码:可生成 Java 类,用于和表进行交互。

教程案例 MySQL 数据导入 HDFS

数据准备

假设我们有一个 MySQL 数据库 test_db,其中包含表 employees

CREATE DATABASE test_db; USE test_db; CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT, department VARCHAR(50) ); INSERT INTO employees (name, age, department) VALUES ('Alice', 30, 'HR'), ('Bob', 35, 'Engineering'), ('Charlie', 28, 'Marketing');

将数据导入到 HDFS

1. 导入数据

运行以下命令将 employees 表导入到 HDFS:

sqoop import \ --connect "jdbc:mysql://localhost:3306/test_db" \ --username root \ --password yourpassword \ --table employees \ --target-dir /user/hadoop/employees \ --fields-terminated-by ',' \ --lines-terminated-by '\n' \ --num-mappers 1

2. 参数说明

  • --connect:数据库连接字符串。
  • --username / --password:数据库用户名和密码。
  • --table:要导入的表名。
  • --target-dir:HDFS 目标路径。
  • --fields-terminated-by:指定字段分隔符。
  • --lines-terminated-by:指定行分隔符。
  • --num-mappers:指定并行任务数。

3. 验证数据

查看 HDFS 中的文件:

hdfs dfs -ls /user/hadoop/employees

输出文件内容:

hdfs dfs -cat /user/hadoop/employees/part-m-00000

将 HDFS 数据导出回 MySQL

假设我们修改了 employees 表的数据,并希望将它导出回一个新的 MySQL 表 employees_exported

1. 创建目标表

CREATE TABLE employees_exported ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT, department VARCHAR(50) );

2. 导出数据

运行以下命令将 HDFS 数据导出到 MySQL:

sqoop export \ --connect "jdbc:mysql://localhost:3306/test_db" \ --username root \ --password yourpassword \ --table employees_exported \ --export-dir /user/hadoop/employees \ --input-fields-terminated-by ',' \ --input-lines-terminated-by '\n'

3. 验证数据

查询 employees_exported 表:

SELECT * FROM employees_exported;

留言

专栏
文章
加入群聊