使用Sqoop从MySQL中导入数据

使用Sqoop从MySQL中导入数据

Sqoop是Apache项目,是Hadoop生态系统的扩展出来的。在某些方面Sqoop类似于distcp工具。两者都建立在MapReduce的基础之上,并且利用并行和容错。然而,Sqoop与Distcp的主要区别是:Sqoop主要被设计用来使得关系型数据库和HDFS之间进行数据的导入与导出(通过JDBC)。

它的功能广泛。这一节将讲述使用Sqoop将weblog数据从MySql导入到HDFS中。

准备工作

安装Sqoop。

安装MySQL,并确保他与Hadoop集群之间的联通性。

将MySQL JDBC driver JAR包拷贝到 $SQOOP_HOME/libs目录下。

实现步骤

1、MySQL数据库实例中创建一个新的数据库logs。

create database logs;

2、创建weblogs表格,并导入数据

use logs;

CREATE TABLE weblogs(
md5 VARCHAR(32),
url VARCHAR(64),
request_date DATE,
request_time TIME,
ip VARCHAR(15)
);

LOAD DATA INFILE '/path/weblog_entries.txt' INTO TABLE weblogs
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

3、查询影响的行数

select count(*) from weblogs;

4、将数据库的数据导入到HDFS

 sqoop import -m 1 --connect jdbc:mysql://192.168.11.131:3306/logs --username root --password 308308 --table weblogs --target-dir hdfs://192.168.11.131:9000/data/weblogs/import

输出结果


工作 原理

Sqoop从$SQOOP_HOME/libs中加载JDBC driver,$SQOOP_HOME是Sqoop的安装目录,JDBC driver将在连接中使用到。用户名和密码将在认证的过程中使用到。同时集群中的每一个节点必须具有访问mysql的权限,即在mysql.user中定义,否则的话Sqoop将抛出异常,指示MySQL服务器不允许连接。

mysql> USE mysql;
mysql> select host, user from user;

查询出允许连接的节点


添加节点可以通过以下命令完成:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

列出导入的目录

grunt> ls /data/weblogs/import
hdfs://192.168.11.131:9000/data/weblogs/import/_SUCCESS<r 1> 0
hdfs://192.168.11.131:9000/data/weblogs/import/_logs <dir>
hdfs://192.168.11.131:9000/data/weblogs/import/part-m-00000<r 1> 251212

在默认的情况下,导入的数据将会按照主键进行分割。如果被导入的表格不具有主键,-m或者--split参数必须给出来限定Sqoop如何进行分割数据。参数m控制用来导入数据mapper的数目。这里m设为1,所以只有一个mapper用于数据导入。每个mapper通常产生一个文件。

这一行命令中隐含着很多复杂的操作。Sqoop使用数据库中的元数据为每一列产生一个DBWritable类。这些类将别DBInputFormat使用,DBInputFormat为Hadoop的输入格式,它可以对数据库进行任意的查询。在上面的例子中,一个MapReduce作业被提交,使用DBInputFormat从weblogs表中获取数据。整个weblogs表格将被扫描并且存入/data/weblogs/import中。

了解更多

Sqoop导入数据还有更多的选项。Sqoop可以通过 --as-avrodatafile和--as-sequencefile将数据导入为Avro和Sequence文件,导入的数据可以通过 -z和--compress参数进行压缩。默认的压缩方式为GZIP,它可以通过--compression-codec <CODEC>指定,只要它被HDFS支持。另外一个有用的参数为--direct,这一参数指定Sqoop去使用本地的导入导出工具如果它们被配置的数据库支持。如果--direct被添加上,上一个实例将采用mysqldumpfor导出表格。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值