大数据学习——Sqoop入门使用

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

Sqoop整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。

网址:http://sqoop.apache.org/ 
手册地址:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

Sqoop1与Sqoop2
两个不同的版本,完全不兼容
版本号划分区别,Apache版本:1.4.x(Sqoop1); 1.99.x(Sqoop2) CDH版本 : Sqoop-1.4.3-cdh4(Sqoop1) ; Sqoop2-1.99.2-cdh4.5.0 (Sqoop2)
Sqoop2比Sqoop1的改进
引入Sqoop server,集中化管理connector等
多种访问方式:CLI,Web UI,REST API
引入基于角色的安全机制
Sqoop1架构


Sqoop2架构


Sqoop1与Sqoop2比较
比较    Sqoop1    Sqoop2
架构    仅仅使用一个Sqoop客户端    引入了Sqoop server集中化管理connector,以及rest api,web,UI,并引入安全机制
部署    部署简单,安装需要root权限,connector必须符合JDBC模型    架构稍复杂,配置部署更繁琐
使用    命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴露    多种交互方式,命令行、webUI、rest API、connector集中化管理,所有的链接安装在Sqoop server上,完善权限管理机制,connector规范化,仅仅负责数据的读写
安装
到 http://mirror.bit.edu.cn/apache/sqoop/1.4.6/ 下载,注意与hadoop的版本号对应。

wget http://mirror.bit.edu.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.tar.gz /home
cd /home
tar -zxf sqoop-1.4.6.tar.gz
rm sqoop-1.4.6.tar.gz
cd /home/sqoop-1.4.6/lib/
# mysql
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.10/mysql-connector-java-5.1.10.jar
# postgre
wget https://jdbc.postgresql.org/download/postgresql-9.4-1206-jdbc4.jar

配置环境变量
vim /etc/profile

#sqoop
export SQOOP_HOME=/home/sqoop-1.4.6
export PATH=$PATH:$SQOOP_HOME/bin

source /etc/profile

配置文件
cd /home/sqoop-1.4.6/conf/
cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh

内容:

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.7.3

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.7.3

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
#export HIVE_HOME=

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=

vim /home/sqoop-1.4.6/bin/configure-sqoop

注释掉下面部分(如果使用HCatalog Accumulo等则不用此操作)
## Moved to be a runtime check in sqoop.
if [ ! -d "${HCAT_HOME}" ]; then
  echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
  echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
fi
if [ ! -d "${ACCUMULO_HOME}" ]; then
  echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
  echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
fi

测试
sqoop version
sqoop import --help

使用示例
简单示例:

sqoop import --connect jdbc:mysql://ip:3306/metastore --username hiveuser --password redhat --table TBLS

通过文件配置参数:

sqoop --options-file /users/homer/work/import.txt --table TEST

import.txt

import
--connect
jdbc:mysql://192.168.56.121:3306/metastore
--username
hiveuser
--password 
redhat

使用说明
测试连接
sqoop list-databases --connect jdbc:postgresql://ip/testdb --username root --P

显示表
sqoop list-tables --connect jdbc:postgresql://ip/testdb --username root --P

从关系数据库导HDFS
sqoop import --connect jdbc:postgresql://ip/testdb  --username root --P  --table fin_cashier_order --target-dir/user/hadoop/databases/ssa/fin_cashier_order -m 4

使用 sql 语句
$ sqoop import --connect jdbc:mysql://IP:3306/metastore --username hiveuser --password redhat --query 'SELECT * from TBLS where \$CONDITIONS ' --split-by tbl_id -m 4 --target-dir /user/hive/result
上面命令通过 -m 1 控制并发的 map 数。


direct
$ sqoop import --connect jdbc:mysql://ip:3306/metastore --username hiveuser --password redhat --table TBLS --delete-target-dir --direct --default-character-set UTF-8 --target-dir /user/hive/result

指定文件输出格式
sqoop import --connect jdbc:mysql://ip:3306/metastore --username hiveuser --password redhat --table TBLS --fields-terminated-by"\t" --lines-terminated-by "\n" --delete-target-dir --target-dir /user/hive/result

从HDFS导到关系数据库(未验证)
sqoop export --connect jdbc:mysql://hadoop003:3306/ssa --table fin_cashier_order2 --username root--password ****** --export-dirhdfs://jrtestcluster/user/hadoop/databases/ssa/fin_cashier_order/

其它参数:
参数    说明
–append    将数据追加到hdfs中已经存在的dataset中。使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。
–as-avrodatafile    将数据导入到一个Avro数据文件中
–as-sequencefile    将数据导入到一个sequence文件中
–as-textfile    将数据导入到一个普通文本文件中,生成该文本文件后,可以在hive中通过sql语句查询出结果。
–boundary-query    边界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:–boundary-query ‘select id,no from t where id = 3’,表示导入的数据为id=3的记录,或者 select min(), max() from ,注意查询的字段中不能有数据类型为字符串的字段,否则会报错
–columns    指定要导入的字段值,格式如:–columns id,username
–direct    直接导入模式,使用的是关系数据库自带的导入导出工具。官网上是说这样导入会更快
–direct-split-size    在使用上面direct直接导入的基础上,对导入的流按字节数分块,特别是使用直连模式从PostgreSQL导入数据的时候,可以将一个到达设定大小的文件分为几个独立的文件。
–inline-lob-limit    设定大对象数据类型的最大值
-m,–num-mappers    启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数
–query,-e    从查询结果中导入数据,该参数使用时必须指定–target-dir、–hive-table,在查询语句中一定要有where条件且在where条件中需要包含 $CONDITIONS,示例:–query ‘select * from t where $CONDITIONS ’ –target-dir /tmp/t –hive-table t
–split-by    表的列名,用来切分工作单元,一般后面跟主键ID
–table    关系数据库表名,数据从该表中获取
–delete-target-dir    删除目标目录
–target-dir    指定hdfs路径
–warehouse-dir    与 –target-dir 不能同时使用,指定数据导入的存放目录,适用于hdfs导入,不适合导入hive目录
–where    从关系数据库导入数据时的查询条件,示例:–where “id = 2”
-z,–compress    压缩参数,默认情况下数据是没被压缩的,通过该参数可以使用gzip压缩算法对数据进行压缩,适用于SequenceFile, text文本文件, 和Avro文件
–compression-codec    Hadoop压缩编码,默认是gzip
–null-string    可选参数,如果没有指定,则字符串null将被使用
–null-non-string    可选参数,如果没有指定,则字符串null将被使用
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值