Sqoop 导入与导出到 Cloudera 的 Hadoop 分布式文件系统 (HDFS) 的 MySQL 表的基础介绍





5.00/5 (1投票)
本技巧提供了将表从 MySQL 导入到 Hadoop 文件系统以及将文件从 HDFS 导出回 MySQL 的基本命令。
引言
Sqoop 主要用于将数据从 RDBMS 系统导入到 Hadoop 分布式文件系统 (HDFS)。对于将数据从 HDFS 导出回 RDBMS,则使用 Sqoop。本技巧展示了此过程涉及的一些基本步骤。
背景
本技巧使用 Cloudera VM V5.8.0。此 VM 可以从 Cloudera 网站 下载。在本示例中,未更改任何设置,因此现有的凭据应该可以正常工作。
将 MySQL 表导入到 HDFS
对于导入作业,我们将在 MySQL 数据库中创建一个名为 Employee
的表。该表将有一个名为 ID 的主键,数据类型为整数。此外,我们将向表中插入一些记录。
在 Cloudera VM 中打开一个终端,并输入以下命令。首先,我们需要启动 mysql 终端。
在终端中输入“mysql -u root -p
”,密码为“Cloudera
”。现在,以下命令直接进入刚刚打开的 mysql 终端。
create database demo;
use demo;
CREATE TABLE Employee (Id int Not NULL, Name VARCHAR(20),DOB DATE, _
Gender char(1), Salary int, PRIMARY KEY (Id));
insert into Employee values (1, 'Alex', '1987-12-12','M', 10000);
insert into Employee values (2, 'Julia', '1987-11-11', 'F', 20000);
insert into Employee values (3, 'John', '1987-10-10', 'M', 25000);
insert into Employee values (4, 'Khalishi', '1987-9-9', 'F', 30000);
现在运行表上的 select 查询以查看记录。
打开另一个终端以运行 Sqoop 命令。
以下命令将表插入到 Hadoop 文件系统 (HDFS) 中。
sqoop import --connect jdbc:mysql:///demo --username root --password cloudera --table Employee
这可能需要几秒钟,具体取决于 VM 配置。它将在内部创建 Employee.Jar 并运行一个 Map-Reduce 作业来导入记录。此作业也可以在 Cloudera VM 附带的 Hue->Job 浏览器中查看。
一旦导入完成,就可以查看文件了
>hadoop dfs -ls
我们应该会看到一个名为 Employee 的文件夹(我们从 mysql 导入的表名)。
>hadoop dfs -cat Employee/*
这应该向我们显示 Employee 文件夹内的记录。实际上,记录分布在文件 (part-m-0000*) 中。因此,上述命令通过读取所有文件来列出所有记录。
要查看文件列表,请输入命令“hadoop dfs -ls Employee
”。
现在让我们在另一个终端中向 mysql 表中插入一些更多记录
insert into Employee values (5, 'JonSnow', '1987-8-9', 'M', 35000);
insert into Employee values (6, 'Arya', '1993-7-7', 'F', 40000);
我们可以使用命令中的插入模式将新添加的记录插入到 HDFS 中。在 Sqoop 窗口中输入命令。
sqoop import --connect jdbc:mysql:///demo --username root
--password cloudera --table Employee --incremental append --check-column id --last-value 4
命令完成后,现在可以运行以下命令查看所有记录
>hadoop dfs -cat Employee/*
现在我们将这些 HDFS 中的文件导出回 mysql 中的新表。
将 HDFS 数据导出到 MySQL 表
在 mysql 终端中,让我们创建一个名为 EmployeeNew
的另一个表,其模式与 Employee
相同。
CREATE TABLE EmployeeNew (Id int Not NULL, Name VARCHAR(20),DOB DATE, _
Gender char(1), Salary int, PRIMARY KEY (Id));
在 Sqoop 终端中,输入导出命令将记录导出到 EmployeeNew Table
。需要注意的是 Employee
表的 HDFS 路径。
sqoop export --connect jdbc:mysql:///demo --username root
--password cloudera --export-dir /user/cloudera/Employee --update-mode allowinsert --table EmployeeNew
一旦 Sqoop 作业完成,就转到 MySql 终端并运行 select
查询以查看 6 条记录。
Select * from EmployeeNew;
关注点
本技巧应该是一个易于理解的指南,用于编写基本的 sqoop 命令以从 HDFS 导入和导出数据。