sqoop基本介绍

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

这里写图片描述

sqoop的全称:sql-to-hadoop

sqoop分为连个版本,这两个版本完全不兼容
版本号的划分:
    apache:1.4.x~,1.99.x~
    CDH:sqoop-1.4.3-cdh4,sqoop2-1.99.2-cdh4.5.0

sqoop2比sqoop1改进的地方:
    引入sqoop server,几种管理Connector
    多种访问方式:CLI,Web UI,REST,API
    引入基于角色的安全机制

sqoop1和sqoop2的架构图:
这里写图片描述

这里写图片描述

sqool安装:

http://blog.youkuaiyun.com/w3045872817/article/details/78174770

用法介绍:

    Sqoop作为一个数据转移工具,必须要掌握其具体用法,下面将围绕Sqoop import to HDFS、增量导入、批脚本执行、Sqoop import to Hive、Sqoop import to Hbase、Sqoop export 几个方面进行介绍

111111111111111111111111111111111111111
    1.sqoop Import to hdfs
111111111111111111111111111111111111111
sqoop import
    --connect jdbc:mysql://localhost:3306/database 
    --username root 
    --password root target-dir /outdir/ 
    --fields-terminated-by '\t' 
    -m 1
    --null-string ''
    --incremental append
    --check-column id
    --last-value num

说明:
    - -connect:指定JDBCURL 其中database指的是(Mysql或者Oracle)中的数据库名 
    - -table:指的是要读取数据库database中的表名 
    - -username - -password:指的是Mysql数据库中的用户名和密码 
    - -target-dir:指的是HDFS中导入表的存放目录(注意:是目录) 
    - -fields-terminated-by :设定导入数据后每个字段的分隔符 
    -m:并发的map数量 
    - -null-string:导入的字段为空时,用指定的字符进行替换 
    - -incremental append:增量导入 
    - -check-column:指定增量导入时的参考列 
    - -last-value:上一次导入的最后一个值

例子:将MySQL中的数据导入hdfs:
msyql 中的数据为:
这里写图片描述

sqoop import --connect jdbc:mysql://spark02:3306/test --table testSqoop --username root --password root --target-dir /test/ --fields-terminated-by '\t' -m 1

结果为:
这里写图片描述

111111111111111111111111111111111111111
    2、增量导入 
111111111111111111111111111111111111111
    在实际的工作当中都是数据库的表中数据不断增加的,比如刚才的consumer表,因此每次导入的时候只想导入增量的部分,不想将表中的数据在重新导入一次(费时费力),即如果表中的数据增加了内容,就向Hadoop中导入一下,如果表中的数据没有增加就不导入—–这就是增量导入。
    --incremental append :增量导入
    --check-column:增量导入时需要制定增量的标准——那一列作为增量标准
    --last-value:(增量导入时必须指定参考列—–上一次导入的最后一个值,否则表中的数据又会被重新导入一次) 

以上次为标准:
这里写图片描述

sqoop import --connect jdbc:mysql://spark02:3306/test --table testSqoop --username root --password root --target-dir /test1/ --fields-terminated-by '\t' -m 1 --incremental append --check-column id --last-value 5

结果为:
这里写图片描述

111111111111111111111111111111111111111
    3、批量导入
111111111111111111111111111111111111111

    从上面导入的命令可以看出,命令行包含的命令太多了,太麻烦了,因此如果类似的作业太多的话,我们应该将其设置为一个作业,做成一个脚本文件

    执行命令为:
        sqoop job --create job001 -- import --connect jdbc:mysql://spark02:3306/test --table testSqoop --username root --password root --target-dir /test2/ --fields-terminated-by '\t' -m 1

    查看批脚本文件:
    sqoop job --list
    执行文件:
    sqoop jbo -exec 即可运行批脚本文件
111111111111111111111111111111111111111
    4、Sqoop import to hive 
111111111111111111111111111111111111111

