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 的架构图

 

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

  

 

posted @ 2020-12-22 09:24  HOUHUILIN  阅读(76)  评论(0编辑  收藏  举报