Sqoop光速入门

版权声明:All right reserved https://blog.csdn.net/a308601801/article/details/87350260

简介

主要用于在 Hadoop(Hive) 与传统的数据库 ( mysql、postgresql... ) 间进行数据的传递

可以将一个关系型数据库(例如 : MySQL, Oracle, Postgres 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中

最新的稳定版本是 1.4.7

这里使用 centos6.8 与 Sqoop 1.4.6, centos6.8 与 Sqoop 1.4.7 存在不兼容, 而 centos 与 Sqoop 1.4.7 不存在此问题.

sqoop 的本质就是迁移数据, 迁移的方式:把 sqoop 的迁移命令转换成 MapReduce 程序

相关组件:HDFS, MapReduce, YARN, ZooKeeper, Hive, HBase, MySQL

配置

1.下载, 上传, 解压 不再赘述

2. 配置 sqoop.env.sh

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2

#set the path to where bin/hbase is available
export HBASE_HOME=/opt/module/hbase-1.3.2.1

#Set the path to where bin/hive is available
export HIVE_HOME=/opt/module/hive-1.2.2

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/opt/module/zookeeper-3.4.13

3. 添加 MySQL 驱动包

cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.7/lib

启动

 1. 验证启动

bin/sqoop help

2. 连接数据库

sqoop slist-databases --connect jdbc:mysql://hadoop101:3306/ --username root --password 000000

需要保证防火墙关闭, mysql service 启动, , 并且当前用户对数据库有操作权限 

使用

Sqoop 中数据的导入和导出都是站在大数据集群的角度来看的

导入是从结构数据库导入到 HDFS, 使用 import

导出是从 HDFS 导出到结构数据库, 使用 export

导入

1. 全部导入

sqoop import \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

2. 查询导入

sqoop import \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \  
--query 'select name,sex from staff where id <=2 and $CONDITIONS'

and  $CONDITIONS 为关键字, 必须添加

3. 指定导入列

sqoop import \                                                                        rayfun@hadoop101
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--table staff \
--columns id,sex \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

4. 指定关键字

sqoop import \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--where 'id=1' \
               \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff

5. 导入到 Hive

在 sqoop-env.sh 中下添加如下代码:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*

导入

sqoop import \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--table staff \
              \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--delete-target-dir \
--hive-table staff_hive

6. 导入到 HBase

sqoop import \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--table staff \
              \
--hbase-table "hbase_company" \
--column-family "info" \
--columns "id,name,sex" \
--hbase-create-table \
--hbase-row-key "id" \
--num-mappers 1 \
--split-by id

注意: 这里会报错, 因为 Sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表的功能

所以需要手动在 HBase 中创建表

导出

导出到 RDBMS 的时候, 目标表必须已经在数据库中已经存在

sqoop export \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

注意: 

  • mysql 中的 staff 表必须提前存在, 否则会抛出异常

  • 默认情况下是在表中增加新行, 这样会引起主键冲突, 只要有一行插入失败, 剩下的都会插入失败

使用参数  --updata-key     --update-mode allowinsert  进行更新操作, 如果不存在就插入

sqoop export \
--connect jdbc:mysql://hadoop101:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--update-key id \
--update-mode allowinsert \
--input-fields-terminated-by "\t"

打包脚本

每次操作输入参数比较麻烦, 可以使用脚本, 一般以 .opt 结尾

1. 创建文件

touch job_HDFS2RDBMS.opt

2. 编写脚本

# 导出
export
# 连接到 Mysql
--connect 
jdbc:mysql://hadoop101:3306/company
--username 
root
--password 
000000
--table 
staff
--num-mappers 
1
--export-dir 
/user/hive/warehouse/staff_hive
--input-fields-terminated-by 
"\t"

注意:

  • Sqoop 要求参数和参数值不能放在一行
  • 可以有空行

3. 执行

sqoop --options-file job_HDFS2RDBMS.opt

猜你喜欢

转载自blog.csdn.net/a308601801/article/details/87350260