sqoop import 
    --connection jdbc:mysql://localhost:3306/database
    --table table_name
    --username root
    --password root
    --hive-import
    --create-hive-table
    --hive-table d1.table1
    --fields-terminated-by '\t'
    -m 1
    --null-string ''
    --incremental append
    --check-column
    --last-value

说明:
    - -connect:指定JDBCURL 其中database指的是(Mysql或者Oracle)中的数据库名 
    - -table:指的是要读取数据库database中的表名 
    - -username - -password:指的是Mysql数据库中的用户名和密码 
    - -hive-import 指的是将数据导入到hive数据仓库中 
    - -create-hive-table 创建表,注意:如果表已经存在就不用写这个命令了,否则会报错 
    - -hive-table 指定databasename.tablename (哪个数据库中的哪个表) 
    - -fields-terminated-by :设定导入数据后每个字段的分隔符 
    -m:并发的map数量 
    - -null-string:导入的字段为空时,用指定的字符进行替换 
    - -incremental append:增量导入 
    - -check-column:指定增量导入时的参考列 
    - -last-value:上一次导入的最后一个值 

使用上一个数据库的内容:

sqoop import --connect jdbc:mysql://spark02:3306/test --table testSqoop --username root --password root --hive-import --create-hive-table --hive-table test.testdb1 --fields-terminated-by '\t' -m 1

结果为:

上面的操作类似:

hadoop jar copy.jar  mysql://hadoop80:3306/hive/consumer  /hive/d1.table1
111111111111111111111111111111111111111
    5、Sqoop import to hbase 
111111111111111111111111111111111111111

sqoop import
    --connect jdbc:mysql://spark02:3306/database
    --table table_name
    --username root
    --password root
    --hbase-create-table
    --hbase-table A
    --column-family infor
    --hbase-row-key id
    --fields-terminated-by '\t'
    -m 1
    --null-string ''
    --incremental append
    --check-column id
    --last-value num

说明:
    - -connect:指定JDBCURL 其中database指的是(Mysql或者Oracle)中的数据库名 
    - -table:指的是要读取数据库database中的表名 
    - -username - -password:指的是Mysql数据库中的用户名和密码 
    - -hbase-create-table:表示在hbase中建立表 
    - -hbase-table A:指定在hbase中建立表A 
    - -column-family infor:表示在表A中建立列族infor。 
    - -hbase-row-key :表示表A的row-key是consumer表的id字段 
    -m:并发的map数量 
    - -null-string:导入的字段为空时,用指定的字符进行替换 
    - -incremental append:增量导入 
    - -check-column:指定增量导入时的参考列 
    - -last-value:上一次导入的最后一个值 

以上次的数据库内容为列:

    sqoop import --connect jdbc:mysql://spark02:3306/test --table testSqoop --username root --password root --hbase-create-table --hbase-table A --column-family infor --hbase-row-key id --fields-terminated-by '\t' -m 1  

111111111111111111111111111111111111111
    6、Sqoop export 
111111111111111111111111111111111111111

22222222222222222222222222
    A.HDFS to mysql
22222222222222222222222222
sqoop export 
    --connect jdbc:msyql://localhost:3306:/database
    --table table_name
    --username root
    --password root
    --export-dir /test1/
    --fields-terminated-by '\t'
    -m 1 
说明:
    - -connect:指定JDBCURL 其中database指的是(Mysql或者Oracle)中的数据库名 
    - -table:指的是要读取数据库database中的表名 
    - -username - -password:指的是Mysql数据库中的用户名和密码 
    - -export-dir  在hdfs中的位置 
    - -fields-terminated-by :HDFS中的文件字段的间隔符
    -m:并发的map数量 
