Sqoop1的导入导出
Sqoop1 和 Sqoop2 的区别
# 版本上
Sqoop1: 1.4.x
Sqoop2: 1.99.x
# 架构上
Sqoop1 使用 Sqoop客户端直接提交的方式(命令、将命令封装在脚本中)
Sqoop2 引入了 Sqoop Server,对Connector实现了集中的管理
# 访问方式
Sqoop1 通过Cli控制台方式进行访问
Sqoop2 通过 rest api、java api、web ui以及cli控制台方式进行访问
# 安全性
Sqoop1 在命令或脚本中指定用户数据库名及密码
Sqoop2 是通过Cli方式访问,在交互过程界面中,输入的密码信息会被看到,同时 Sqoop2 引入了基于角色的安全机制,Sqoop2比Sqoop多了一个Server端。
# 综述
Sqoop1 架构简单明了,部署即用,使用门槛比较低,但是耦合性强,用户密码暴露不安全。
Sqoop2 服务端部署,运行,提供 cli、rest api,webui 等入口,connector集中管理,rdbms 账户控制更安全,但是sqoop2仅负责数据的读写操作,架构相对复杂
Sqoop1 和 Sqoop2 的架构图


Sqoop1 的配置
解压安装之后,修改配置文件(conf/sqoop-env.sh)
#Set path to where bin/hadoop is available #export HADOOP_COMMON_HOME=
export HADOOP_COMMON_HOME= /data/hadoop/hadoop < /span >
#Set path to where hadoop-*-core.jar is available #export HADOOP_MAPRED_HOME=
export HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME /share/hadoop/mapreduce/ < /span >
#set the path to where bin/hbase is available #export HBASE_HOME=
export HBASE_HOME= /data/hbase/hbase < /span >
#Set the path to where bin/hive is available #export HIVE_HOME=
export HIVE_HOME= /data/hive/apache-hive < /span >
#Set the path for where zookeper config dir is #export ZOOCFGDIR=
export ZOOCFGDIR= /data/zookeeper/apache-zookeeper < /span >
Sqoop1 导入(MySQL导入到HDFS)
注意: 需要启动 MySQL、ZK、Hadoop
# demo1:table
# sqoop1 导入命令 mysql=>hdfs
bin /sqoop import
# mysql驱动类
--driver com.mysql.cj.jdbc.Driver< /span >
# 连接字符串
--connect jdbc:mysql: // 192.168.56.1< /span >/dbName< /span >?serverTimezone=GMT%2B8< /span >
# 从哪张表导数据
--table tbName< /span >
# mysql账号
--username root< /span >
# mysql 密码
--password 123456< /span >
--verbose
# 目标目录(HDFS)
--target- dir = /sqoop/a_users
< /span >
# demo2:query
# 导入数据
# --query和--table是互斥的;
bin /sqoop import
--connect jdbc:mysql: // 192.168.56.1< /span >/dbName< /span >?serverTimezone=GMT%2B8< /span >
--username root< /span >
--password 123456< /span >
--verbose
# 获取记录条数
--fetch-size 30< /span >
# SQL 语句
# $CONDITIONS sql语句执行的条件,这个条件由sqoop自己控制
--query 'select * from tbName where $CONDITIONS'
# 按照 id 切分
#--split-by;拆分的这一列不能重复,一般是主键
-- split -by id < /span >
# 目标目录(HDFS)
--target- dir = /sqoop/a_users
< /span >
# demo3:将数据库账号、密码、SQL语句封装到一个文件中
# 新建一个文件;(一行一个,使用#注释);文件名随便写
import
--connect jdbc:mysql: // 192.168.56.1< /span >/dbName< /span >?serverTimezone=GMT%2B8< /span >
--username root< /span >
--password 123456< /span >
--verbose
--fetch-size 30< /span >
--query 'select * from a_users where $CONDITIONS'
-- split -by id < /span >
--target- dir = /sqoop/a_users
< /span >
执行封装了Sqoop命令的文件
bin /sqoop --options- file /root/fileName .txt
< /span >
# demo4:命令过长可以使用反斜杠换行
bin /sqoop import --connect jdbc:mysql: //192 .168.56.1:3306 /dbName ?serverTimezone=GMT%2B8 \< /span >< /strong >
--username root --password 123456 --verbose --fetch-size 30 --query 'select * from tbName where $CONDITIONS' -- split -by id \< /span >< /strong >
--target- dir = /sqoop/path
Sqoop1 导入(MySQL导入到 Hive)
注意:启动Hive
# 配置
将 $HIVE_HOME/lib 下的 hive-common-x.x.x.jar 拷贝到 $SQOOP_HOME/lib 下
# fields-terminated-by;列的分隔符 bin /sqoop import --connect jdbc:mysql: //192 .168.56.1 /userscenter ?serverTimezone=GMT%2B8 \ --username root --password 123456 --verbose --fetch-size 30 --query 'select * from a_demo_dynasty where $CONDITIONS' -- split -by id \ --target- dir = /sqoop/a_dynasty \ --fields-terminated-by ',' \ --hive- import \ --hive-table mydata.a_dynasty --hive-overwrite
Sqoop1 全表导入到HDFS
bin /sqoop import -all-tables --connect jdbc:mysql: //192 .168.56.1:3306 /dbName ?serverTimezone=GMT%2B8 \ --username root --password 123456 --verbose --fetch-size 30 \ --warehouse- dir = /sqoop/a_dynasty