Sqoop安装使用手册_云帆大数据学院

Sqoop安装使用手册

1. Sqoop介绍

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

2. 安装配置

1. 环境准备

sqoop-1.4.3-cdh4.7.0.tar.gz
10.1.1.117  master //安装好hadoop,hbase和hive。

2. 安装配置

在master节点上用hadoop用户登陆,解压Sqoop安装包并配置环境变量。

复制sqoop-1.4.3-cdh4.7.0.tar.gz到/home/hadoop目录,解压:

$ tar -zxvf sqoop-1.4.3-cdh4.7.0.tar.gz

复制mysql的jdbc库mysql-connector-java.jar到~/sqoop-1.4.3-cdh4.7.0/lib。

修改~/.bashrc环境变量,在 .bashrc 的末尾插入以下变量:

export SQOOP_HOME=/home/hadoop/sqoop-1.4.3-cdh4.7.0
export PATH=$PATH:$SQOOP_HOME/bin

保存并更新~/.bashrc:

$ source ~/.bashrc

3. 测试数据准备

在MySQL数据库test建测试表hadoop_related并添加测试数据:

mysql> create table hadoop_related (id int, project varchar(20), version varchar(20), primary key (id));
mysql> INSERT INTO hadoop_related VALUES (1,'hadoop','2.0.0-cdh4.7.0'),
(2,'hbase','0.94.15-cdh4.7.0'),(3,'hive','0.10.0-cdh4.7.0'),
(4,'pig','0.11.0-cdh4.7.0'),    (5,'sqoop','1.4.3-cdh4.7.0'),
(6,'sqoop2','1.99.2-cdh4.7.0'),(7,'zookeeper','3.4.5-cdh4.7.0'), 
(8,'flumeng','1.4.0-cdh4.7.0');

4. 用Sqoop连接查看数据库

列出mysql数据库中的所有数据库

$ sqoop list-databases --connect jdbc:mysql://master/ --username hadoop --password 123456

连接mysql并列出test数据库中的表

$ sqoop list-tables --connect jdbc:mysql://master/test --username hadoop --password 123456

5. 与Hadoop导入导出

1. 从数据库导出表的数据到HDFS上文件

可以通过-m设置并行数据,即map的数据,决定文件的个数。

默认目录是/user/${user.name}/${tablename},可以通过–target-dir设置hdfs目标目录。

$ hdfs dfs -mkdir -p /user/sqoop
$ sqoop import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --target-dir /user/sqoop/hadoop_related -m 1

2. 将hdfs上的数据导入到关系数据库中

目标表的表结构需要先创建出来,否则export操作会直接失败。

mysql> create table hadoop_related_hdfs (id int, project varchar(20), version varchar(20), primary key (id));
$ sqoop export --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related_hdfs --export-dir /user/sqoop/hadoop_related

验证结果:

  1. 数据会首先写到hadoop_related_hdfs_tmp表,导入操作成功后,再由hadoop_related_hdfs_tmp表导入到hadoop_related_hdfs结果表中,同时会清除hadoo_related_hdfs_tmp表。
  2. 如果有map失败,则成功的map会将数据写入tmp表,export任务失败,同时tmp表的数据会被保留。
  3. 如果tmp中已有数据,则此export操作会直接失败,可以使用–clear-staging-table指定在执行前清除中间表。

6. 导入数据到Hbase

使用sqoop把mysql中数据导入hbase中

$ sqoop import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hbase-table hadoop_related --column-family related --hbase-create-table

进入hbase shell

hbase(main):003:0> describe 'hadoop_related'
DESCRIPTION                                                       ENABLED
 'hadoop_related', {NAME => 'related', DATA_BLOCK_ENCODING => 'NO true
 NE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS =
 > '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '21474
 83647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_
 MEMORY => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'true
 '}
hbase(main):004:0> get 'hadoop_related' , '1'
COLUMN                     CELL
 related:id                timestamp=1438418082341, value=1
 related:project           timestamp=1438418082341, value=hadoop
 related:version           timestamp=1438418082341, value=2.0.0-cdh4.7.0

关于将Hbase的数据导入到mysql里,Sqoop并不是直接支持的,一般采用如下3种方法:

  1. 将Hbase数据扁平化成HDFS文件,然后再由Sqoop导入.
  2. 将Hbase数据导入Hive表中,然后再导入mysql。
  3. 直接使用Hbase的Java API读取表数据,直接向mysql导入不需要使用Sqoop。

7. 与Hive导入导出

1. 从数据库导出表的数据到Hive

$ sqoop-import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related  --hive-table hadoop_related --create-hive-table --hive-import --hive-home /home/hadoop/hive-0.10.0-cdh4.7.0

2. 将Hive上的数据导入到关系数据库中

将Hive中的表数据导入到MySQL,MySQL中的目标表必须提前创建好。

mysql> create table hadoop_related_hive (id int, project varchar(20), version varchar(20), primary key (id));
$ sqoop export --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related_hive --export-dir /home/hadoop/hiveData/warehouse/hadoop_related/part-m-00000 --input-fields-terminated-by '1'

8. sqoop-eval使用

eval可以很快的使用sql语句对数据库进行操作,这使得用户在执行import操作之前检查sql语句是否正确。

$ sqoop eval --connect jdbc:mysql://192.168.56.1/test --username root --password 123456 --query "SELECT id, project, version FROM hadoop_related_hive LIMIT 10"

9. 增量导入

Sqoop提供了原生增量导入的特性,包含以下三个关键参数:

Argument Description
–check-column (col) 指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型(这个很好理解吧)。
–last-value (value) 指定增量模式,包含“追加模式” append 和“最后修改模式” lastmodified (该模式更满足常见需求)。
–last-value (value) 指定“标志列”上次导入的上界。如果“标志列”是最后修改时间,则–last-value为上次执行导入脚本的时间。

结合Saved Jobs机制,可以实现重复调度增量更新Job时 –last-value 字段的自动更新赋值,再结合cron或者oozie的定时调度,可实现真正意义的增量更新。

增量job的创建:

$ sqoop job --create SqoopIncre -- import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hive-import --hive-table hadoop_related_incre --incremental append --check-column id --last-value 0

执行Job:

$ sqoop job --exec SqoopIncre

转载请注明:云帆大数据学院 » Sqoop安装使用手册

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值