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

来源:互联网 发布:万网域名信息查询 编辑:程序博客网 时间:2024/04/29 09:25

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.gzmv sqoop-1.4.6.tar.gz /homecd /hometar -zxf sqoop-1.4.6.tar.gzrm sqoop-1.4.6.tar.gzcd /home/sqoop-1.4.6/lib/# mysqlwget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.10/mysql-connector-java-5.1.10.jar# postgrewget https://jdbc.postgresql.org/download/postgresql-9.4-1206-jdbc4.jar

配置环境变量

vim /etc/profile

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

source /etc/profile

配置文件

cd /home/sqoop-1.4.6/conf/cp sqoop-env-template.sh sqoop-env.shvim sqoop-env.sh

内容:

#Set path to where bin/hadoop is availableexport HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.7.3#Set path to where hadoop-*-core.jar is availableexport 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.'fiif [ ! -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 versionsqoop 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--connectjdbc:mysql://192.168.56.121:3306/metastore--usernamehiveuser--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将被使用
1 0
原创粉丝点击