sqoop export --connect jdbc:mysql://spark02:3306/test --table testSqoop --username root --password root --export-dir /test1/ --fields-terminated-by '\t' -m 1
注:从Hadoop向数据库中导入数据时,数据库中相应的表事先必须创建好。 
05-27
### Sqoop 使用指南与介绍 #### 什么是SqoopSqoop(SQL-to-Hadoop)是一个开源工具,主要用于在Hadoop和结构化数据源(如关系型数据库、企业数据仓库等)之间进行高效的数据传输。它支持将关系型数据库中的数据导入到Hadoop的HDFS、Hive或HBase中,同时也支持将Hadoop中的数据导出到关系型数据库[^1]。 #### Sqoop的版本 Sqoop目前存在两个主要版本:1.4.x(通常称为Sqoop1)和1.9.x(通常称为Sqoop2)。尽管Sqoop2在架构和实现上对Sqoop1进行了较大改进,但两者之间并不兼容。本文内容基于Sqoop1进行讲解。 #### Sqoop基本架构 Sqoop的核心架构设计使得它可以轻松地与Hadoop生态系统集成。其主要组件包括: - **Connectors**:用于连接不同类型的关系型数据库。 - **Drivers**:负责执行具体的数据库操作。 - **MapReduce任务**:通过Hadoop的MapReduce框架实现并行数据导入/导出[^1]。 #### Sqoop的环境配置 在使用Sqoop之前,需要正确配置环境变量。这通常涉及修改`sqoop-env.sh`文件以指定Hadoop、Hive、HBase等相关路径。例如: ```bash # Set Hadoop-specific environment variables here. export HADOOP_COMMON_HOME=/usr/local/hadoop/ export HADOOP_MAPRED_HOME=/usr/local/hadoop export HBASE_HOME=/usr/local/hbase export HIVE_HOME=/usr/local/hive ``` 上述配置确保Sqoop能够找到Hadoop、HBase和Hive的安装路径,并正确运行相关任务[^3]。 #### Sqoop基本用法 以下是一些常见的Sqoop命令及其用途: 1. **从MySQL导入数据到HDFS**: ```bash sqoop import \ --connect jdbc:mysql://<host>:<port>/<database> \ --username <username> \ --password <password> \ --table <table_name> \ --target-dir /path/to/hdfs/directory \ --split-by <column_name> ``` 其中,`--split-by`参数用于指定拆分列,通常选择主键或唯一索引列以避免重复数据[^4]。 2. **创建、列出和执行Job任务**: - 创建Job任务: ```bash sqoop job --create <job_name> -- import ... ``` - 列出所有Job任务: ```bash sqoop job --list ``` - 删除Job任务: ```bash sqoop job --delete <job_name> ``` - 执行Job任务: ```bash sqoop job --exec <job_name> ``` 3. **增量导入**: 增量导入允许用户仅导入自上次导入以来新增或更新的数据。示例命令如下: ```bash sqoop import \ --connect jdbc:mysql://<host>:<port>/<database> \ --username <username> \ --password <password> \ --table <table_name> \ --incremental append \ --check-column <timestamp_column> \ --last-value <last_value> ``` 这里,`--incremental`参数指定了增量模式(如`append`),`--check-column`指定了时间戳列,而`--last-value`指定了上次导入的最大值[^2]。 4. **数据格式转换**: Sqoop支持多种数据格式的转换,例如CSV、Avro、Parquet等。可以通过`--as-textfile`、`--as-avrodatafile`或`--as-parquetfile`等参数指定输出格式[^2]。 #### Sqoop的最佳实践 - 在表没有主键的情况下,可以使用`--split-by`参数指定一个分布均匀的列(如PI字段在Teradata中[^5])。 - 配置合适的分片数以优化性能,避免过多或过少的Map任务[^1]。 ### 示例代码 以下是一个完整的Sqoop导入命令示例,展示如何从MySQL数据库导入数据到HDFS: ```bash sqoop import \ --connect jdbc:mysql://localhost:3306/mydb \ --username root \ --password secret \ --table employees \ --target-dir /user/hadoop/employees \ --split-by id \ --num-mappers 4 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值